ZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5MGE4NAotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlCkBAIC0wLDAgKzEsMTE1IEBACisjCisjICAgIENvcHlyaWdodCAoYykgMjAxMC0yMDExIE5lc3QsIEluYy4KKyMgICAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgICAgVGhpcyBkb2N1bWVudCBpcyB0aGUgcHJvcGVydHkgb2YgTmVzdC4gSXQgaXMgY29uc2lkZXJlZAorIyAgICBjb25maWRlbnRpYWwgYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorIworIyAgICBUaGlzIGRvY3VtZW50IG1heSBub3QgYmUgcmVwcm9kdWNlZCBvciB0cmFuc21pdHRlZCBpbiBhbnkgZm9ybSwKKyMgICAgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyMgICAgTmVzdC4KKyMKKyMgICAgRGVzY3JpcHRpb246CisjICAgICAgVGhpcyBmaWxlIGlzIHRoZSBtYWtlZmlsZSBmb3IgdGhlIExlbXBlbC1aaXYtT2Jlcmh1bWVyIChMWk8pCisjICAgICAgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorIworCitCdWlsZENvbmZpZ1NwZWNpYWxpemVkCTo9IE5vCitCdWlsZFByb2R1Y3RTcGVjaWFsaXplZAk6PSBObworCitpbmNsdWRlIHByZS5tYWsKKworUGFja2FnZU5hbWUJCTo9IGx6bworCitQYWNrYWdlRXh0ZW5zaW9uCTo9IHRhci5negorUGFja2FnZVNlcGFyYXRvcgk6PSAtCisKK1BhY2thZ2VBcmNoaXZlCQk6PSAkKFBhY2thZ2VOYW1lKS4kKFBhY2thZ2VFeHRlbnNpb24pCitQYWNrYWdlU291cmNlRGlyCTo9ICQoUGFja2FnZU5hbWUpJChQYWNrYWdlU2VwYXJhdG9yKSQoUGFja2FnZVZlcnNpb24pCisKK1BhY2thZ2VCdWlsZE1ha2VmaWxlCT0gJChjYWxsIEdlbmVyYXRlQnVpbGRQYXRocyxNYWtlZmlsZSkKKworQ2xlYW5QYXRocwkJKz0gJChQYWNrYWdlTGljZW5zZUZpbGUpCisKK2FsbDogJChQYWNrYWdlRGVmYXVsdEdvYWwpCisKKyMgR2VuZXJhdGUgdGhlIHBhY2thZ2UgbGljZW5zZSBjb250ZW50cy4KKworJChQYWNrYWdlU291cmNlRGlyKS9DT1BZSU5HOiBzb3VyY2UKKworJChQYWNrYWdlTGljZW5zZUZpbGUpOiAkKFBhY2thZ2VTb3VyY2VEaXIpL0NPUFlJTkcKKwkkKGNvcHktcmVzdWx0KQorCisjIEV4dHJhY3QgdGhlIHNvdXJjZSBmcm9tIHRoZSBhcmNoaXZlIGFuZCBhcHBseSBwYXRjaGVzLCBpZiBhbnkuCisKKyQoUGFja2FnZVNvdXJjZURpcik6ICQoUGFja2FnZUFyY2hpdmUpICQoUGFja2FnZVBhdGNoUGF0aHMpCisJJChleHBhbmQtYW5kLXBhdGNoLXBhY2thZ2UpCisKKyMgUHJlcGFyZSB0aGUgc291cmNlcy4KKworLlBIT05ZOiBzb3VyY2UKK3NvdXJjZTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpCisKKyMgUGF0Y2ggdGhlIHNvdXJjZXMsIGlmIG5lY2Vzc2FyeS4KKworLlBIT05ZOiBwYXRjaAorcGF0Y2g6IHNvdXJjZQorCisjIEdlbmVyYXRlIHRoZSBwYWNrYWdlIGJ1aWxkIG1ha2VmaWxlLgorCiskKFBhY2thZ2VCdWlsZE1ha2VmaWxlKTogfCAkKFBhY2thZ2VTb3VyY2VEaXIpICQoQnVpbGREaXJlY3RvcnkpCisJJChWZXJib3NlKWNkICQoQnVpbGREaXJlY3RvcnkpICYmIFwKKwkkKENVUkRJUikvJChQYWNrYWdlU291cmNlRGlyKS9jb25maWd1cmUgXAorCUNDPSIkKENDKSIgQVI9JChBUikgUkFOTElCPSQoUkFOTElCKSBcCisJSU5TVEFMTD0iJChJTlNUQUxMKSAkKElOU1RBTExGTEFHUykiIFwKKwktLWJ1aWxkPSQoSG9zdFR1cGxlKSBcCisJLS1ob3N0PSQoVGFyZ2V0VHVwbGUpIFwKKwktLXByZWZpeD0vdXNyIFwKKwktLWVuYWJsZS1zaGFyZWQKKworIyBDb25maWd1cmUgdGhlIHNvdXJjZSBmb3IgYnVpbGRpbmcuCisKKy5QSE9OWTogY29uZmlndXJlCitjb25maWd1cmU6IHNvdXJjZSAkKFBhY2thZ2VCdWlsZE1ha2VmaWxlKQorCisjIEJ1aWxkIHRoZSBzb3VyY2UuCisjCisjIFdlIGhhdmUgdG8gdW5zZXQgTUFLRUZMQUdTIHNpbmNlIHRoZXkgY29uZnVzZSB0aGUgcGFja2FnZSBidWlsZCBvdGhlcndpc2UuCisKKy5QSE9OWTogYnVpbGQKK2J1aWxkOiBjb25maWd1cmUKKwkkKFZlcmJvc2UpdW5zZXQgTUFLRUZMQUdTICYmIFwKKwkkKE1BS0UpICQoSk9CU0ZMQUcpIC1DICQoQnVpbGREaXJlY3RvcnkpIGFsbAorCisjIFN0YWdlIHRoZSBidWlsZCB0byBhIHRlbXBvcmFyeSBpbnN0YWxsYXRpb24gYXJlYS4KKyMKKyMgV2UgaGF2ZSB0byB1bnNldCBNQUtFRkxBR1Mgc2luY2UgdGhleSBjb25mdXNlIHRoZSBwYWNrYWdlIGJ1aWxkIG90aGVyd2lzZS4KKyMKKyMgV2UgZXhwbGljdGx5IHJlbW92ZSAnbGlibHpvMi5sYScgYmVjYXVzZSBzb21lIHBhY2thZ2VzIHRoYXQgZGVwZW5kCisjIG9uIGxpYmx6bzIgdXNlIGxpYnRvb2wuIElmIGxpYnRvb2wgZmluZHMgYSAnKi5sYScgZmlsZSBmb3IgYQorIyBsaWJyYXJ5LCBpdCB1c2VzIHRoZSB2YWx1ZSBvZiAnbGliZGlyPTxkaXI+JyBpdCBmaW5kcy4gSW4gb3VyIGNhc2UsCisjIHNpbmNlICctLXByZWZpeD0vdXNyJyB0aGlzIHZhbHVlIGlzICcvdXNyL2xpYicuIEl0IHRoZW4gcmVzb2x2ZXMKKyMgJy1sbHpvMicgdG8gJy91c3IvbGliL2xpYmx6bzIuc28nLiBJbiBhIGNyb3NzLWNvbXBpbGF0aW9uCisjIGVudmlyb25tZW50LCB0aGlzIGlzIGxpa2VseSB0byBiZSBuZWl0aGVyIHRoZSByaWdodCBhcmNoaXRlY3R1cmUgbm9yCisjIHRoZSByaWdodCB2ZXJzaW9uIHRvIGxpbmsgYWdhaW5zdC4gSW4gc2hvcnQsIHdlIGxvc2UuCisjCisjIFdlIGNvdWxkIGFsc28gaGFuZGxlIHRoaXMgYnkgcmVtb3ZpbmcgREVTVERJUiBhbmQgc2V0dGluZyB0aGUgcHJlZml4CisjIHRvICQoUmVzdWx0RGlyZWN0b3J5KTsgaG93ZXZlciwgdGhhdCByZXN1bHRzIGluIGxpYnRvb2wgaGFyZC1jb2RpbmcKKyMgJChSZXN1bHREaXJlY3RvcnkpIGFzIHRoZSBSUEFUSCBpbiB0aGUgbGlua2VkIGV4ZWN1dGFibGVzIHdoaWNoIGlzCisjIE5PVCB3aGF0IHdlIHdhbnQgZWl0aGVyLiBXZSBsb3NlIGFnYWluLgorIworIyBCeSByZW1vdmluZyB0aGUgJyoubGEnIGZpbGUsIHdlIHdpbiBieSBlbnN1cmluZyBuZWl0aGVyIGEgbWlzZGlyZWN0ZWQKKyMgbGluayBub3IgYW4gUlBBVEguCisKKy5QSE9OWTogc3RhZ2UKK3N0YWdlOiBidWlsZCB8ICQoUmVzdWx0RGlyZWN0b3J5KQorCSQoVmVyYm9zZSl1bnNldCBNQUtFRkxBR1MgJiYgXAorCSQoTUFLRSkgJChKT0JTRkxBRykgLUMgJChCdWlsZERpcmVjdG9yeSkgREVTVERJUj0kKFJlc3VsdERpcmVjdG9yeSkgaW5zdGFsbAorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpICQoY2FsbCBHZW5lcmF0ZVJlc3VsdFBhdGhzLCx1c3IvbGliL2xpYmx6bzIubGEpCisKK2NsZWFuOgorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUGFja2FnZVNvdXJjZURpcikKKwkkKFZlcmJvc2UpJChSTSkgJChSTUZMQUdTKSAtciAkKEJ1aWxkRGlyZWN0b3J5KQorCSQoVmVyYm9zZSkkKFJNKSAkKFJNRkxBR1MpIC1yICQoUmVzdWx0RGlyZWN0b3J5KQorCitpbmNsdWRlIHBvc3QubWFrCmRpZmYgLS1naXQgYS9sem8tMi4wMy9BVVRIT1JTIGIvbHpvLTIuMDMvQVVUSE9SUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNkMzJjCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQVVUSE9SUwpAQCAtMCwwICsxLDMgQEAKK0F1dGhvcnMgb2YgdGhlIExaTyBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnk6CisKK01hcmt1cyBGLlguSi4gT2Jlcmh1bWVyLiAgSW52ZW50ZWQsIGRlc2lnbmVkIGFuZCBpbXBsZW1lbnRlZCBMWk8uCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CLzAwUkVBRE1FLlRYVCBiL2x6by0yLjAzL0IvMDBSRUFETUUuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OGEwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CLzAwUkVBRE1FLlRYVApAQCAtMCwwICsxLDU0IEBACitTaW1wbGUgbWFrZSBkcml2ZXJzIGZvciBET1MsIFdpbmRvd3MsIE9TLzIgYW5kIG90aGVyIHN5c3RlbXMNCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCisNCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyBhIGJ1bmNoIG9mIHNpbXBsZSBidWlsZCBzY3JpcHRzIC0gSSd2ZSB0cmllZA0KK3RvIG1ha2UgdGhlbSBhcyBmb29scHJvb2YgYXMgcG9zc2libGUuDQorDQorVG8gYnVpbGQgTFpPIGZvciB5b3VyIHN5c3RlbSB0eXBlIGBiXE9TXENPTVBJTEVSJyBpbiB0aGUgYmFzZSBkaXJlY3RvcnksDQorZS5nLiBgYlx3aW4zMlx2Yy5iYXQnIHdpbGwgYnVpbGQgdGhlIFdpbjMyIFZpc3VhbCBDL0MrKyB2ZXJzaW9uLg0KKw0KK0FmdGVyIGJ1aWxkaW5nIGRvIGEgYmFzaWMgdGVzdCBieSBydW5uaW5nIGBsem90ZXN0LmV4ZSAtbWx6byBDT1BZSU5HJy4NCit1dGlsXGNoZWNrLnNoIGlzIGFuIGV4YW1wbGUgb2YgYSBtb3JlIHRob3JvdWdoIHRlc3QgZHJpdmVyLg0KKw0KK1BsZWFzZSBzZW5kIG1lIHlvdXIgYWRkaXRpb25hbC9pbXByb3ZlZCB2ZXJzaW9ucy4NCisNCisNCitPdmVydmlldzoNCistLS0tLS0tLS0NCisNCitiXGRvczMyXGJjX3BwLmJhdCAgICAgICAgICAgQm9ybGFuZCBDL0MrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2JcZG9zMzJcZGoyLmJhdCAgICAgICAgICAgICBkamdwcCB2MiArIGdjYyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpDQorYlxkb3MzMlxkbS5iYXQgICAgICAgICAgICAgIERpZ2l0YWwgTWFycyBDL0MrKyAgICAgICAgICAgICAgICAgICAgICAoMSkNCitiXGRvczMyXGVteC5iYXQgICAgICAgICAgICAgZW14ICsgZ2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2JcZG9zMzJcc2MuYmF0ICAgICAgICAgICAgICBTeW1hbnRlYyBDL0MrKyAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpDQorYlxkb3MzMlx3Yy5iYXQgICAgICAgICAgICAgIFdhdGNvbSBDL0MrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCisNCitiXG9zMlxlbXguYmF0ICAgICAgICAgICAgICAgZW14ICsgZ2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2Jcb3MyXHdjLmJhdCAgICAgICAgICAgICAgICBXYXRjb20gQy9DKysgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpDQorDQorYlx3aW4zMlxiYy5iYXQgICAgICAgICAgICAgIEJvcmxhbmQgQy9DKysgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCitiXHdpbjMyXGN5Z3dpbi5iYXQgICAgICAgICAgQ3lnd2luICsgZ2NjICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2Jcd2luMzJcZG0uYmF0ICAgICAgICAgICAgICBEaWdpdGFsIE1hcnMgQy9DKysgICAgICAgICAgICAgICAgICAgICAgKDEpDQorYlx3aW4zMlxpYy5iYXQgICAgICAgICAgICAgIEludGVsIEMvQysrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCitiXHdpbjMyXG1pbmd3LmJhdCAgICAgICAgICAgTWluR1cgKyBnY2MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2Jcd2luMzJcbXdlcmtzLmJhdCAgICAgICAgICBNZXRyb3dlcmtzIENvZGVXYXJyaW9yIEMvQysrICAgICAgICAgICAgKDEpDQorYlx3aW4zMlxwZWxsZXNjLmJhdCAgICAgICAgIFBlbGxlcyBDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCitiXHdpbjMyXHBnaS5iYXQgICAgICAgICAgICAgUG9ydGxhbmQgR3JvdXAgUEdJIEMvQysrICAgICAgICAgICAgICAgICgxKQ0KK2Jcd2luMzJccnN4bnQuYmF0ICAgICAgICAgICByc3hudCArIGdjYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEpDQorYlx3aW4zMlxzYy5iYXQgICAgICAgICAgICAgIFN5bWFudGVjIEMvQysrICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCitiXHdpbjMyXHZjLmJhdCAgICAgICAgICAgICAgVmlzdWFsIEMvQysrICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxKQ0KK2Jcd2luMzJcdmNfZGxsLmJhdCAgICAgICAgICBWaXN1YWwgQy9DKysgKERMTCB2ZXJzaW9uKSAgICAgICAgICAgICAgKDEpDQorYlx3aW4zMlx3Yy5iYXQgICAgICAgICAgICAgIFdhdGNvbSBDL0MrKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSkNCisNCitiXHdpbjY0XGljLmJhdCAgICAgICAgICAgICAgSW50ZWwgQy9DKysgKEl0YW5pdW0pDQorYlx3aW42NFxpY19kbGwuYmF0ICAgICAgICAgIEludGVsIEMvQysrIChJdGFuaXVtKSAoRExMIHZlcnNpb24pDQorYlx3aW42NFx2Yy5iYXQgICAgICAgICAgICAgIFZpc3VhbCBDL0MrKyAoQU1ENjQgb3IgSXRhbml1bSkNCitiXHdpbjY0XHZjX2RsbC5iYXQgICAgICAgICAgVmlzdWFsIEMvQysrIChBTUQ2NCBvciBJdGFuaXVtKSAoRExMIHZlcnNpb24pDQorDQorRmluYWxseSwgdGhlcmUgYXJlIGFsc28gYSBudW1iZXIgb2YgYnVpbGQgc2NyaXB0cyBmb3Igb2Jzb2xldGUgc3lzdGVtcw0KK2xpa2UgZG9zMTYgYW5kIHdpbjE2Lg0KKw0KKw0KK05vdGVzOg0KKyAgKDEpIGluY2x1ZGVzIHN1cHBvcnQgZm9yIGkzODYgYXNzZW1ibGVyIHZlcnNpb25zDQorDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9jbGVhbi5iYXQgYi9sem8tMi4wMy9CL2NsZWFuLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjdkZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9jbGVhbi5iYXQKQEAgLTAsMCArMSw0IEBACitAZGVsIC9xICouZGVmICouZXJyICouZXhwICoubWFwICoubyAqLm9iaiAqLnJlcyAqLnRkcyA+IG51bCAyPiBudWwNCitAZGVsIC9xIGxpYmx6bzIuYSBsem8yLmEgbHpvMi5kbGwgbHpvMi5saWIgPiBudWwgMj4gbnVsDQorQGRlbCAvcSBhLmV4ZSBhLm91dCBkaWN0LmV4ZSBsem9wYWNrLmV4ZSBwcmVjb21wLmV4ZSBwcmVjb21wMi5leGUgc2ltcGxlLmV4ZSA+IG51bCAyPiBudWwNCitAZGVsIC9xIGx6b3Rlc3QuZXhlIHRlc3RtaW5pLmV4ZSA+IG51bCAyPiBudWwNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvbmUuYmF0IGIvbHpvLTIuMDMvQi9kb25lLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWJmNmFhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb25lLmJhdApAQCAtMCwwICsxLDIgQEAKK0BlY2hvIC8vDQorQGVjaG8gLy8gQnVpbGRpbmcgTFpPIHdhcyBzdWNjZXNzZnVsLiBBbGwgZG9uZS4NCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczE2L2JjLmJhdCBiL2x6by0yLjAzL0IvZG9zMTYvYmMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZWQ5OWYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L2JjLmJhdApAQCAtMCwwICsxLDM5IEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMTYtYml0DQorQGVjaG8gLy8gICBCb3JsYW5kIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPWJjYyAtbWwgLWYtDQorc2V0IENGPS1PMSAtZCAtdyAtdy1yY2ggLXctc2lnICVDRkklIC1JaW5jbHVkZVxsem8NCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1Jc3JjIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCit0bGliICVCTElCJSBAYlxkb3MxNlxiYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWYgLUlleGFtcGxlcyBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1mIC1scyAtSWx6b3Rlc3QgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi9iYy5yc3AgYi9sem8tMi4wMy9CL2RvczE2L2JjLnJzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFkODNlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi9iYy5yc3AKQEAgLTAsMCArMSw2NyBAQAorK2x6bzEub2JqICYNCisrbHpvMV85OS5vYmogJg0KKytsem8xYS5vYmogJg0KKytsem8xYV85OS5vYmogJg0KKytsem8xYl8xLm9iaiAmDQorK2x6bzFiXzIub2JqICYNCisrbHpvMWJfMy5vYmogJg0KKytsem8xYl80Lm9iaiAmDQorK2x6bzFiXzUub2JqICYNCisrbHpvMWJfNi5vYmogJg0KKytsem8xYl83Lm9iaiAmDQorK2x6bzFiXzgub2JqICYNCisrbHpvMWJfOS5vYmogJg0KKytsem8xYl85OS5vYmogJg0KKytsem8xYl85eC5vYmogJg0KKytsem8xYl9jYy5vYmogJg0KKytsem8xYl9kMS5vYmogJg0KKytsem8xYl9kMi5vYmogJg0KKytsem8xYl9yci5vYmogJg0KKytsem8xYl94eC5vYmogJg0KKytsem8xY18xLm9iaiAmDQorK2x6bzFjXzIub2JqICYNCisrbHpvMWNfMy5vYmogJg0KKytsem8xY180Lm9iaiAmDQorK2x6bzFjXzUub2JqICYNCisrbHpvMWNfNi5vYmogJg0KKytsem8xY183Lm9iaiAmDQorK2x6bzFjXzgub2JqICYNCisrbHpvMWNfOS5vYmogJg0KKytsem8xY185OS5vYmogJg0KKytsem8xY185eC5vYmogJg0KKytsem8xY19jYy5vYmogJg0KKytsem8xY19kMS5vYmogJg0KKytsem8xY19kMi5vYmogJg0KKytsem8xY19yci5vYmogJg0KKytsem8xY194eC5vYmogJg0KKytsem8xZl8xLm9iaiAmDQorK2x6bzFmXzl4Lm9iaiAmDQorK2x6bzFmX2QxLm9iaiAmDQorK2x6bzFmX2QyLm9iaiAmDQorK2x6bzF4XzEub2JqICYNCisrbHpvMXhfMWsub2JqICYNCisrbHpvMXhfMWwub2JqICYNCisrbHpvMXhfMW8ub2JqICYNCisrbHpvMXhfOXgub2JqICYNCisrbHpvMXhfZDEub2JqICYNCisrbHpvMXhfZDIub2JqICYNCisrbHpvMXhfZDMub2JqICYNCisrbHpvMXhfby5vYmogJg0KKytsem8xeV8xLm9iaiAmDQorK2x6bzF5Xzl4Lm9iaiAmDQorK2x6bzF5X2QxLm9iaiAmDQorK2x6bzF5X2QyLm9iaiAmDQorK2x6bzF5X2QzLm9iaiAmDQorK2x6bzF5X28ub2JqICYNCisrbHpvMXpfOXgub2JqICYNCisrbHpvMXpfZDEub2JqICYNCisrbHpvMXpfZDIub2JqICYNCisrbHpvMXpfZDMub2JqICYNCisrbHpvMmFfOXgub2JqICYNCisrbHpvMmFfZDEub2JqICYNCisrbHpvMmFfZDIub2JqICYNCisrbHpvX2NyYy5vYmogJg0KKytsem9faW5pdC5vYmogJg0KKytsem9fcHRyLm9iaiAmDQorK2x6b19zdHIub2JqICYNCisrbHpvX3V0aWwub2JqDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi9iY18yODYuYmF0IGIvbHpvLTIuMDMvQi9kb3MxNi9iY18yODYuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNWVhODQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L2JjXzI4Ni5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgQm9ybGFuZCBDL0MrKyArIFBoYXJsYXAgMjg2RE9TLUV4dGVuZGVyDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPWJjYzI4NiAtbWwgLTINCitzZXQgQ0Y9LU8xIC1kIC13IC13LXJjaCAtdy1zaWcgJUNGSSUgLUlpbmNsdWRlXGx6bw0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLUlzcmMgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK3RsaWIgJUJMSUIlIEBiXGRvczE2XGJjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgLURXSVRIX1RJTUVSIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JbHpvdGVzdCBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JbWluaWx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZG9zMTYvYmNfcHAuYmF0IGIvbHpvLTIuMDMvQi9kb3MxNi9iY19wcC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTEzZmFlNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0IvZG9zMTYvYmNfcHAuYmF0CkBAIC0wLDAgKzEsNDIgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIERPUyAxNi1iaXQNCitAZWNobyAvLyAgIEJvcmxhbmQgQy9DKysgKyBCb3JsYW5kIFBvd2VyUGFjayAxLjAgKERQTUkxNikNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9YmNjIC1tbCAtMiAtV1gNCitzZXQgQ0Y9LU8xIC1kIC13IC13LXNpZyAlQ0ZJJSAtSWluY2x1ZGVcbHpvDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtSXNyYyAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQordGxpYiAlQkxJQiUgQGJcZG9zMTZcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyAtRFdJVEhfVElNRVIgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlsem90ZXN0IGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUltaW5pbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi9kbS5iYXQgYi9sem8tMi4wMy9CL2RvczE2L2RtLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBlMDNlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi9kbS5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgRGlnaXRhbCBNYXJzIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPWRtYyAtbWwNCitzZXQgQ0Y9LW8gLXctICVDRkklDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliICVCTElCJSAvYiAvYyAvbiAvbm9pIEBiXGRvczE2XGJjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczE2L21jLmJhdCBiL2x6by0yLjAzL0IvZG9zMTYvbWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMTJkMGYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L21jLmJhdApAQCAtMCwwICsxLDUyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMTYtYml0DQorQGVjaG8gLy8gICBNaWNyb3NvZnQgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtQUwNCitzZXQgQ0Y9LU8gLUdmIC1XMyAlQ0ZJJQ0KK3NldCBMRj0vbWFwDQorDQorQFJFTSAlQ0MlICVDRiUgLWMgc3JjXCouYw0KK2ZvciAlJWYgaW4gKHNyY1wqLmMpIGRvICVDQyUgJUNGJSAtYyAlJWYNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgL25vbG9nbyAlQkxJQiUgQGJcZG9zMTZcYmMucnNwOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xkaWN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgZGljdC5vYmosLCwlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGx6b3BhY2suYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBsem9wYWNrLm9iaiwsLCVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIHByZWNvbXAub2JqLCwsJUJMSUIlOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xwcmVjb21wMi5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIHByZWNvbXAyLm9iaiwsLCVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcc2ltcGxlLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgc2ltcGxlLm9iaiwsLCVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgbHpvdGVzdFxsem90ZXN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgbHpvdGVzdC5vYmosLCwlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczE2L21jX3FjLmJhdCBiL2x6by0yLjAzL0IvZG9zMTYvbWNfcWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmZThlMDQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L21jX3FjLmJhdApAQCAtMCwwICsxLDUyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMTYtYml0DQorQGVjaG8gLy8gICBNaWNyb3NvZnQgQy9DKysgKFF1aWNrQykNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtcWMgLUFMDQorc2V0IENGPS1PIC1HZiAtVzMgJUNGSSUNCitzZXQgTEY9L21hcA0KKw0KK0BSRU0gJUNDJSAlQ0YlIC1jIHNyY1wqLmMNCitmb3IgJSVmIGluIChzcmNcKi5jKSBkbyAlQ0MlICVDRiUgLWMgJSVmDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliIC9ub2xvZ28gJUJMSUIlIEBiXGRvczE2XGJjLnJzcDsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcZGljdC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIGRpY3Qub2JqLCwsJUJMSUIlOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xsem9wYWNrLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgbHpvcGFjay5vYmosLCwlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBwcmVjb21wLm9iaiwsLCVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcDIuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBwcmVjb21wMi5vYmosLCwlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHNpbXBsZS5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIHNpbXBsZS5vYmosLCwlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGx6b3Rlc3RcbHpvdGVzdC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIGx6b3Rlc3Qub2JqLCwsJUJMSUIlOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi9xYy5iYXQgYi9sem8tMi4wMy9CL2RvczE2L3FjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzNmYzZkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi9xYy5iYXQKQEAgLTAsMCArMSw0MCBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgTWljcm9zb2Z0IFF1aWNrQw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1xY2wgLW5vbG9nbyAtQUwNCitzZXQgQ0Y9LU8gLUdmIC1XMyAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUgLUZtDQorDQorQFJFTSAlQ0MlICVDRiUgLWMgc3JjXCouYw0KK2ZvciAlJWYgaW4gKHNyY1wqLmMpIGRvICVDQyUgJUNGJSAtYyAlJWYNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgL25vbG9nbyAlQkxJQiUgQGJcZG9zMTZcYmMucnNwOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczE2L3NjLmJhdCBiL2x6by0yLjAzL0IvZG9zMTYvc2MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1N2QyYjkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L3NjLmJhdApAQCAtMCwwICsxLDUzIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMTYtYml0DQorQGVjaG8gLy8gICBTeW1hbnRlYyBDL0MrKw0KK0BlY2hvIC8vDQorQGVjaG8gLy8gTk9URTogTFpPIGJyZWFrcyB0aGUgb3B0aW1pemVyLCBzbyB3ZSBkaXNhYmxlIG9wdGltaXphdGlvbnMNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9c2MgLW1sDQorc2V0IENGPS13LSAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpYiAlQkxJQiUgL2IgL2MgL24gL25vaSBAYlxkb3MxNlxiYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcZGljdC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBkaWN0Lm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGx6b3BhY2suYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgbHpvcGFjay5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xwcmVjb21wLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcDIuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgcHJlY29tcDIub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcc2ltcGxlLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHNpbXBsZS5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtYyBsem90ZXN0XGx6b3Rlc3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgbHpvdGVzdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi90Yy5iYXQgYi9sem8tMi4wMy9CL2RvczE2L3RjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTBkZTNiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi90Yy5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgVHVyYm8gQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9dGNjIC1tbCAtZi0NCitzZXQgQ0Y9LU8gLUcgLXcgLXctcmNoIC13LXNpZyAlQ0ZJJSAtSWluY2x1ZGVcbHpvDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtSXNyYyAtYyBzcmNcKi5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQordGxpYiAlQkxJQiUgQGJcZG9zMTZcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1mIC1JZXhhbXBsZXMgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtZiAtSWx6b3Rlc3QgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi92Yy5iYXQgYi9sem8tMi4wMy9CL2RvczE2L3ZjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODdjZmExCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi92Yy5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1jbCAtbm9sb2dvIC1BTA0KK3NldCBDRj0tTyAtR2YgLUdzIC1HeSAtVzMgJUNGSSUNCitzZXQgTEY9JUJMSUIlIC1GbQ0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliIC9ub2xvZ28gJUJMSUIlIEBiXGRvczE2XGJjLnJzcDsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi92Y19xYy5iYXQgYi9sem8tMi4wMy9CL2RvczE2L3ZjX3FjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjNiNWI2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi92Y19xYy5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKyAoUXVpY2tDKQ0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1jbCAtbm9sb2dvIC1xYyAtQUwNCitzZXQgQ0Y9LU8gLUdmIC1HeSAtVzMgJUNGSSUNCitzZXQgTEY9JUJMSUIlIC1GbQ0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliIC9ub2xvZ28gJUJMSUIlIEBiXGRvczE2XGJjLnJzcDsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MxNi93Yy5iYXQgYi9sem8tMi4wMy9CL2RvczE2L3djLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjBmNTYzCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MxNi93Yy5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDE2LWJpdA0KK0BlY2hvIC8vICAgV2F0Y29tIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPXdjbCAtenEgLW1sIC1idCNkb3MgLWwjZG9zDQorc2V0IENGPS1veCAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLWMgc3JjXCouYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK3dsaWIgLXEgLWIgLW4gLXQgJUJMSUIlIEBiXGRvczE2XHdjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczE2L3djLnJzcCBiL2x6by0yLjAzL0IvZG9zMTYvd2MucnNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4ZTFjOWYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczE2L3djLnJzcApAQCAtMCwwICsxLDY3IEBACisrJ2x6bzEub2JqJw0KKysnbHpvMV85OS5vYmonDQorKydsem8xYS5vYmonDQorKydsem8xYV85OS5vYmonDQorKydsem8xYl8xLm9iaicNCisrJ2x6bzFiXzIub2JqJw0KKysnbHpvMWJfMy5vYmonDQorKydsem8xYl80Lm9iaicNCisrJ2x6bzFiXzUub2JqJw0KKysnbHpvMWJfNi5vYmonDQorKydsem8xYl83Lm9iaicNCisrJ2x6bzFiXzgub2JqJw0KKysnbHpvMWJfOS5vYmonDQorKydsem8xYl85OS5vYmonDQorKydsem8xYl85eC5vYmonDQorKydsem8xYl9jYy5vYmonDQorKydsem8xYl9kMS5vYmonDQorKydsem8xYl9kMi5vYmonDQorKydsem8xYl9yci5vYmonDQorKydsem8xYl94eC5vYmonDQorKydsem8xY18xLm9iaicNCisrJ2x6bzFjXzIub2JqJw0KKysnbHpvMWNfMy5vYmonDQorKydsem8xY180Lm9iaicNCisrJ2x6bzFjXzUub2JqJw0KKysnbHpvMWNfNi5vYmonDQorKydsem8xY183Lm9iaicNCisrJ2x6bzFjXzgub2JqJw0KKysnbHpvMWNfOS5vYmonDQorKydsem8xY185OS5vYmonDQorKydsem8xY185eC5vYmonDQorKydsem8xY19jYy5vYmonDQorKydsem8xY19kMS5vYmonDQorKydsem8xY19kMi5vYmonDQorKydsem8xY19yci5vYmonDQorKydsem8xY194eC5vYmonDQorKydsem8xZl8xLm9iaicNCisrJ2x6bzFmXzl4Lm9iaicNCisrJ2x6bzFmX2QxLm9iaicNCisrJ2x6bzFmX2QyLm9iaicNCisrJ2x6bzF4XzEub2JqJw0KKysnbHpvMXhfMWsub2JqJw0KKysnbHpvMXhfMWwub2JqJw0KKysnbHpvMXhfMW8ub2JqJw0KKysnbHpvMXhfOXgub2JqJw0KKysnbHpvMXhfZDEub2JqJw0KKysnbHpvMXhfZDIub2JqJw0KKysnbHpvMXhfZDMub2JqJw0KKysnbHpvMXhfby5vYmonDQorKydsem8xeV8xLm9iaicNCisrJ2x6bzF5Xzl4Lm9iaicNCisrJ2x6bzF5X2QxLm9iaicNCisrJ2x6bzF5X2QyLm9iaicNCisrJ2x6bzF5X2QzLm9iaicNCisrJ2x6bzF5X28ub2JqJw0KKysnbHpvMXpfOXgub2JqJw0KKysnbHpvMXpfZDEub2JqJw0KKysnbHpvMXpfZDIub2JqJw0KKysnbHpvMXpfZDMub2JqJw0KKysnbHpvMmFfOXgub2JqJw0KKysnbHpvMmFfZDEub2JqJw0KKysnbHpvMmFfZDIub2JqJw0KKysnbHpvX2NyYy5vYmonDQorKydsem9faW5pdC5vYmonDQorKydsem9fcHRyLm9iaicNCisrJ2x6b19zdHIub2JqJw0KKysnbHpvX3V0aWwub2JqJw0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZG9zMzIvYmNfcHAuYmF0IGIvbHpvLTIuMDMvQi9kb3MzMi9iY19wcC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA3OWY5ZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0IvZG9zMzIvYmNfcHAuYmF0CkBAIC0wLDAgKzEsNDIgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIERPUyAzMi1iaXQNCitAZWNobyAvLyAgIEJvcmxhbmQgQy9DKysgKyBCb3JsYW5kIFBvd2VyUGFjayAxLjAgKERQTUkzMikNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9YmNjMzIgLVdYDQorc2V0IENGPS1PMiAtdyAtdy1hdXMgJUNGSSUgLUlpbmNsdWRlXGx6byAlQ0ZBU00lDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtSXNyYyAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQordGxpYiAlQkxJQiUgQGJcd2luMzJcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1scyAtSWV4YW1wbGVzIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1scyAtSWV4YW1wbGVzIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1scyAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1scyAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbHMgLUlleGFtcGxlcyBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1scyAtSWx6b3Rlc3QgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbHMgLUltaW5pbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi9kajIuYmF0IGIvbHpvLTIuMDMvQi9kb3MzMi9kajIuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MDEzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczMyL2RqMi5iYXQKQEAgLTAsMCArMSw0NSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDMyLWJpdA0KK0BlY2hvIC8vICAgZGpncHAyICsgZ2NjDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IEJMSUI9bGliJUJOQU1FJS5hDQorc2V0IENDPWdjYw0KK3NldCBDRj1AYi9kb3MzMi9kajIub3B0ICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIC1zDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIC14IGFzc2VtYmxlci13aXRoLWNwcCAtYyBhc20vaTM4Ni9zcmNfZ2FzLyouUw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2FyIHJjcyAlQkxJQiUgQGIvd2luMzIvY3lnd2luLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBkaWN0LmV4ZSBleGFtcGxlcy9kaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBsem9wYWNrLmV4ZSBleGFtcGxlcy9sem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wLmV4ZSBleGFtcGxlcy9wcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wMi5leGUgZXhhbXBsZXMvcHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHNpbXBsZS5leGUgZXhhbXBsZXMvc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBsem90ZXN0LmV4ZSBsem90ZXN0L2x6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1zIC1JaW5jbHVkZS9sem8gLW8gdGVzdG1pbmkuZXhlIG1pbmlsem8vdGVzdG1pbmkuYyBtaW5pbHpvL21pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi9kajIub3B0IGIvbHpvLTIuMDMvQi9kb3MzMi9kajIub3B0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNWE1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczMyL2RqMi5vcHQKQEAgLTAsMCArMSw3IEBACistTzINCistZm9taXQtZnJhbWUtcG9pbnRlcg0KKy1XYWxsDQorLVdjYXN0LWFsaWduDQorLVdjYXN0LXF1YWwNCistV3dyaXRlLXN0cmluZ3MNCistV25vLXVuaW5pdGlhbGl6ZWQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczMyL2RtLmJhdCBiL2x6by0yLjAzL0IvZG9zMzIvZG0uYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YTBkOTEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczMyL2RtLmJhdApAQCAtMCwwICsxLDQzIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMzItYml0DQorQGVjaG8gLy8gICBEaWdpdGFsIE1hcnMgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9ZG1jIC1teA0KK3NldCBDRj0tbyAtdy0gJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUgeDMyLmxpYg0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliICVCTElCJSAvYiAvYyAvbiAvbm9pIEBiXHdpbjMyXGJjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorc2V0IExGPXgzMi5saWINCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi9lbXguYmF0IGIvbHpvLTIuMDMvQi9kb3MzMi9lbXguYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyNWY2MGIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczMyL2VteC5iYXQKQEAgLTAsMCArMSw0NSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDMyLWJpdA0KK0BlY2hvIC8vICAgZW14ICsgZ2NjDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IEJMSUI9JUJOQU1FJS5hDQorc2V0IENDPWdjYw0KK3NldCBDRj1AYi9kb3MzMi9kajIub3B0ICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIC1zDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIC14IGFzc2VtYmxlci13aXRoLWNwcCAtYyBhc20vaTM4Ni9zcmNfZ2FzLyouUw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2FyIHJjcyAlQkxJQiUgQGIvd2luMzIvY3lnd2luLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBkaWN0LmV4ZSBleGFtcGxlcy9kaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBsem9wYWNrLmV4ZSBleGFtcGxlcy9sem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wLmV4ZSBleGFtcGxlcy9wcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wMi5leGUgZXhhbXBsZXMvcHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHNpbXBsZS5leGUgZXhhbXBsZXMvc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBsem90ZXN0LmV4ZSBsem90ZXN0L2x6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZS9sem8gLW8gdGVzdG1pbmkuZXhlIG1pbmlsem8vdGVzdG1pbmkuYyBtaW5pbHpvL21pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi9oaWdoYy5iYXQgYi9sem8tMi4wMy9CL2RvczMyL2hpZ2hjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGUwMTJlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MzMi9oaWdoYy5iYXQKQEAgLTAsMCArMSwzOSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDMyLWJpdA0KK0BlY2hvIC8vICAgTWV0YVdhcmUgSGlnaCBDL0MrKyAodXNpbmcgUGhhcmxhcCBET1MgZXh0ZW5kZXIpDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPWhjMzg2DQorc2V0IENGPS1PMyAtdzQgJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLXcxIC1jIHNyY1wqLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCiszODZsaWIgJUJMSUIlIC1ub2Jhbm5lciBAYlxkb3MzMlxoaWdoYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi9oaWdoYy5yc3AgYi9sem8tMi4wMy9CL2RvczMyL2hpZ2hjLnJzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjJkYzdmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MzMi9oaWdoYy5yc3AKQEAgLTAsMCArMSw3OSBAQAorLWNyZWF0ZSBsem8xLm9iag0KKy1jcmVhdGUgbHpvMV85OS5vYmoNCistY3JlYXRlIGx6bzFhLm9iag0KKy1jcmVhdGUgbHpvMWFfOTkub2JqDQorLWNyZWF0ZSBsem8xYl8xLm9iag0KKy1jcmVhdGUgbHpvMWJfMi5vYmoNCistY3JlYXRlIGx6bzFiXzMub2JqDQorLWNyZWF0ZSBsem8xYl80Lm9iag0KKy1jcmVhdGUgbHpvMWJfNS5vYmoNCistY3JlYXRlIGx6bzFiXzYub2JqDQorLWNyZWF0ZSBsem8xYl83Lm9iag0KKy1jcmVhdGUgbHpvMWJfOC5vYmoNCistY3JlYXRlIGx6bzFiXzkub2JqDQorLWNyZWF0ZSBsem8xYl85OS5vYmoNCistY3JlYXRlIGx6bzFiXzl4Lm9iag0KKy1jcmVhdGUgbHpvMWJfY2Mub2JqDQorLWNyZWF0ZSBsem8xYl9kMS5vYmoNCistY3JlYXRlIGx6bzFiX2QyLm9iag0KKy1jcmVhdGUgbHpvMWJfcnIub2JqDQorLWNyZWF0ZSBsem8xYl94eC5vYmoNCistY3JlYXRlIGx6bzFjXzEub2JqDQorLWNyZWF0ZSBsem8xY18yLm9iag0KKy1jcmVhdGUgbHpvMWNfMy5vYmoNCistY3JlYXRlIGx6bzFjXzQub2JqDQorLWNyZWF0ZSBsem8xY181Lm9iag0KKy1jcmVhdGUgbHpvMWNfNi5vYmoNCistY3JlYXRlIGx6bzFjXzcub2JqDQorLWNyZWF0ZSBsem8xY184Lm9iag0KKy1jcmVhdGUgbHpvMWNfOS5vYmoNCistY3JlYXRlIGx6bzFjXzk5Lm9iag0KKy1jcmVhdGUgbHpvMWNfOXgub2JqDQorLWNyZWF0ZSBsem8xY19jYy5vYmoNCistY3JlYXRlIGx6bzFjX2QxLm9iag0KKy1jcmVhdGUgbHpvMWNfZDIub2JqDQorLWNyZWF0ZSBsem8xY19yci5vYmoNCistY3JlYXRlIGx6bzFjX3h4Lm9iag0KKy1jcmVhdGUgbHpvMWZfMS5vYmoNCistY3JlYXRlIGx6bzFmXzl4Lm9iag0KKy1jcmVhdGUgbHpvMWZfZDEub2JqDQorLWNyZWF0ZSBsem8xZl9kMi5vYmoNCistY3JlYXRlIGx6bzF4XzEub2JqDQorLWNyZWF0ZSBsem8xeF8xay5vYmoNCistY3JlYXRlIGx6bzF4XzFsLm9iag0KKy1jcmVhdGUgbHpvMXhfMW8ub2JqDQorLWNyZWF0ZSBsem8xeF85eC5vYmoNCistY3JlYXRlIGx6bzF4X2QxLm9iag0KKy1jcmVhdGUgbHpvMXhfZDIub2JqDQorLWNyZWF0ZSBsem8xeF9kMy5vYmoNCistY3JlYXRlIGx6bzF4X28ub2JqDQorLWNyZWF0ZSBsem8xeV8xLm9iag0KKy1jcmVhdGUgbHpvMXlfOXgub2JqDQorLWNyZWF0ZSBsem8xeV9kMS5vYmoNCistY3JlYXRlIGx6bzF5X2QyLm9iag0KKy1jcmVhdGUgbHpvMXlfZDMub2JqDQorLWNyZWF0ZSBsem8xeV9vLm9iag0KKy1jcmVhdGUgbHpvMXpfOXgub2JqDQorLWNyZWF0ZSBsem8xel9kMS5vYmoNCistY3JlYXRlIGx6bzF6X2QyLm9iag0KKy1jcmVhdGUgbHpvMXpfZDMub2JqDQorLWNyZWF0ZSBsem8yYV85eC5vYmoNCistY3JlYXRlIGx6bzJhX2QxLm9iag0KKy1jcmVhdGUgbHpvMmFfZDIub2JqDQorLWNyZWF0ZSBsem9fY3JjLm9iag0KKy1jcmVhdGUgbHpvX2luaXQub2JqDQorLWNyZWF0ZSBsem9fcHRyLm9iag0KKy1jcmVhdGUgbHpvX3N0ci5vYmoNCistY3JlYXRlIGx6b191dGlsLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFjX3MxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFjX3MyLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFmX2YxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFmX2YyLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X2YxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X2YyLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X3MxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X3MyLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X2YxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X2YyLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X3MxLm9iag0KKy1jcmVhdGUgYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X3MyLm9iag0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZG9zMzIvbmRwLmJhdCBiL2x6by0yLjAzL0IvZG9zMzIvbmRwLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmM5NGM3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MzMi9uZHAuYmF0CkBAIC0wLDAgKzEsNDAgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIERPUyAzMi1iaXQNCitAZWNobyAvLyAgIE1pY3Jvd2F5IE5EUCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1teDQ4Ng0KK3NldCBDRj0tYW5zaSAtb24gJUNGSSUNCitzZXQgTEY9JUJMSUIlIC1iaW5kIC1tYXANCisNCitAUkVNICVDQyUgJUNGJSAtSXNyYyAtYyBzcmNcKi5jDQorZm9yICUlZiBpbiAoc3JjXCouYykgZG8gJUNDJSAlQ0YlIC1Jc3JjIC1jICUlZg0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK25kcGxpYiAlQkxJQiUgQGJcZG9zMzJcbmRwLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLURjb25zdD0gLUlsem90ZXN0IGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZG9zMzIvbmRwLnJzcCBiL2x6by0yLjAzL0IvZG9zMzIvbmRwLnJzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNjJiMTllCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MzMi9uZHAucnNwCkBAIC0wLDAgKzEsNjcgQEAKKy1hZGQgbHpvMS5vYmoNCistYWRkIGx6bzFfOTkub2JqDQorLWFkZCBsem8xYS5vYmoNCistYWRkIGx6bzFhXzk5Lm9iag0KKy1hZGQgbHpvMWJfMS5vYmoNCistYWRkIGx6bzFiXzIub2JqDQorLWFkZCBsem8xYl8zLm9iag0KKy1hZGQgbHpvMWJfNC5vYmoNCistYWRkIGx6bzFiXzUub2JqDQorLWFkZCBsem8xYl82Lm9iag0KKy1hZGQgbHpvMWJfNy5vYmoNCistYWRkIGx6bzFiXzgub2JqDQorLWFkZCBsem8xYl85Lm9iag0KKy1hZGQgbHpvMWJfOTkub2JqDQorLWFkZCBsem8xYl85eC5vYmoNCistYWRkIGx6bzFiX2NjLm9iag0KKy1hZGQgbHpvMWJfZDEub2JqDQorLWFkZCBsem8xYl9kMi5vYmoNCistYWRkIGx6bzFiX3JyLm9iag0KKy1hZGQgbHpvMWJfeHgub2JqDQorLWFkZCBsem8xY18xLm9iag0KKy1hZGQgbHpvMWNfMi5vYmoNCistYWRkIGx6bzFjXzMub2JqDQorLWFkZCBsem8xY180Lm9iag0KKy1hZGQgbHpvMWNfNS5vYmoNCistYWRkIGx6bzFjXzYub2JqDQorLWFkZCBsem8xY183Lm9iag0KKy1hZGQgbHpvMWNfOC5vYmoNCistYWRkIGx6bzFjXzkub2JqDQorLWFkZCBsem8xY185OS5vYmoNCistYWRkIGx6bzFjXzl4Lm9iag0KKy1hZGQgbHpvMWNfY2Mub2JqDQorLWFkZCBsem8xY19kMS5vYmoNCistYWRkIGx6bzFjX2QyLm9iag0KKy1hZGQgbHpvMWNfcnIub2JqDQorLWFkZCBsem8xY194eC5vYmoNCistYWRkIGx6bzFmXzEub2JqDQorLWFkZCBsem8xZl85eC5vYmoNCistYWRkIGx6bzFmX2QxLm9iag0KKy1hZGQgbHpvMWZfZDIub2JqDQorLWFkZCBsem8xeF8xLm9iag0KKy1hZGQgbHpvMXhfMWsub2JqDQorLWFkZCBsem8xeF8xbC5vYmoNCistYWRkIGx6bzF4XzFvLm9iag0KKy1hZGQgbHpvMXhfOXgub2JqDQorLWFkZCBsem8xeF9kMS5vYmoNCistYWRkIGx6bzF4X2QyLm9iag0KKy1hZGQgbHpvMXhfZDMub2JqDQorLWFkZCBsem8xeF9vLm9iag0KKy1hZGQgbHpvMXlfMS5vYmoNCistYWRkIGx6bzF5Xzl4Lm9iag0KKy1hZGQgbHpvMXlfZDEub2JqDQorLWFkZCBsem8xeV9kMi5vYmoNCistYWRkIGx6bzF5X2QzLm9iag0KKy1hZGQgbHpvMXlfby5vYmoNCistYWRkIGx6bzF6Xzl4Lm9iag0KKy1hZGQgbHpvMXpfZDEub2JqDQorLWFkZCBsem8xel9kMi5vYmoNCistYWRkIGx6bzF6X2QzLm9iag0KKy1hZGQgbHpvMmFfOXgub2JqDQorLWFkZCBsem8yYV9kMS5vYmoNCistYWRkIGx6bzJhX2QyLm9iag0KKy1hZGQgbHpvX2NyYy5vYmoNCistYWRkIGx6b19pbml0Lm9iag0KKy1hZGQgbHpvX3B0ci5vYmoNCistYWRkIGx6b19zdHIub2JqDQorLWFkZCBsem9fdXRpbC5vYmoNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2RvczMyL3NjLmJhdCBiL2x6by0yLjAzL0IvZG9zMzIvc2MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZTIyZWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2RvczMyL3NjLmJhdApAQCAtMCwwICsxLDUxIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBET1MgMzItYml0DQorQGVjaG8gLy8gICBTeW1hbnRlYyBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1zYyAtbXgNCitzZXQgQ0Y9LW8gLXctICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgJUJMSUIlIC9iIC9jIC9uIC9ub2kgQGJcd2luMzJcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgZGljdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xsem9wYWNrLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3BhY2sub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBwcmVjb21wLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAyLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHNpbXBsZS5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBzaW1wbGUub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgbHpvdGVzdFxsem90ZXN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3Rlc3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZG9zMzIvd2MuYmF0IGIvbHpvLTIuMDMvQi9kb3MzMi93Yy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2YzMDExNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0IvZG9zMzIvd2MuYmF0CkBAIC0wLDAgKzEsMzkgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIERPUyAzMi1iaXQNCitAZWNobyAvLyAgIFdhdGNvbSBDL0MrKyAodXNpbmcgRE9TLzRHIGV4dGVuZGVyKQ0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz13Y2wzODYgLXpxIC1tZiAtNXIgLWJ0I2RvcyAtbCNkb3M0Zw0KK3NldCBDRj0tb3ggLXpjICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIHNyY1wqLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCit3bGliIC1xIC1iIC1uIC10ICVCTElCJSBAYlx3aW4zMlx3Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9kb3MzMi96Yy5iYXQgYi9sem8tMi4wMy9CL2RvczMyL3pjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWIyOTMxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9kb3MzMi96Yy5iYXQKQEAgLTAsMCArMSw1MSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgRE9TIDMyLWJpdA0KK0BlY2hvIC8vICAgWm9ydGVjaCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz16dGMgLWIgLXYwIC1teA0KK3NldCBDRj0tbyAtdy0gLXIgJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLUlzcmMgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK3pvcmxpYiAlQkxJQiUgQGJcd2luMzJcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgZGljdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xsem9wYWNrLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3BhY2sub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBwcmVjb21wLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAyLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHNpbXBsZS5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBzaW1wbGUub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgbHpvdGVzdFxsem90ZXN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3Rlc3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0IvZ2VuZXJpYy9NYWtlZmlsZSBiL2x6by0yLjAzL0IvZ2VuZXJpYy9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGNhZjNhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9nZW5lcmljL01ha2VmaWxlCkBAIC0wLDAgKzEsOTEgQEAKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKyMgdGhpcyBpcyBtb2RlbGxlZCBhZnRlciBidWlsZC5zaDsgbmVlZHMgR05VIG1ha2UgMy44MCBvciBiZXR0ZXIKKworU0hFTEwgPSAvYmluL3NoCisKKyMjCisjIyBzZXR1cCBmbGFncworIyMKKworIyN0b3Bfc3JjZGlyID89IC4uLy4uCit0b3Bfc3JjZGlyID89ICQoZGlyICQod29yZCAkKHdvcmRzICQoTUFLRUZJTEVfTElTVCkpLCQoTUFLRUZJTEVfTElTVCkpKS4uLy4uCitBUiA/PSBhcgorQ0MgPz0gY2MKK0NGTEFHUyA/PSAtTworCitDRkkgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKK0JOQU1FID0gbHpvMgorQkxJQiA9IGxpYiQoQk5BTUUpLmEKKworQ0YgPSAkKENQUEZMQUdTKSAkKENGSSkgJChDRkxBR1MpCitMRiA9ICQoTERGTEFHUykgJChMWk9fRVhUUkFfTERGTEFHUykKK0xMID0gJChCTElCKSAkKExJQlMpICQoTFpPX0VYVFJBX0xJQlMpCisKKworIyMKKyMjIHNldHVwIGZpbGVzCisjIworCitfX21hcCA9ICQoZm9yZWFjaCBfX21hcF92LCQoMiksJChjYWxsICQoMSksJChfX21hcF92KSkpCitfX29iamVjdF9maWxlbmFtZSA9ICQoYWRkc3VmZml4IC5vLCQoYmFzZW5hbWUgJChub3RkaXIgJCgxKSkpKQorCitCTElCX1NPVVJDRVMgOj0gJCh3aWxkY2FyZCAkKHRvcF9zcmNkaXIpL3NyYy8qLmMpCitCTElCX1NPVVJDRVMgKz0gJChMWk9fRVhUUkFfU09VUkNFUykKK0JMSUJfT0JKRUNUUyA6PSAkKGNhbGwgX19tYXAsX19vYmplY3RfZmlsZW5hbWUsJChCTElCX1NPVVJDRVMpKQorUFJPR1JBTVMgPSBkaWN0Lm91dCBsem9wYWNrLm91dCBwcmVjb21wLm91dCBwcmVjb21wMi5vdXQgc2ltcGxlLm91dCBsem90ZXN0Lm91dAorCisKKyMjCisjIyBydWxlcworIyMKKworYWxsLnRhcmdldHMgPz0gJChCTElCKSAkKFBST0dSQU1TKSB0ZXN0bWluaS5vdXQKK2FsbDogJChhbGwudGFyZ2V0cykKKworY2xlYW46CisJcm0gLWYgKi5kICoubyAkKEJMSUIpICQoUFJPR1JBTVMpIHRlc3RtaW5pLm91dAorCiskKEJMSUIpOiAkKEJMSUJfT0JKRUNUUykgJChMWk9fRVhUUkFfT0JKRUNUUykKKwlybSAtZiAkQAorCSQoQVIpIHJjcyAkQCAkXgorCisjIGR5bmFtaWNhbGx5IGNvbnN0cnVjdCBvYmplY3QgcnVsZXMKK2RlZmluZSBCTElCX09CSkVDVF90ZW1wbGF0ZQorICAgICQoY2FsbCBfX29iamVjdF9maWxlbmFtZSwkKDEpKSA6ICQoMSkgOyAkJChDQykgJCQoQ0YpICQkKExaT19FWFRSQV9DUFBGTEFHUykgJCQoTFpPX0VYVFJBX0NGTEFHUykgLWMgJCQ8CitlbmRlZgorJChmb3JlYWNoIHMsJChCTElCX1NPVVJDRVMpLCQoZXZhbCAkKGNhbGwgQkxJQl9PQkpFQ1RfdGVtcGxhdGUsJChzKSkpKQorCitkaWN0Lm91dDogJCh0b3Bfc3JjZGlyKS9leGFtcGxlcy9kaWN0LmMKKwkkKENDKSAkKENGKSAkKExGKSAtbyAkQCAkPCAkKExMKQorbHpvcGFjay5vdXQ6ICQodG9wX3NyY2RpcikvZXhhbXBsZXMvbHpvcGFjay5jCisJJChDQykgJChDRikgJChMRikgLW8gJEAgJDwgJChMTCkKK3ByZWNvbXAub3V0OiAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3ByZWNvbXAuYworCSQoQ0MpICQoQ0YpICQoTEYpIC1vICRAICQ8ICQoTEwpCitwcmVjb21wMi5vdXQ6ICQodG9wX3NyY2RpcikvZXhhbXBsZXMvcHJlY29tcDIuYworCSQoQ0MpICQoQ0YpICQoTEYpIC1vICRAICQ8ICQoTEwpCitzaW1wbGUub3V0OiAkKHRvcF9zcmNkaXIpL2V4YW1wbGVzL3NpbXBsZS5jCisJJChDQykgJChDRikgJChMRikgLW8gJEAgJDwgJChMTCkKK2x6b3Rlc3Qub3V0OiAkKHRvcF9zcmNkaXIpL2x6b3Rlc3QvbHpvdGVzdC5jCisJJChDQykgJChDRikgJChMRikgLW8gJEAgJDwgJChMTCkKKwordGVzdG1pbmkub3V0OiAkKHRvcF9zcmNkaXIpL21pbmlsem8vdGVzdG1pbmkuYyAkKHRvcF9zcmNkaXIpL21pbmlsem8vbWluaWx6by5jCisJJChDQykgJChDRikgJChMRikgLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvbHpvIC1vICRAICReICQoTElCUykKKworCisjIGRlcGVuZGVuY2llcworJChQUk9HUkFNUyk6ICQoQkxJQikKKyMgb2JqZWN0IGRlcGVuZGVuY2llcyBhcmUgZ2VuZXJhdGVkIHZpYSAtTU1ECistaW5jbHVkZSAqLmQKKworCisjIGRlYnVnCitzaG93X3ZhcnM6CisJQGVjaG8gIkJMSUJfU09VUkNFUyA9ICQoQkxJQl9TT1VSQ0VTKSIKKwlAZWNobyAiQkxJQl9PQkpFQ1RTID0gJChCTElCX09CSkVDVFMpIgorCUBlY2hvICJQUk9HUkFNUyA9ICQoUFJPR1JBTVMpIgorCUBlY2hvICJMWk9fRVhUUkFfU09VUkNFUyA9ICQoTFpPX0VYVFJBX1NPVVJDRVMpIgorCUBlY2hvICJMWk9fRVhUUkFfT0JKRUNUUyA9ICQoTFpPX0VYVFJBX09CSkVDVFMpIgorCisuUEhPTlk6IGFsbCBjbGVhbiBzaG93X3ZhcnMKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9nZW5lcmljL2J1aWxkLnNoIGIvbHpvLTIuMDMvQi9nZW5lcmljL2J1aWxkLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0NTZlMDUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2dlbmVyaWMvYnVpbGQuc2gKQEAgLTAsMCArMSw2OSBAQAorIyEgL2Jpbi9zaAorIyB2aTp0cz00OmV0CitzZXQgLWUKK2VjaG8gIi8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyIgorZWNobyAiLy8iCitlY2hvICIvLyAgIEdlbmVyaWMgUG9zaXgvVW5peCBzeXN0ZW0iCitlY2hvICIvLyAgIEdlbmVyaWMgQyBjb21waWxlciIKKwordGVzdCAiWCR7dG9wX3NyY2Rpcn0iID0gWCAmJiB0b3Bfc3JjZGlyPWBlY2hvICIkMCIgfCBzZWQgJ3MsW14vXSokLCwnYC4uLy4uCisKK3Rlc3QgIlgke0FSfSIgPSBYICYmIEFSPSJhciIKK3Rlc3QgIlgke0NDfSIgPSBYICYmIENDPSJjYyIKK3Rlc3QgIlgke0NGTEFHUytzZXR9IiA9IFhzZXQgfHwgQ0ZMQUdTPSItTyIKKyMgQ1BQRkxBR1MsIExERkxBR1MsIExJQlMKKyMgTFpPX0VYVFJBX0NQUEZMQUdTLCBMWk9fRVhUUkFfQ0ZMQUdTLCBMWk9fRVhUUkFfTERGTEFHUworIyBMWk9fRVhUUkFfU09VUkNFUywgTFpPX0VYVFJBX09CSkVDVFMsIExaT19FWFRSQV9MSUJTCisKK0NGST0iLUkke3RvcF9zcmNkaXJ9L2luY2x1ZGUgLUkke3RvcF9zcmNkaXJ9IgorQk5BTUU9bHpvMgorQkxJQj1saWIke0JOQU1FfS5hCisKK0NGPSIkQ1BQRkxBR1MgJENGSSAkQ0ZMQUdTIgorIyBpbmZvOiB3ZSByZXN0cmljdCBvdXJzZWx2ZXMgdG8gcHVyZSBBTlNJIEMgbGlicmFyeSBmdW5jdGlvbnMgZm9yIHRoZSBleGFtcGxlcworQ0Y9Ii1ETFpPX0xJQkNfSVNPQzkwPTEgJENGIgorIyBpbmZvOiB3ZSBkbyBub3QgdXNlIF9hbnlfIGV4dGVybmFsIGZ1bmN0aW9ucyBpbiBmcmVlc3RhbmRpbmcgbW9kZQordGVzdCAteiAiJExaT19DRkdfRlJFRVNUQU5ESU5HIiB8fCBDRj0iLURMWk9fQ0ZHX0ZSRUVTVEFORElORz0xICRDRiIKK0xGPSIkTERGTEFHUyAkTFpPX0VYVFJBX0xERkxBR1MiCitMTD0iJEJMSUIgJExJQlMgJExaT19FWFRSQV9MSUJTIgorCisuICR0b3Bfc3JjZGlyL0IvZ2VuZXJpYy9jbGVhbi5zaAorCitmb3IgZiBpbiAkdG9wX3NyY2Rpci9zcmMvKi5jICRMWk9fRVhUUkFfU09VUkNFUzsgZG8KKyAgICBlY2hvICRDQyAkQ0YgJExaT19FWFRSQV9DUFBGTEFHUyAkTFpPX0VYVFJBX0NGTEFHUyAtYyAkZgorICAgICAgICAgJENDICRDRiAkTFpPX0VYVFJBX0NQUEZMQUdTICRMWk9fRVhUUkFfQ0ZMQUdTIC1jICRmCitkb25lCisKK2VjaG8gJEFSIHJjcyAkQkxJQiAqLm8gJExaT19FWFRSQV9PQkpFQ1RTCisgICAgICRBUiByY3MgJEJMSUIgKi5vICRMWk9fRVhUUkFfT0JKRUNUUworCisKK2lmIHRlc3QgLW4gIiRMWk9fQ0ZHX0ZSRUVTVEFORElORyI7IHRoZW4KKworZWNobyAiLy8iCitlY2hvICIvLyBCdWlsZGluZyAkQkxJQiBpbiBmcmVlc3RhbmRpbmcgbW9kZSB3YXMgc3VjY2Vzc2Z1bC4gQWxsIGRvbmUuIgorZWNobyAiLy8gTm93IHRyeSAnbm0gLS1leHRlcm4tb25seSAkQkxJQiciCisKK2Vsc2UKKworZm9yIGYgaW4gZGljdCBsem9wYWNrIHByZWNvbXAgcHJlY29tcDIgc2ltcGxlOyBkbworICAgIGVjaG8gJENDICRDRiAkTEYgLW8gJGYub3V0ICR0b3Bfc3JjZGlyL2V4YW1wbGVzLyRmLmMgJExMCisgICAgICAgICAkQ0MgJENGICRMRiAtbyAkZi5vdXQgJHRvcF9zcmNkaXIvZXhhbXBsZXMvJGYuYyAkTEwKK2RvbmUKK2VjaG8gJENDICRDRiAkTEYgLW8gbHpvdGVzdC5vdXQgJHRvcF9zcmNkaXIvbHpvdGVzdC9sem90ZXN0LmMgJExMCisgICAgICRDQyAkQ0YgJExGIC1vIGx6b3Rlc3Qub3V0ICR0b3Bfc3JjZGlyL2x6b3Rlc3QvbHpvdGVzdC5jICRMTAorCitmb3IgZiBpbiBtaW5pbHpvLmMgdGVzdG1pbmkuYzsgZG8KKyAgICBYRj0iLUkkdG9wX3NyY2Rpci9pbmNsdWRlL2x6byAkQ0YgJExaT19FWFRSQV9DUFBGTEFHUyAkTFpPX0VYVFJBX0NGTEFHUyIKKyAgICBlY2hvICRDQyAkWEYgLWMgJHRvcF9zcmNkaXIvbWluaWx6by8kZgorICAgICAgICAgJENDICRYRiAtYyAkdG9wX3NyY2Rpci9taW5pbHpvLyRmCitkb25lCitlY2hvICRDQyAkQ0YgJExGIC1vIHRlc3RtaW5pLm91dCB0ZXN0bWluaS5vIG1pbmlsem8ubyAkTElCUyAkTFpPX0VYVFJBX0xJQlMKKyAgICAgJENDICRDRiAkTEYgLW8gdGVzdG1pbmkub3V0IHRlc3RtaW5pLm8gbWluaWx6by5vICRMSUJTICRMWk9fRVhUUkFfTElCUworCisKK2VjaG8gIi8vIgorZWNobyAiLy8gQnVpbGRpbmcgTFpPIHdhcyBzdWNjZXNzZnVsLiBBbGwgZG9uZS4iCisKK2ZpCit0cnVlCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL2dlbmVyaWMvYnVpbGRfZnJlZXN0YW5kaW5nLnNoIGIvbHpvLTIuMDMvQi9nZW5lcmljL2J1aWxkX2ZyZWVzdGFuZGluZy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi45NDczZGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9nZW5lcmljL2J1aWxkX2ZyZWVzdGFuZGluZy5zaApAQCAtMCwwICsxLDggQEAKKyMhIC9iaW4vc2gKKyMgdmk6dHM9NDpldAorCit0ZXN0ICJYJHt0b3Bfc3JjZGlyfSIgPSBYICYmIHRvcF9zcmNkaXI9YGVjaG8gIiQwIiB8IHNlZCAncyxbXi9dKiQsLCdgLi4vLi4KKworTFpPX0NGR19GUkVFU1RBTkRJTkc9MQorCisuICR0b3Bfc3JjZGlyL0IvZ2VuZXJpYy9idWlsZC5zaApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9nZW5lcmljL2J1aWxkX2djYy5zaCBiL2x6by0yLjAzL0IvZ2VuZXJpYy9idWlsZF9nY2Muc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uM2FhYTRhYQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0IvZ2VuZXJpYy9idWlsZF9nY2Muc2gKQEAgLTAsMCArMSwyNSBAQAorIyEgL2Jpbi9zaAorIyB2aTp0cz00OmV0CitzZXQgLWUKK2VjaG8gIi8vIFVzaW5nIEdOVSBDIGNvbXBpbGVyLiIKK2VjaG8gIi8vIgorCit0ZXN0ICJYJHt0b3Bfc3JjZGlyfSIgPSBYICYmIHRvcF9zcmNkaXI9YGVjaG8gIiQwIiB8IHNlZCAncyxbXi9dKiQsLCdgLi4vLi4KK1VOQU1FX01BQ0hJTkU9dW5rbm93bgorCitDQz0iZ2NjIC1mUElDIgorQ0M9ImdjYyAtc3RhdGljIgorQ0M9ImdjYyIKK0NGTEFHUz0iLVdhbGwgLVduby11bmluaXRpYWxpemVkIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlciIKKworIyBkZWxldGUgdGhlIG5leHQgbGluZSB0byBkaXNhYmxlIGFzc2VtYmxlciBzdXBwb3J0CitVTkFNRV9NQUNISU5FPWAodW5hbWUgLW0pIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9NQUNISU5FPXVua25vd24KK2Nhc2UgJFVOQU1FX01BQ0hJTkUgaW4KKyAgICBpWzM0NTY3XTg2KQorICAgICAgICBDQz0iJENDIC1tMzIiCisgICAgICAgIENQUEZMQUdTPSItRExaT19VU0VfQVNNIgorICAgICAgICBMWk9fRVhUUkFfU09VUkNFUz0kdG9wX3NyY2Rpci9hc20vaTM4Ni9zcmNfZ2FzLyouUworICAgICAgICA7OworZXNhYworCisuICR0b3Bfc3JjZGlyL0IvZ2VuZXJpYy9idWlsZC5zaApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9nZW5lcmljL2NsZWFuLnNoIGIvbHpvLTIuMDMvQi9nZW5lcmljL2NsZWFuLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjBhOTQ2Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL2dlbmVyaWMvY2xlYW4uc2gKQEAgLTAsMCArMSw3IEBACisjISAvYmluL3NoCisjIHZpOnRzPTQ6ZXQKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKworcm0gLWYgKi5vIGxpYmx6bzIuYSBkaWN0Lm91dCBsem9wYWNrLm91dCBwcmVjb21wLm91dCBwcmVjb21wMi5vdXQgc2ltcGxlLm91dCBsem90ZXN0Lm91dCB0ZXN0bWluaS5vdXQKKwordHJ1ZQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9vczIvZW14LmJhdCBiL2x6by0yLjAzL0Ivb3MyL2VteC5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwNmE1MgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivb3MyL2VteC5iYXQKQEAgLTAsMCArMSw0NSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgT1MvMiAzMi1iaXQNCitAZWNobyAvLyAgIGVteCArIGdjYw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBCTElCPSVCTkFNRSUuYQ0KK3NldCBDQz1nY2MNCitzZXQgQ0Y9QGIvZG9zMzIvZGoyLm9wdCAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJSAtcw0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAteCBhc3NlbWJsZXItd2l0aC1jcHAgLWMgYXNtL2kzODYvc3JjX2dhcy8qLlMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCithciByY3MgJUJMSUIlIEBiL3dpbjMyL2N5Z3dpbi5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLW8gZGljdC5leGUgZXhhbXBsZXMvZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gbHpvcGFjay5leGUgZXhhbXBsZXMvbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gcHJlY29tcC5leGUgZXhhbXBsZXMvcHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gcHJlY29tcDIuZXhlIGV4YW1wbGVzL3ByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBzaW1wbGUuZXhlIGV4YW1wbGVzL3NpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLW8gbHpvdGVzdC5leGUgbHpvdGVzdC9sem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGUvbHpvIC1vIHRlc3RtaW5pLmV4ZSBtaW5pbHpvL3Rlc3RtaW5pLmMgbWluaWx6by9taW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivb3MyL3djLmJhdCBiL2x6by0yLjAzL0Ivb3MyL3djLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzRkZTk3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9vczIvd2MuYmF0CkBAIC0wLDAgKzEsNDIgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIE9TLzIgMzItYml0DQorQGVjaG8gLy8gICBXYXRjb20gQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9d2NsMzg2IC16cSAtbWYgLTVyIC1idCNvczIgLWwjb3MydjINCitzZXQgQ0Y9LW94IC16YyAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtYyBzcmNcKi5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQord2xpYiAtcSAtYiAtbiAtdCAlQkxJQiUgQGJcd2luMzJcd2MucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivb3MyL3pjLmJhdCBiL2x6by0yLjAzL0Ivb3MyL3pjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjI3ZTNmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9vczIvemMuYmF0CkBAIC0wLDAgKzEsNTEgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIE9TLzIgMzItYml0DQorQGVjaG8gLy8gICBab3J0ZWNoIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPXp0YyAtYiAtdjAgLW1mDQorc2V0IENGPS1vIC13LSAtciAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtSXNyYyAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorem9ybGliICVCTElCJSBAYlx3aW4zMlxiYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcZGljdC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBkaWN0Lm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGx6b3BhY2suYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgbHpvcGFjay5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xwcmVjb21wLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcDIuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgcHJlY29tcDIub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcc2ltcGxlLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHNpbXBsZS5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtYyBsem90ZXN0XGx6b3Rlc3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgbHpvdGVzdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi9vczJfMTYvbWMuYmF0IGIvbHpvLTIuMDMvQi9vczJfMTYvbWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMjU2ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL29zMl8xNi9tYy5iYXQKQEAgLTAsMCArMSw0MyBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgT1MvMiAxNi1iaXQNCitAZWNobyAvLyAgIE1pY3Jvc29mdCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1jbCAtbm9sb2dvIC1BTCAtRzINCitzZXQgQ0Y9LURfX09TMl9fIC1PIC1HZiAtR3MgLVczICVDRkklDQorc2V0IExGPSVCTElCJSAtTHAgLUZtIC9saW5rIC9zdGFjazo4MDk2DQorDQorQFJFTSAlQ0MlICVDRiUgLWMgc3JjXCouYw0KK2ZvciAlJWYgaW4gKHNyY1wqLmMpIGRvICVDQyUgJUNGJSAtYyAlJWYNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgL25vbG9nbyAlQkxJQiUgQGJcZG9zMTZcYmMucnNwOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL29zMl8xNi93Yy5iYXQgYi9sem8tMi4wMy9CL29zMl8xNi93Yy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDcyMTg4YQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivb3MyXzE2L3djLmJhdApAQCAtMCwwICsxLDQyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBPUy8yIDE2LWJpdA0KK0BlY2hvIC8vICAgV2F0Y29tIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPXdjbCAtenEgLW1sIC0yIC1idCNvczIgLWwjb3MyDQorc2V0IENGPS1veCAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLWMgc3JjXCouYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK3dsaWIgLXEgLWIgLW4gLXQgJUJMSUIlIEBiXGRvczE2XHdjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3ByZXBhcmUuYmF0IGIvbHpvLTIuMDMvQi9wcmVwYXJlLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzk1OGYyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi9wcmVwYXJlLmJhdApAQCAtMCwwICsxLDEwIEBACitAY2FsbCBiXHVuc2V0LmJhdA0KK0BjYWxsIGJcY2xlYW4uYmF0DQorDQorQHNldCBDRkk9LUlpbmNsdWRlIC1JLg0KK0BzZXQgQ0ZBU009LURMWk9fVVNFX0FTTQ0KK0BzZXQgQk5BTUU9bHpvMg0KK0BzZXQgQkxJQj1sem8yLmxpYg0KK0BzZXQgQkRMTD1sem8yLmRsbA0KKw0KK0BlY2hvIENvbXBpbGluZywgcGxlYXNlIGJlIHBhdGllbnQuLi4NCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3NyYy5yc3AgYi9sem8tMi4wMy9CL3NyYy5yc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmExZGJjZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivc3JjLnJzcApAQCAtMCwwICsxLDY3IEBACitzcmMvbHpvMS5jDQorc3JjL2x6bzFfOTkuYw0KK3NyYy9sem8xYS5jDQorc3JjL2x6bzFhXzk5LmMNCitzcmMvbHpvMWJfMS5jDQorc3JjL2x6bzFiXzIuYw0KK3NyYy9sem8xYl8zLmMNCitzcmMvbHpvMWJfNC5jDQorc3JjL2x6bzFiXzUuYw0KK3NyYy9sem8xYl82LmMNCitzcmMvbHpvMWJfNy5jDQorc3JjL2x6bzFiXzguYw0KK3NyYy9sem8xYl85LmMNCitzcmMvbHpvMWJfOTkuYw0KK3NyYy9sem8xYl85eC5jDQorc3JjL2x6bzFiX2NjLmMNCitzcmMvbHpvMWJfZDEuYw0KK3NyYy9sem8xYl9kMi5jDQorc3JjL2x6bzFiX3JyLmMNCitzcmMvbHpvMWJfeHguYw0KK3NyYy9sem8xY18xLmMNCitzcmMvbHpvMWNfMi5jDQorc3JjL2x6bzFjXzMuYw0KK3NyYy9sem8xY180LmMNCitzcmMvbHpvMWNfNS5jDQorc3JjL2x6bzFjXzYuYw0KK3NyYy9sem8xY183LmMNCitzcmMvbHpvMWNfOC5jDQorc3JjL2x6bzFjXzkuYw0KK3NyYy9sem8xY185OS5jDQorc3JjL2x6bzFjXzl4LmMNCitzcmMvbHpvMWNfY2MuYw0KK3NyYy9sem8xY19kMS5jDQorc3JjL2x6bzFjX2QyLmMNCitzcmMvbHpvMWNfcnIuYw0KK3NyYy9sem8xY194eC5jDQorc3JjL2x6bzFmXzEuYw0KK3NyYy9sem8xZl85eC5jDQorc3JjL2x6bzFmX2QxLmMNCitzcmMvbHpvMWZfZDIuYw0KK3NyYy9sem8xeF8xLmMNCitzcmMvbHpvMXhfMWsuYw0KK3NyYy9sem8xeF8xbC5jDQorc3JjL2x6bzF4XzFvLmMNCitzcmMvbHpvMXhfOXguYw0KK3NyYy9sem8xeF9kMS5jDQorc3JjL2x6bzF4X2QyLmMNCitzcmMvbHpvMXhfZDMuYw0KK3NyYy9sem8xeF9vLmMNCitzcmMvbHpvMXlfMS5jDQorc3JjL2x6bzF5Xzl4LmMNCitzcmMvbHpvMXlfZDEuYw0KK3NyYy9sem8xeV9kMi5jDQorc3JjL2x6bzF5X2QzLmMNCitzcmMvbHpvMXlfby5jDQorc3JjL2x6bzF6Xzl4LmMNCitzcmMvbHpvMXpfZDEuYw0KK3NyYy9sem8xel9kMi5jDQorc3JjL2x6bzF6X2QzLmMNCitzcmMvbHpvMmFfOXguYw0KK3NyYy9sem8yYV9kMS5jDQorc3JjL2x6bzJhX2QyLmMNCitzcmMvbHpvX2NyYy5jDQorc3JjL2x6b19pbml0LmMNCitzcmMvbHpvX3B0ci5jDQorc3JjL2x6b19zdHIuYw0KK3NyYy9sem9fdXRpbC5jDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi91bnNldC5iYXQgYi9sem8tMi4wMy9CL3Vuc2V0LmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTY3MmRkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi91bnNldC5iYXQKQEAgLTAsMCArMSwxMCBAQAorQHNldCBDQz0NCitAc2V0IENGPQ0KK0BzZXQgQ0ZJPQ0KK0BzZXQgQ0ZYPQ0KK0BzZXQgQ0ZBU009DQorQHNldCBMRj0NCitAc2V0IEJOQU1FPQ0KK0BzZXQgQkxJQj0NCitAc2V0IEJETEw9DQorQHNldCBCRUNITz0NCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjE2L2JjLmJhdCBiL2x6by0yLjAzL0Ivd2luMTYvYmMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjQ0M2QKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjE2L2JjLmJhdApAQCAtMCwwICsxLDQyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDE2LWJpdA0KK0BlY2hvIC8vICAgQm9ybGFuZCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1iY2MgLW1sIC0yIC10VyAtaA0KK3NldCBDRj0tTzEgLWQgLXcgLXctcmNoIC13LXNpZyAlQ0ZJJSAtSWluY2x1ZGVcbHpvDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtSXNyYyAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQordGxpYiAlQkxJQiUgQGJcZG9zMTZcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLUlleGFtcGxlcyBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtSWV4YW1wbGVzIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1JZXhhbXBsZXMgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbHMgLUlsem90ZXN0IGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWxzIC1JbWluaWx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMTYvZG0uYmF0IGIvbHpvLTIuMDMvQi93aW4xNi9kbS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTQyMjZkYQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMTYvZG0uYmF0CkBAIC0wLDAgKzEsNDMgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIFdpbmRvd3MgMTYtYml0DQorQGVjaG8gLy8gICBEaWdpdGFsIE1hcnMgQy9DKysgKHVzaW5nIFdJTklPKQ0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1kbWMgLW1sIC0yIC1XDQorc2V0IENGPS1vIC13LSAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUgbGlidy5saWIgY29tbWRsZy5saWIgbHdpbmRvcy5saWIgL0wvbWFwL3N0YWNrOjgwOTYNCisNCislQ0MlICVDRiUgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpYiAlQkxJQiUgL2IgL2MgL24gL25vaSBAYlxkb3MxNlxiYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KK3NldCBMRj1saWJ3LmxpYiBjb21tZGxnLmxpYiBsd2luZG9zLmxpYiAvTC9tYXAvc3RhY2s6ODA5Ng0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjE2L21jLmJhdCBiL2x6by0yLjAzL0Ivd2luMTYvbWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDAwODYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjE2L21jLmJhdApAQCAtMCwwICsxLDU2IEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDE2LWJpdA0KK0BlY2hvIC8vICAgTWljcm9zb2Z0IEMvQysrICh1c2luZyBRdWlja1dpbikNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtQUwgLUcyIC1NcQ0KK3NldCBDRj0tTyAtR2YgLVczICVDRkklDQorc2V0IExGPS9zZWc6MjU2IC9zdGFjazo4MDk2IC9ub2Q6bGxpYmNlIC9tYXANCisNCislQ0MlICVDRiUgLWMgc3JjXCouYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpYiAvbm9sb2dvICVCTElCJSBAYlxkb3MxNlxiYy5yc3A7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBkaWN0Lm9iaiwsLGxsaWJjZXdxLmxpYiBsaWJ3LmxpYiAlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGx6b3BhY2suYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBsem9wYWNrLm9iaiwsLGxsaWJjZXdxLmxpYiBsaWJ3LmxpYiAlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgJUxGJSBwcmVjb21wLm9iaiwsLGxsaWJjZXdxLmxpYiBsaWJ3LmxpYiAlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgcHJlY29tcDIub2JqLCwsbGxpYmNld3EubGliIGxpYncubGliICVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNcc2ltcGxlLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgc2ltcGxlLm9iaiwsLGxsaWJjZXdxLmxpYiBsaWJ3LmxpYiAlQkxJQiU7DQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGx6b3Rlc3RcbHpvdGVzdC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGluayAlTEYlIGx6b3Rlc3Qub2JqLCwsbGxpYmNld3EubGliIGxpYncubGliICVCTElCJTsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byAtYyBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rICVMRiUgdGVzdG1pbmkub2JqIG1pbmlsem8ub2JqLCwsbGxpYmNld3EubGliIGxpYncubGliOw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4xNi9zYy5iYXQgYi9sem8tMi4wMy9CL3dpbjE2L3NjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2M0NjE5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4xNi9zYy5iYXQKQEAgLTAsMCArMSw1MyBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAxNi1iaXQNCitAZWNobyAvLyAgIFN5bWFudGVjIEMvQysrICh1c2luZyBXSU5JTykNCitAZWNobyAvLw0KK0BlY2hvIC8vIE5PVEU6IExaTyBicmVha3MgdGhlIG9wdGltaXplciwgc28gd2UgZGlzYWJsZSBvcHRpbWl6YXRpb25zDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPXNjIC1tbCAtMiAtVw0KK3NldCBDRj0tdy0gJUNGSSUNCitzZXQgTEY9JUJMSUIlIGxpYncubGliIGNvbW1kbGcubGliIGx3aW5kb3MubGliIC9ML21hcC9zdGFjazo4MDk2DQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgJUJMSUIlIC9iIC9jIC9uIC9ub2kgQGJcZG9zMTZcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgZGljdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xsem9wYWNrLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3BhY2sub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBwcmVjb21wLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAyLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHNpbXBsZS5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBzaW1wbGUub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgbHpvdGVzdFxsem90ZXN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3Rlc3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMTYvdmMuYmF0IGIvbHpvLTIuMDMvQi93aW4xNi92Yy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGZiODEzYQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMTYvdmMuYmF0CkBAIC0wLDAgKzEsNDMgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIFdpbmRvd3MgMTYtYml0DQorQGVjaG8gLy8gICBNaWNyb3NvZnQgVmlzdWFsIEMvQysrICh1c2luZyBRdWlja1dpbikNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtQUwgLUcyIC1NcQ0KK3NldCBDRj0tTyAtR2YgLUdzIC1HeSAtVzMgJUNGSSUNCitzZXQgTEY9JUJMSUIlIC1GbSAvbGluayAvc2VnOjI1Ng0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliIC9ub2xvZ28gJUJMSUIlIEBiXGRvczE2XGJjLnJzcDsNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KK3NldCBMRj0tRm0gL2xpbmsgL3NlZzoyNTYNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4xNi93Yy5iYXQgYi9sem8tMi4wMy9CL3dpbjE2L3djLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmQ0NWE4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4xNi93Yy5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAxNi1iaXQNCitAZWNobyAvLyAgIFdhdGNvbSBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz13Y2wgLXpxIC1tbCAtMiAtYncgLWJ0I3dpbmRvd3MgLWwjd2luZG93cw0KK3NldCBDRj0tb3ggJUNGSSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIHNyY1wqLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCit3bGliIC1xIC1iIC1uIC10ICVCTElCJSBAYlxkb3MxNlx3Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9iYy5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL2JjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTg2NGUwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9iYy5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIEJvcmxhbmQgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9YmNjMzINCitzZXQgQ0Y9LU8yIC13IC13LWF1cyAlQ0ZJJSAtSWluY2x1ZGVcbHpvICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1Jc3JjIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCit0bGliICVCTElCJSBAYlx3aW4zMlxiYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWxzIC1JZXhhbXBsZXMgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWxzIC1JZXhhbXBsZXMgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWxzIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWxzIC1JZXhhbXBsZXMgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1scyAtSWV4YW1wbGVzIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWxzIC1JbHpvdGVzdCBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1scyAtSW1pbmlsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL2JjLnJzcCBiL2x6by0yLjAzL0Ivd2luMzIvYmMucnNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3N2YxZmYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL2JjLnJzcApAQCAtMCwwICsxLDc5IEBACisrbHpvMS5vYmogJg0KKytsem8xXzk5Lm9iaiAmDQorK2x6bzFhLm9iaiAmDQorK2x6bzFhXzk5Lm9iaiAmDQorK2x6bzFiXzEub2JqICYNCisrbHpvMWJfMi5vYmogJg0KKytsem8xYl8zLm9iaiAmDQorK2x6bzFiXzQub2JqICYNCisrbHpvMWJfNS5vYmogJg0KKytsem8xYl82Lm9iaiAmDQorK2x6bzFiXzcub2JqICYNCisrbHpvMWJfOC5vYmogJg0KKytsem8xYl85Lm9iaiAmDQorK2x6bzFiXzk5Lm9iaiAmDQorK2x6bzFiXzl4Lm9iaiAmDQorK2x6bzFiX2NjLm9iaiAmDQorK2x6bzFiX2QxLm9iaiAmDQorK2x6bzFiX2QyLm9iaiAmDQorK2x6bzFiX3JyLm9iaiAmDQorK2x6bzFiX3h4Lm9iaiAmDQorK2x6bzFjXzEub2JqICYNCisrbHpvMWNfMi5vYmogJg0KKytsem8xY18zLm9iaiAmDQorK2x6bzFjXzQub2JqICYNCisrbHpvMWNfNS5vYmogJg0KKytsem8xY182Lm9iaiAmDQorK2x6bzFjXzcub2JqICYNCisrbHpvMWNfOC5vYmogJg0KKytsem8xY185Lm9iaiAmDQorK2x6bzFjXzk5Lm9iaiAmDQorK2x6bzFjXzl4Lm9iaiAmDQorK2x6bzFjX2NjLm9iaiAmDQorK2x6bzFjX2QxLm9iaiAmDQorK2x6bzFjX2QyLm9iaiAmDQorK2x6bzFjX3JyLm9iaiAmDQorK2x6bzFjX3h4Lm9iaiAmDQorK2x6bzFmXzEub2JqICYNCisrbHpvMWZfOXgub2JqICYNCisrbHpvMWZfZDEub2JqICYNCisrbHpvMWZfZDIub2JqICYNCisrbHpvMXhfMS5vYmogJg0KKytsem8xeF8xay5vYmogJg0KKytsem8xeF8xbC5vYmogJg0KKytsem8xeF8xby5vYmogJg0KKytsem8xeF85eC5vYmogJg0KKytsem8xeF9kMS5vYmogJg0KKytsem8xeF9kMi5vYmogJg0KKytsem8xeF9kMy5vYmogJg0KKytsem8xeF9vLm9iaiAmDQorK2x6bzF5XzEub2JqICYNCisrbHpvMXlfOXgub2JqICYNCisrbHpvMXlfZDEub2JqICYNCisrbHpvMXlfZDIub2JqICYNCisrbHpvMXlfZDMub2JqICYNCisrbHpvMXlfby5vYmogJg0KKytsem8xel85eC5vYmogJg0KKytsem8xel9kMS5vYmogJg0KKytsem8xel9kMi5vYmogJg0KKytsem8xel9kMy5vYmogJg0KKytsem8yYV85eC5vYmogJg0KKytsem8yYV9kMS5vYmogJg0KKytsem8yYV9kMi5vYmogJg0KKytsem9fY3JjLm9iaiAmDQorK2x6b19pbml0Lm9iaiAmDQorK2x6b19wdHIub2JqICYNCisrbHpvX3N0ci5vYmogJg0KKytsem9fdXRpbC5vYmogJg0KKythc21caTM4NlxvYmpcb21mMzJcbHpvMWNfczEub2JqICYNCisrYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFjX3MyLm9iaiAmDQorK2FzbVxpMzg2XG9ialxvbWYzMlxsem8xZl9mMS5vYmogJg0KKythc21caTM4NlxvYmpcb21mMzJcbHpvMWZfZjIub2JqICYNCisrYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X2YxLm9iaiAmDQorK2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeF9mMi5vYmogJg0KKythc21caTM4NlxvYmpcb21mMzJcbHpvMXhfczEub2JqICYNCisrYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X3MyLm9iaiAmDQorK2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeV9mMS5vYmogJg0KKythc21caTM4NlxvYmpcb21mMzJcbHpvMXlfZjIub2JqICYNCisrYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X3MxLm9iaiAmDQorK2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeV9zMi5vYmoNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL2N5Z3dpbi5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL2N5Z3dpbi5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmYxYWExNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMzIvY3lnd2luLmJhdApAQCAtMCwwICsxLDQ1IEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDMyLWJpdA0KK0BlY2hvIC8vICAgY3lnd2luICsgZ2NjDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IEJMSUI9bGliJUJOQU1FJS5hDQorc2V0IENDPWdjYw0KK3NldCBDRj0tTzIgLWZvbWl0LWZyYW1lLXBvaW50ZXIgLVdhbGwgJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUgLWx3aW5tbSAtcw0KKw0KKyVDQyUgJUNGJSAtV25vLXVuaW5pdGlhbGl6ZWQgLWMgc3JjLyouYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgLXggYXNzZW1ibGVyLXdpdGgtY3BwIC1jIGFzbS9pMzg2L3NyY19nYXMvKi5TDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorYXIgcmNzICVCTElCJSBAYi93aW4zMi9jeWd3aW4ucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGRpY3QuZXhlIGV4YW1wbGVzL2RpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIGx6b3BhY2suZXhlIGV4YW1wbGVzL2x6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAuZXhlIGV4YW1wbGVzL3ByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAyLmV4ZSBleGFtcGxlcy9wcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gc2ltcGxlLmV4ZSBleGFtcGxlcy9zaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGx6b3Rlc3QuZXhlIGx6b3Rlc3QvbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlL2x6byAtV25vLXVuaW5pdGlhbGl6ZWQgLW8gdGVzdG1pbmkuZXhlIG1pbmlsem8vdGVzdG1pbmkuYyBtaW5pbHpvL21pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9jeWd3aW4ucnNwIGIvbHpvLTIuMDMvQi93aW4zMi9jeWd3aW4ucnNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjOWM5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL2N5Z3dpbi5yc3AKQEAgLTAsMCArMSw3OSBAQAorbHpvMS5vDQorbHpvMV85OS5vDQorbHpvMWEubw0KK2x6bzFhXzk5Lm8NCitsem8xYl8xLm8NCitsem8xYl8yLm8NCitsem8xYl8zLm8NCitsem8xYl80Lm8NCitsem8xYl81Lm8NCitsem8xYl82Lm8NCitsem8xYl83Lm8NCitsem8xYl84Lm8NCitsem8xYl85Lm8NCitsem8xYl85OS5vDQorbHpvMWJfOXgubw0KK2x6bzFiX2NjLm8NCitsem8xYl9kMS5vDQorbHpvMWJfZDIubw0KK2x6bzFiX3JyLm8NCitsem8xYl94eC5vDQorbHpvMWNfMS5vDQorbHpvMWNfMi5vDQorbHpvMWNfMy5vDQorbHpvMWNfNC5vDQorbHpvMWNfNS5vDQorbHpvMWNfNi5vDQorbHpvMWNfNy5vDQorbHpvMWNfOC5vDQorbHpvMWNfOS5vDQorbHpvMWNfOTkubw0KK2x6bzFjXzl4Lm8NCitsem8xY19jYy5vDQorbHpvMWNfZDEubw0KK2x6bzFjX2QyLm8NCitsem8xY19yci5vDQorbHpvMWNfeHgubw0KK2x6bzFmXzEubw0KK2x6bzFmXzl4Lm8NCitsem8xZl9kMS5vDQorbHpvMWZfZDIubw0KK2x6bzF4XzEubw0KK2x6bzF4XzFrLm8NCitsem8xeF8xbC5vDQorbHpvMXhfMW8ubw0KK2x6bzF4Xzl4Lm8NCitsem8xeF9kMS5vDQorbHpvMXhfZDIubw0KK2x6bzF4X2QzLm8NCitsem8xeF9vLm8NCitsem8xeV8xLm8NCitsem8xeV85eC5vDQorbHpvMXlfZDEubw0KK2x6bzF5X2QyLm8NCitsem8xeV9kMy5vDQorbHpvMXlfby5vDQorbHpvMXpfOXgubw0KK2x6bzF6X2QxLm8NCitsem8xel9kMi5vDQorbHpvMXpfZDMubw0KK2x6bzJhXzl4Lm8NCitsem8yYV9kMS5vDQorbHpvMmFfZDIubw0KK2x6b19jcmMubw0KK2x6b19pbml0Lm8NCitsem9fcHRyLm8NCitsem9fc3RyLm8NCitsem9fdXRpbC5vDQorbHpvMWNfczEubw0KK2x6bzFjX3MyLm8NCitsem8xZl9mMS5vDQorbHpvMWZfZjIubw0KK2x6bzF4X2YxLm8NCitsem8xeF9mMi5vDQorbHpvMXhfczEubw0KK2x6bzF4X3MyLm8NCitsem8xeV9mMS5vDQorbHpvMXlfZjIubw0KK2x6bzF5X3MxLm8NCitsem8xeV9zMi5vDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9kbS5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL2RtLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmZkMDlmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9kbS5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIERpZ2l0YWwgTWFycyBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1kbWMgLW1uDQorc2V0IENGPS1vIC13LSAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGliICVCTElCJSAvYiAvYyAvbiAvbm9pIEBiXHdpbjMyXGJjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL2ljLmJhdCBiL2x6by0yLjAzL0Ivd2luMzIvaWMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzOTRiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL2ljLmJhdApAQCAtMCwwICsxLDQyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDMyLWJpdA0KK0BlY2hvIC8vICAgSW50ZWwgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9aWNsIC1ub2xvZ28gLU1EDQorc2V0IENGPS1PMiAtR0YgLVczICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rIC1saWIgLW5vbG9nbyAtb3V0OiVCTElCJSBAYlx3aW4zMlx2Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9sY2N3aW4zMi5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL2xjY3dpbjMyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWI1ZTQyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9sY2N3aW4zMi5iYXQKQEAgLTAsMCArMSw1OSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIGxjYy13aW4zMg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gTk9URTogc29tZSBsY2Mtd2luMzIgdmVyc2lvbnMgYXJlIGJ1Z2d5LCBzbyB3ZSBkaXNhYmxlIG9wdGltaXphdGlvbnMNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9bGNjDQorc2V0IENGPS1PIC1BICVDRkklIC1JaW5jbHVkZVxsem8gJUNGQVNNJQ0KK3NldCBDRj0tQSAlQ0ZJJSAtSWluY2x1ZGVcbHpvICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIHdpbm1tLmxpYg0KKw0KK2ZvciAlJWYgaW4gKHNyY1wqLmMpIGRvICVDQyUgJUNGJSAtYyAlJWYNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsY2NsaWIgL291dDolQkxJQiUgQGJcd2luMzJcdmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAtYyAlQ0YlIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xjIGRpY3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIC1jICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorbGMgbHpvcGFjay5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgLWMgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsYyBwcmVjb21wLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAtYyAlQ0YlIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsYyBwcmVjb21wMi5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgLWMgJUNGJSBleGFtcGxlc1xzaW1wbGUuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xjIHNpbXBsZS5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgLWMgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xjIGx6b3Rlc3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlIC1jICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsYyB0ZXN0bWluaS5vYmogbWluaWx6by5vYmoNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMzIvbWluZ3cuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9taW5ndy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNlYjU5MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMzIvbWluZ3cuYmF0CkBAIC0wLDAgKzEsNDUgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIFdpbmRvd3MgMzItYml0DQorQGVjaG8gLy8gICBNaW5HVyArIGdjYw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBCTElCPWxpYiVCTkFNRSUuYQ0KK3NldCBDQz1nY2MNCitzZXQgQ0Y9LU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIC1sd2lubW0gLXMNCisNCislQ0MlICVDRiUgLVduby11bmluaXRpYWxpemVkIC1jIHNyYy8qLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIC14IGFzc2VtYmxlci13aXRoLWNwcCAtYyBhc20vaTM4Ni9zcmNfZ2FzLyouUw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2FyIHJjcyAlQkxJQiUgKi5vDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGRpY3QuZXhlIGV4YW1wbGVzL2RpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIGx6b3BhY2suZXhlIGV4YW1wbGVzL2x6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAuZXhlIGV4YW1wbGVzL3ByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAyLmV4ZSBleGFtcGxlcy9wcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gc2ltcGxlLmV4ZSBleGFtcGxlcy9zaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGx6b3Rlc3QuZXhlIGx6b3Rlc3QvbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlL2x6byAtV25vLXVuaW5pdGlhbGl6ZWQgLW8gdGVzdG1pbmkuZXhlIG1pbmlsem8vdGVzdG1pbmkuYyBtaW5pbHpvL21pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9td2Vya3MuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9td2Vya3MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjMyZTEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL213ZXJrcy5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIE1ldHJvd2Vya3MgQ29kZVdhcnJpb3IgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9bXdjYyAtZ2NjaW5jDQorc2V0IENGPS1vcHQgZnVsbCAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJSAtbHdpbm1tLmxpYg0KKw0KKyVDQyUgLXcgb24gJUNGJSAtdyBub3VudXNlZGV4cHIgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK213bGQgLWxpYnJhcnkgLW8gJUJMSUIlIEBiXHdpbjMyXHZjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL3BlbGxlc2MuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9wZWxsZXNjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY4ZmI4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9wZWxsZXNjLmJhdApAQCAtMCwwICsxLDQyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDMyLWJpdA0KK0BlY2hvIC8vICAgUGVsbGVzIEMNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2MgLVplIC1Hbw0KK3NldCBDRj0tTzIgLVcyICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIHNyY1wqLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitwb2xpYiAtb3V0OiVCTElCJSBAYlx3aW4zMlx2Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9wZ2kuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9wZ2kuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3Yjg0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL3BnaS5iYXQKQEAgLTAsMCArMSw0MyBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIFBvcnRsYW5kIEdyb3VwIFBHSSBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBCTElCPWxpYiVCTkFNRSUuYQ0KK3NldCBDQz1wZ2NjDQorc2V0IENGPS1mYXN0ICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIC1sd2lubW0NCisNCislQ0MlICVDRiUgLWMgc3JjXCouYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2FyIHJjcyAlQkxJQiUgKi5vIGFzbS9pMzg2L29iai93aW4zMi8qLm9iag0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBkaWN0LmV4ZSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBsem9wYWNrLmV4ZSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wLmV4ZSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBwcmVjb21wMi5leGUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHNpbXBsZS5leGUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtbyBsem90ZXN0LmV4ZSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL3B3MzIuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9wdzMyLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjhlMWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9wdzMyLmJhdApAQCAtMCwwICsxLDQ1IEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDMyLWJpdA0KK0BlY2hvIC8vICAgUFczMiArIGdjYw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBCTElCPWxpYiVCTkFNRSUuYQ0KK3NldCBDQz1nY2MNCitzZXQgQ0Y9LU8yIC1mb21pdC1mcmFtZS1wb2ludGVyIC1XYWxsICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlIC1sd2lubW0gLXMNCisNCislQ0MlICVDRiUgLVduby11bmluaXRpYWxpemVkIC1jIHNyYy8qLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIC14IGFzc2VtYmxlci13aXRoLWNwcCAtYyBhc20vaTM4Ni9zcmNfZ2FzLyouUw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2FyIHJjcyAlQkxJQiUgKi5vDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGRpY3QuZXhlIGV4YW1wbGVzL2RpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIGx6b3BhY2suZXhlIGV4YW1wbGVzL2x6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAuZXhlIGV4YW1wbGVzL3ByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1vIHByZWNvbXAyLmV4ZSBleGFtcGxlcy9wcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gc2ltcGxlLmV4ZSBleGFtcGxlcy9zaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1vIGx6b3Rlc3QuZXhlIGx6b3Rlc3QvbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlL2x6byAtV25vLXVuaW5pdGlhbGl6ZWQgLW8gdGVzdG1pbmkuZXhlIG1pbmlsem8vdGVzdG1pbmkuYyBtaW5pbHpvL21pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi9yc3hudC5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL3JzeG50LmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDdhNGEyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi9yc3hudC5iYXQKQEAgLTAsMCArMSw0NSBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIHJzeG50ICsgZ2NjDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IEJMSUI9JUJOQU1FJS5hDQorc2V0IENDPWdjYyAtWndpbjMyIC1ac3lzIC1tcHJvYmUNCitzZXQgQ0Y9QGIvZG9zMzIvZGoyLm9wdCAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJSAtcw0KKw0KKyVDQyUgJUNGJSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAteCBhc3NlbWJsZXItd2l0aC1jcHAgLWMgYXNtL2kzODYvc3JjX2dhcy8qLlMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCithciByY3MgJUJMSUIlIEBiL3dpbjMyL2N5Z3dpbi5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLW8gZGljdC5leGUgZXhhbXBsZXMvZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gbHpvcGFjay5leGUgZXhhbXBsZXMvbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gcHJlY29tcC5leGUgZXhhbXBsZXMvcHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLW8gcHJlY29tcDIuZXhlIGV4YW1wbGVzL3ByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtbyBzaW1wbGUuZXhlIGV4YW1wbGVzL3NpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLW8gbHpvdGVzdC5leGUgbHpvdGVzdC9sem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGUvbHpvIC1vIHRlc3RtaW5pLmV4ZSBtaW5pbHpvL3Rlc3RtaW5pLmMgbWluaWx6by9taW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMzIvc2MuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi9zYy5iYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YzYzE4MwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMzIvc2MuYmF0CkBAIC0wLDAgKzEsNTYgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIFdpbmRvd3MgMzItYml0DQorQGVjaG8gLy8gICBTeW1hbnRlYyBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1zYyAtbW4NCitzZXQgQ0Y9LW8gLXctICVDRkklICVDRkFTTSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaWIgJUJMSUIlIC9iIC9jIC9uIC9ub2kgQGJcd2luMzJcYmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXGRpY3QuYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgZGljdC5vYmogJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSAtYyBleGFtcGxlc1xsem9wYWNrLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3BhY2sub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgLWMgZXhhbXBsZXNccHJlY29tcC5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBwcmVjb21wLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHByZWNvbXAyLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHByZWNvbXAyLm9iaiAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIC1jIGV4YW1wbGVzXHNpbXBsZS5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSBzaW1wbGUub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLWMgbHpvdGVzdFxsem90ZXN0LmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIGx6b3Rlc3Qub2JqICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byAtYyBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlIHRlc3RtaW5pLm9iaiBtaW5pbHpvLm9iag0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi92Yy5iYXQgYi9sem8tMi4wMy9CL3dpbjMyL3ZjLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmFhZjI1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi92Yy5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtTUQNCitzZXQgQ0Y9LU8yIC1HRiAtVzMgJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KK2xpbmsgLWxpYiAtbm9sb2dvIC1vdXQ6JUJMSUIlIEBiXHdpbjMyXHZjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL3ZjLnJzcCBiL2x6by0yLjAzL0Ivd2luMzIvdmMucnNwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNWNhN2UKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL3ZjLnJzcApAQCAtMCwwICsxLDc5IEBACisuXGx6bzEub2JqDQorLlxsem8xXzk5Lm9iag0KKy5cbHpvMWEub2JqDQorLlxsem8xYV85OS5vYmoNCisuXGx6bzFiXzEub2JqDQorLlxsem8xYl8yLm9iag0KKy5cbHpvMWJfMy5vYmoNCisuXGx6bzFiXzQub2JqDQorLlxsem8xYl81Lm9iag0KKy5cbHpvMWJfNi5vYmoNCisuXGx6bzFiXzcub2JqDQorLlxsem8xYl84Lm9iag0KKy5cbHpvMWJfOS5vYmoNCisuXGx6bzFiXzk5Lm9iag0KKy5cbHpvMWJfOXgub2JqDQorLlxsem8xYl9jYy5vYmoNCisuXGx6bzFiX2QxLm9iag0KKy5cbHpvMWJfZDIub2JqDQorLlxsem8xYl9yci5vYmoNCisuXGx6bzFiX3h4Lm9iag0KKy5cbHpvMWNfMS5vYmoNCisuXGx6bzFjXzIub2JqDQorLlxsem8xY18zLm9iag0KKy5cbHpvMWNfNC5vYmoNCisuXGx6bzFjXzUub2JqDQorLlxsem8xY182Lm9iag0KKy5cbHpvMWNfNy5vYmoNCisuXGx6bzFjXzgub2JqDQorLlxsem8xY185Lm9iag0KKy5cbHpvMWNfOTkub2JqDQorLlxsem8xY185eC5vYmoNCisuXGx6bzFjX2NjLm9iag0KKy5cbHpvMWNfZDEub2JqDQorLlxsem8xY19kMi5vYmoNCisuXGx6bzFjX3JyLm9iag0KKy5cbHpvMWNfeHgub2JqDQorLlxsem8xZl8xLm9iag0KKy5cbHpvMWZfOXgub2JqDQorLlxsem8xZl9kMS5vYmoNCisuXGx6bzFmX2QyLm9iag0KKy5cbHpvMXhfMS5vYmoNCisuXGx6bzF4XzFrLm9iag0KKy5cbHpvMXhfMWwub2JqDQorLlxsem8xeF8xby5vYmoNCisuXGx6bzF4Xzl4Lm9iag0KKy5cbHpvMXhfZDEub2JqDQorLlxsem8xeF9kMi5vYmoNCisuXGx6bzF4X2QzLm9iag0KKy5cbHpvMXhfby5vYmoNCisuXGx6bzF5XzEub2JqDQorLlxsem8xeV85eC5vYmoNCisuXGx6bzF5X2QxLm9iag0KKy5cbHpvMXlfZDIub2JqDQorLlxsem8xeV9kMy5vYmoNCisuXGx6bzF5X28ub2JqDQorLlxsem8xel85eC5vYmoNCisuXGx6bzF6X2QxLm9iag0KKy5cbHpvMXpfZDIub2JqDQorLlxsem8xel9kMy5vYmoNCisuXGx6bzJhXzl4Lm9iag0KKy5cbHpvMmFfZDEub2JqDQorLlxsem8yYV9kMi5vYmoNCisuXGx6b19jcmMub2JqDQorLlxsem9faW5pdC5vYmoNCisuXGx6b19wdHIub2JqDQorLlxsem9fc3RyLm9iag0KKy5cbHpvX3V0aWwub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMWNfczEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMWNfczIub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMWZfZjEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMWZfZjIub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXhfZjEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXhfZjIub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXhfczEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXhfczIub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXlfZjEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXlfZjIub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXlfczEub2JqDQorLlxhc21caTM4NlxvYmpcd2luMzJcbHpvMXlfczIub2JqDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW4zMi92Y19kbGwuYmF0IGIvbHpvLTIuMDMvQi93aW4zMi92Y19kbGwuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2YzBjZWYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL3ZjX2RsbC5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyAzMi1iaXQNCitAZWNobyAvLyAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysgKERMTCkNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtTUQNCitzZXQgQ0Y9LU8yIC1HRiAtVzMgJUNGSSUgJUNGQVNNJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLURfX0xaT19FWFBPUlQxI19fZGVjbHNwZWMoZGxsZXhwb3J0KSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAtTEQgLUZlJUJETEwlIEBiXHdpbjMyXHZjLnJzcCAvbGluayAvbWFwIC9kZWY6Ylx3aW4zMlx2Y19kbGwuZGVmDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMzIvdmNfZGxsLmRlZiBiL2x6by0yLjAzL0Ivd2luMzIvdmNfZGxsLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWRlNTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW4zMi92Y19kbGwuZGVmCkBAIC0wLDAgKzEsMTMgQEAKK0VYUE9SVFMNCisgX2x6bzFjX2RlY29tcHJlc3NfYXNtPWx6bzFjX2RlY29tcHJlc3NfYXNtDQorIF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlPWx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUNCisgX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Q9bHpvMWZfZGVjb21wcmVzc19hc21fZmFzdA0KKyBfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlPWx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQ0KKyBfbHpvMXhfZGVjb21wcmVzc19hc209bHpvMXhfZGVjb21wcmVzc19hc20NCisgX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Q9bHpvMXhfZGVjb21wcmVzc19hc21fZmFzdA0KKyBfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlPWx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQ0KKyBfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZT1sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlDQorIF9sem8xeV9kZWNvbXByZXNzX2FzbT1sem8xeV9kZWNvbXByZXNzX2FzbQ0KKyBfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdD1sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0DQorIF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmU9bHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlDQorIF9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlPWx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjMyL3djLmJhdCBiL2x6by0yLjAzL0Ivd2luMzIvd2MuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3MTFlNmMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjMyL3djLmJhdApAQCAtMCwwICsxLDM5IEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDMyLWJpdA0KK0BlY2hvIC8vICAgV2F0Y29tIEMvQysrDQorQGVjaG8gLy8NCitAY2FsbCBiXHByZXBhcmUuYmF0DQorQGlmICIlQkVDSE8lIj09Im4iIGVjaG8gb2ZmDQorDQorDQorc2V0IENDPXdjbDM4NiAtenEgLW1mIC01ciAtYnQjbnQgLWwjbnQNCitzZXQgQ0Y9LW94IC16YyAlQ0ZJJSAlQ0ZBU00lDQorc2V0IExGPSVCTElCJQ0KKw0KKyVDQyUgJUNGJSAtYyBzcmNcKi5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQord2xpYiAtcSAtYiAtbiAtdCAlQkxJQiUgQGJcd2luMzJcd2MucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luMzIvd2MucnNwIGIvbHpvLTIuMDMvQi93aW4zMi93Yy5yc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWJmOGI4YwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0Ivd2luMzIvd2MucnNwCkBAIC0wLDAgKzEsNzkgQEAKKysnbHpvMS5vYmonDQorKydsem8xXzk5Lm9iaicNCisrJ2x6bzFhLm9iaicNCisrJ2x6bzFhXzk5Lm9iaicNCisrJ2x6bzFiXzEub2JqJw0KKysnbHpvMWJfMi5vYmonDQorKydsem8xYl8zLm9iaicNCisrJ2x6bzFiXzQub2JqJw0KKysnbHpvMWJfNS5vYmonDQorKydsem8xYl82Lm9iaicNCisrJ2x6bzFiXzcub2JqJw0KKysnbHpvMWJfOC5vYmonDQorKydsem8xYl85Lm9iaicNCisrJ2x6bzFiXzk5Lm9iaicNCisrJ2x6bzFiXzl4Lm9iaicNCisrJ2x6bzFiX2NjLm9iaicNCisrJ2x6bzFiX2QxLm9iaicNCisrJ2x6bzFiX2QyLm9iaicNCisrJ2x6bzFiX3JyLm9iaicNCisrJ2x6bzFiX3h4Lm9iaicNCisrJ2x6bzFjXzEub2JqJw0KKysnbHpvMWNfMi5vYmonDQorKydsem8xY18zLm9iaicNCisrJ2x6bzFjXzQub2JqJw0KKysnbHpvMWNfNS5vYmonDQorKydsem8xY182Lm9iaicNCisrJ2x6bzFjXzcub2JqJw0KKysnbHpvMWNfOC5vYmonDQorKydsem8xY185Lm9iaicNCisrJ2x6bzFjXzk5Lm9iaicNCisrJ2x6bzFjXzl4Lm9iaicNCisrJ2x6bzFjX2NjLm9iaicNCisrJ2x6bzFjX2QxLm9iaicNCisrJ2x6bzFjX2QyLm9iaicNCisrJ2x6bzFjX3JyLm9iaicNCisrJ2x6bzFjX3h4Lm9iaicNCisrJ2x6bzFmXzEub2JqJw0KKysnbHpvMWZfOXgub2JqJw0KKysnbHpvMWZfZDEub2JqJw0KKysnbHpvMWZfZDIub2JqJw0KKysnbHpvMXhfMS5vYmonDQorKydsem8xeF8xay5vYmonDQorKydsem8xeF8xbC5vYmonDQorKydsem8xeF8xby5vYmonDQorKydsem8xeF85eC5vYmonDQorKydsem8xeF9kMS5vYmonDQorKydsem8xeF9kMi5vYmonDQorKydsem8xeF9kMy5vYmonDQorKydsem8xeF9vLm9iaicNCisrJ2x6bzF5XzEub2JqJw0KKysnbHpvMXlfOXgub2JqJw0KKysnbHpvMXlfZDEub2JqJw0KKysnbHpvMXlfZDIub2JqJw0KKysnbHpvMXlfZDMub2JqJw0KKysnbHpvMXlfby5vYmonDQorKydsem8xel85eC5vYmonDQorKydsem8xel9kMS5vYmonDQorKydsem8xel9kMi5vYmonDQorKydsem8xel9kMy5vYmonDQorKydsem8yYV85eC5vYmonDQorKydsem8yYV9kMS5vYmonDQorKydsem8yYV9kMi5vYmonDQorKydsem9fY3JjLm9iaicNCisrJ2x6b19pbml0Lm9iaicNCisrJ2x6b19wdHIub2JqJw0KKysnbHpvX3N0ci5vYmonDQorKydsem9fdXRpbC5vYmonDQorKydhc21caTM4NlxvYmpcb21mMzJcbHpvMWNfczEub2JqJw0KKysnYXNtXGkzODZcb2JqXG9tZjMyXGx6bzFjX3MyLm9iaicNCisrJ2FzbVxpMzg2XG9ialxvbWYzMlxsem8xZl9mMS5vYmonDQorKydhc21caTM4NlxvYmpcb21mMzJcbHpvMWZfZjIub2JqJw0KKysnYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X2YxLm9iaicNCisrJ2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeF9mMi5vYmonDQorKydhc21caTM4NlxvYmpcb21mMzJcbHpvMXhfczEub2JqJw0KKysnYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF4X3MyLm9iaicNCisrJ2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeV9mMS5vYmonDQorKydhc21caTM4NlxvYmpcb21mMzJcbHpvMXlfZjIub2JqJw0KKysnYXNtXGkzODZcb2JqXG9tZjMyXGx6bzF5X3MxLm9iaicNCisrJ2FzbVxpMzg2XG9ialxvbWYzMlxsem8xeV9zMi5vYmonDQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW42NC9pYy5iYXQgYi9sem8tMi4wMy9CL3dpbjY0L2ljLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUxNDlmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW42NC9pYy5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyA2NC1iaXQgKEl0YW5pdW0pDQorQGVjaG8gLy8gICBJbnRlbCBDL0MrKw0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1pY2wgLW5vbG9nbyAtTUQNCitzZXQgQ0Y9LU8yIC1HRiAtVzMgJUNGSSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rIC1saWIgLW5vbG9nbyAtb3V0OiVCTElCJSBAYlx3aW42NFx2Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW42NC9pY19kbGwuYmF0IGIvbHpvLTIuMDMvQi93aW42NC9pY19kbGwuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZDQ1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjY0L2ljX2RsbC5iYXQKQEAgLTAsMCArMSw0MiBAQAorQGVjaG8gLy8gQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXINCitAZWNobyAvLw0KK0BlY2hvIC8vICAgV2luZG93cyA2NC1iaXQgKEl0YW5pdW0pDQorQGVjaG8gLy8gICBJbnRlbCBDL0MrKyAoRExMKQ0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1pY2wgLW5vbG9nbyAtTUQNCitzZXQgQ0Y9LU8yIC1HRiAtVzMgJUNGSSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1EX19MWk9fRVhQT1JUMSNfX2RlY2xzcGVjKGRsbGV4cG9ydCkgLWMgQGJcc3JjLnJzcA0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgLUxEIC1GZSVCRExMJSBAYlx3aW42NFx2Yy5yc3AgL2xpbmsgL21hcCAvZGVmOmJcd2luNjRcdmNfZGxsLmRlZg0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBleGFtcGxlc1xkaWN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xsem9wYWNrLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xwcmVjb21wMi5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcc2ltcGxlLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSBsem90ZXN0XGx6b3Rlc3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIC1JaW5jbHVkZVxsem8gbWluaWx6b1x0ZXN0bWluaS5jIG1pbmlsem9cbWluaWx6by5jDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorDQorQGNhbGwgYlxkb25lLmJhdA0KK0Bnb3RvIGVuZA0KKzplcnJvcg0KK0BlY2hvIEVSUk9SIGR1cmluZyBidWlsZCENCis6ZW5kDQorQGNhbGwgYlx1bnNldC5iYXQNCmRpZmYgLS1naXQgYS9sem8tMi4wMy9CL3dpbjY0L3ZjLmJhdCBiL2x6by0yLjAzL0Ivd2luNjQvdmMuYmF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzODZiOTEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CL3dpbjY0L3ZjLmJhdApAQCAtMCwwICsxLDQyIEBACitAZWNobyAvLyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcg0KK0BlY2hvIC8vDQorQGVjaG8gLy8gICBXaW5kb3dzIDY0LWJpdCAoQU1ENjQgb3IgSXRhbml1bSkNCitAZWNobyAvLyAgIE1pY3Jvc29mdCBWaXN1YWwgQy9DKysNCitAZWNobyAvLw0KK0BjYWxsIGJccHJlcGFyZS5iYXQNCitAaWYgIiVCRUNITyUiPT0ibiIgZWNobyBvZmYNCisNCisNCitzZXQgQ0M9Y2wgLW5vbG9nbyAtTUQNCitzZXQgQ0Y9LU8yIC1HRiAtVzMgLVdwNjQgJUNGSSUNCitzZXQgTEY9JUJMSUIlDQorDQorJUNDJSAlQ0YlIC1jIEBiXHNyYy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCitsaW5rIC1saWIgLW5vbG9nbyAtb3V0OiVCTElCJSBAYlx3aW42NFx2Yy5yc3ANCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgZXhhbXBsZXNcZGljdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNcbHpvcGFjay5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCislQ0MlICVDRiUgZXhhbXBsZXNccHJlY29tcDIuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHNpbXBsZS5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgbHpvdGVzdFxsem90ZXN0LmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKyVDQyUgJUNGJSAtSWluY2x1ZGVcbHpvIG1pbmlsem9cdGVzdG1pbmkuYyBtaW5pbHpvXG1pbmlsem8uYw0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKw0KKw0KK0BjYWxsIGJcZG9uZS5iYXQNCitAZ290byBlbmQNCis6ZXJyb3INCitAZWNobyBFUlJPUiBkdXJpbmcgYnVpbGQhDQorOmVuZA0KK0BjYWxsIGJcdW5zZXQuYmF0DQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvQi93aW42NC92Yy5yc3AgYi9sem8tMi4wMy9CL3dpbjY0L3ZjLnJzcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODJkZTYwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW42NC92Yy5yc3AKQEAgLTAsMCArMSw2NyBAQAorLlxsem8xLm9iag0KKy5cbHpvMV85OS5vYmoNCisuXGx6bzFhLm9iag0KKy5cbHpvMWFfOTkub2JqDQorLlxsem8xYl8xLm9iag0KKy5cbHpvMWJfMi5vYmoNCisuXGx6bzFiXzMub2JqDQorLlxsem8xYl80Lm9iag0KKy5cbHpvMWJfNS5vYmoNCisuXGx6bzFiXzYub2JqDQorLlxsem8xYl83Lm9iag0KKy5cbHpvMWJfOC5vYmoNCisuXGx6bzFiXzkub2JqDQorLlxsem8xYl85OS5vYmoNCisuXGx6bzFiXzl4Lm9iag0KKy5cbHpvMWJfY2Mub2JqDQorLlxsem8xYl9kMS5vYmoNCisuXGx6bzFiX2QyLm9iag0KKy5cbHpvMWJfcnIub2JqDQorLlxsem8xYl94eC5vYmoNCisuXGx6bzFjXzEub2JqDQorLlxsem8xY18yLm9iag0KKy5cbHpvMWNfMy5vYmoNCisuXGx6bzFjXzQub2JqDQorLlxsem8xY181Lm9iag0KKy5cbHpvMWNfNi5vYmoNCisuXGx6bzFjXzcub2JqDQorLlxsem8xY184Lm9iag0KKy5cbHpvMWNfOS5vYmoNCisuXGx6bzFjXzk5Lm9iag0KKy5cbHpvMWNfOXgub2JqDQorLlxsem8xY19jYy5vYmoNCisuXGx6bzFjX2QxLm9iag0KKy5cbHpvMWNfZDIub2JqDQorLlxsem8xY19yci5vYmoNCisuXGx6bzFjX3h4Lm9iag0KKy5cbHpvMWZfMS5vYmoNCisuXGx6bzFmXzl4Lm9iag0KKy5cbHpvMWZfZDEub2JqDQorLlxsem8xZl9kMi5vYmoNCisuXGx6bzF4XzEub2JqDQorLlxsem8xeF8xay5vYmoNCisuXGx6bzF4XzFsLm9iag0KKy5cbHpvMXhfMW8ub2JqDQorLlxsem8xeF85eC5vYmoNCisuXGx6bzF4X2QxLm9iag0KKy5cbHpvMXhfZDIub2JqDQorLlxsem8xeF9kMy5vYmoNCisuXGx6bzF4X28ub2JqDQorLlxsem8xeV8xLm9iag0KKy5cbHpvMXlfOXgub2JqDQorLlxsem8xeV9kMS5vYmoNCisuXGx6bzF5X2QyLm9iag0KKy5cbHpvMXlfZDMub2JqDQorLlxsem8xeV9vLm9iag0KKy5cbHpvMXpfOXgub2JqDQorLlxsem8xel9kMS5vYmoNCisuXGx6bzF6X2QyLm9iag0KKy5cbHpvMXpfZDMub2JqDQorLlxsem8yYV85eC5vYmoNCisuXGx6bzJhX2QxLm9iag0KKy5cbHpvMmFfZDIub2JqDQorLlxsem9fY3JjLm9iag0KKy5cbHpvX2luaXQub2JqDQorLlxsem9fcHRyLm9iag0KKy5cbHpvX3N0ci5vYmoNCisuXGx6b191dGlsLm9iag0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luNjQvdmNfZGxsLmJhdCBiL2x6by0yLjAzL0Ivd2luNjQvdmNfZGxsLmJhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzE2MTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW42NC92Y19kbGwuYmF0CkBAIC0wLDAgKzEsNDIgQEAKK0BlY2hvIC8vIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyDQorQGVjaG8gLy8NCitAZWNobyAvLyAgIFdpbmRvd3MgNjQtYml0IChBTUQ2NCBvciBJdGFuaXVtKQ0KK0BlY2hvIC8vICAgTWljcm9zb2Z0IFZpc3VhbCBDL0MrKyAoRExMKQ0KK0BlY2hvIC8vDQorQGNhbGwgYlxwcmVwYXJlLmJhdA0KK0BpZiAiJUJFQ0hPJSI9PSJuIiBlY2hvIG9mZg0KKw0KKw0KK3NldCBDQz1jbCAtbm9sb2dvIC1NRA0KK3NldCBDRj0tTzIgLUdGIC1XMyAtV3A2NCAlQ0ZJJQ0KK3NldCBMRj0lQkxJQiUNCisNCislQ0MlICVDRiUgLURfX0xaT19FWFBPUlQxI19fZGVjbHNwZWMoZGxsZXhwb3J0KSAtYyBAYlxzcmMucnNwDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAtTEQgLUZlJUJETEwlIEBiXHdpbjY0XHZjLnJzcCAvbGluayAvbWFwIC9kZWY6Ylx3aW42NFx2Y19kbGwuZGVmDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGRpY3QuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXGx6b3BhY2suYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorJUNDJSAlQ0YlIGV4YW1wbGVzXHByZWNvbXAyLmMgJUxGJQ0KK0BpZiBlcnJvcmxldmVsIDEgZ290byBlcnJvcg0KKyVDQyUgJUNGJSBleGFtcGxlc1xzaW1wbGUuYyAlTEYlDQorQGlmIGVycm9ybGV2ZWwgMSBnb3RvIGVycm9yDQorDQorJUNDJSAlQ0YlIGx6b3Rlc3RcbHpvdGVzdC5jICVMRiUNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCislQ0MlICVDRiUgLUlpbmNsdWRlXGx6byBtaW5pbHpvXHRlc3RtaW5pLmMgbWluaWx6b1xtaW5pbHpvLmMNCitAaWYgZXJyb3JsZXZlbCAxIGdvdG8gZXJyb3INCisNCisNCitAY2FsbCBiXGRvbmUuYmF0DQorQGdvdG8gZW5kDQorOmVycm9yDQorQGVjaG8gRVJST1IgZHVyaW5nIGJ1aWxkIQ0KKzplbmQNCitAY2FsbCBiXHVuc2V0LmJhdA0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0Ivd2luNjQvdmNfZGxsLmRlZiBiL2x6by0yLjAzL0Ivd2luNjQvdmNfZGxsLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTY4MWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvQi93aW42NC92Y19kbGwuZGVmCkBAIC0wLDAgKzEgQEAKK0xJQlJBUlkgbHpvMg0KZGlmZiAtLWdpdCBhL2x6by0yLjAzL0JVR1MgYi9sem8tMi4wMy9CVUdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYWEyYTcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9CVUdTCkBAIC0wLDAgKzEsMjEgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0xaTyAtLSBhIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTFpPIGlzIGZyZWUgb2YgYW55IGtub3duIGJ1Z3MuCisKK05ldmVydGhlbGVzcyBMWk8gaGFzIGJlZW4gcmVwb3J0ZWQgdG8gYnJlYWsgdGhlIG9wdGltaXplciBvZiBzb21lCitjb21waWxlcnMgaW5jbHVkaW5nIGdjYyAyLjcuMiAoQUlYLCBJUklYKSBhbmQgV2F0Y29tIEMgOS41LgorCitTbyBpZiBgbHpvdGVzdCcgcmVwb3J0cyBkYXRhIGRlY29tcHJlc3Npb24gZXJyb3JzIHlvdSBzaG91bGQgcmVjb21waWxlCitldmVyeXRoaW5nIHdpdGhvdXQgb3B0aW1pemF0aW9ucyBhbmQgc2VlIGlmIHRoYXQgZml4ZXMgdGhlIHByb2JsZW0uCitJJ2QgbGlrZSB0byBoZWFyIGFib3V0IG9wdGltaXplciBwcm9ibGVtcyBhbmQgcG9zc2libGUgd29ya2Fyb3VuZHMuCisKKworS25vd24gY29tcGlsZXIgcHJvYmxlbXM6CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgc29tZSB2ZXJzaW9ucyBvZiBnY2MgICAgdXNlIGAtTzIgLWZuby1zdHJlbmd0aC1yZWR1Y2UnCisgIHNvbWUgdmVyc2lvbnMgb2YgZ2NjICAgIHVzZSBgLU8yIC1mbm8tc2NoZWR1bGUtaW5zbnMgLWZuby1zY2hlZHVsZS1pbnNuczInCisgIFdhdGNvbSBDIDkuNSAgICAgICAgICAgIGNvbXBpbGUgd2l0aCBgLW9uZWF4JyBpbnN0ZWFkIG9mIGAtb25lYXR4JworCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL0NPUFlJTkcgYi9sem8tMi4wMy9DT1BZSU5HCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZTQ5ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9DT1BZSU5HCkBAIC0wLDAgKzEsMzQwIEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9sem8tMi4wMy9DaGFuZ2VMb2cgYi9sem8tMi4wMy9DaGFuZ2VMb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzU1ZGI3MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL0NoYW5nZUxvZwpAQCAtMCwwICsxLDMgQEAKK1NvcnJ5LCBubyBkZXRhaWxlZCBDaGFuZ2VMb2cgYXZhaWxhYmxlIHlldC4KKworUGxlYXNlIHNlZSB0aGUgZmlsZSBORVdTIGZvciBhIGxpc3Qgb2YgdXNlciB2aXNpYmxlIGNoYW5nZXMuCmRpZmYgLS1naXQgYS9sem8tMi4wMy9JTlNUQUxMIGIvbHpvLTIuMDMvSU5TVEFMTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODZlZTUwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvSU5TVEFMTApAQCAtMCwwICsxLDI2NSBAQAorSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworICBUaGlzIGluc3RhbGxhdGlvbiBndWlkZSBpcyBmb3IgUE9TSVggKEF1dG9jb25mKSBzeXN0ZW1zLgorICBGb3IgV2luMzIsIFdpbjY0LCBET1MgYW5kIE9TLzIgcGxlYXNlIHJlYWQgdGhlIGZpbGUgQi8wMFJFQURNRS5UWFQuCisKKyAgUXVpY2sgc3RhcnQKKyAgLS0tLS0tLS0tLS0KKyAgICAuL2NvbmZpZ3VyZQorICAgIG1ha2UKKyAgICBtYWtlIGNoZWNrCisgICAgbWFrZSB0ZXN0ICAgICAocnVuIGEgZnVsbCB0ZXN0KQorICAgIG1ha2UgaW5zdGFsbCAgKHdoZW4gbG9nZ2VkIGluIGFzIHJvb3QpCisKKyAgRXhvdGljIG1hY2hpbmVzCisgIC0tLS0tLS0tLS0tLS0tLQorICBJbnN0ZWFkIG9mIHVzaW5nIEF1dG9jb25mIHlvdSBtYXkgd2FudCB0byBhZGFwdCB0aGUgc2ltcGxlIGJ1aWxkCisgIHNjcmlwdCBpbiBCL2dlbmVyaWMvYnVpbGQuc2guCisKKyAgU2hhcmVkIGxpYnJhcmllcworICAtLS0tLS0tLS0tLS0tLS0tCisgIExaTyB1c2VzIExpYnRvb2wgc28gdGhhdCBzaGFyZWQgbGlicmFyaWVzIGFyZSBzdXBwb3J0ZWQgb24gbWFueQorICBzeXN0ZW1zLiBJZiB3YW50IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgdHlwZSB5b3UgaGF2ZSB0byB0eXBlCisgIGAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1zaGFyZWQnIC0gYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcyBpcyBub3QKKyAgZW5hYmxlZCBieSBkZWZhdWx0LgorCisgIEFzc2VtYmxlciB2ZXJzaW9ucworICAtLS0tLS0tLS0tLS0tLS0tLS0KKyAgT24gSW50ZWwgaTM4NiBzeXN0ZW1zLCB0aGUgYXNzZW1ibGVyIHZlcnNpb25zIG9mIHRoZSBkZWNvbXByZXNzb3JzIGFyZQorICBidWlsdCBhbmQgdXNlZCBieSBkZWZhdWx0LiBZb3UgY2FuIHVzZSBgLi9jb25maWd1cmUgLS1kaXNhYmxlLWFzbScgaWYKKyAgZm9yIHNvbWUgcmVhc29uIHRoZXkgY2F1c2UgY29tcGlsYXRpb24gcHJvYmxlbXMgb24geW91ciBzeXN0ZW0uCisKKworCitbIFRoZSBzdGFuZGFyZCBBdXRvY29uZiBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zIGZvbGxvdyBiZWxvdy4gXQorCisKKworQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBmaWxlIGlzIGZyZWUgZG9jdW1lbnRhdGlvbjsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcwordW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCitCYXNpYyBJbnN0YWxsYXRpb24KKz09PT09PT09PT09PT09PT09PQorCisgICBUaGVzZSBhcmUgZ2VuZXJpYyBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCisgICBUaGUgYGNvbmZpZ3VyZScgc2hlbGwgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGNvcnJlY3QgdmFsdWVzIGZvcgordmFyaW91cyBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyB1c2VkIGR1cmluZyBjb21waWxhdGlvbi4gIEl0IHVzZXMKK3Rob3NlIHZhbHVlcyB0byBjcmVhdGUgYSBgTWFrZWZpbGUnIGluIGVhY2ggZGlyZWN0b3J5IG9mIHRoZSBwYWNrYWdlLgorSXQgbWF5IGFsc28gY3JlYXRlIG9uZSBvciBtb3JlIGAuaCcgZmlsZXMgY29udGFpbmluZyBzeXN0ZW0tZGVwZW5kZW50CitkZWZpbml0aW9ucy4gIEZpbmFsbHksIGl0IGNyZWF0ZXMgYSBzaGVsbCBzY3JpcHQgYGNvbmZpZy5zdGF0dXMnIHRoYXQKK3lvdSBjYW4gcnVuIGluIHRoZSBmdXR1cmUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiwgYW5kIGEKK2ZpbGUgYGNvbmZpZy5sb2cnIGNvbnRhaW5pbmcgY29tcGlsZXIgb3V0cHV0ICh1c2VmdWwgbWFpbmx5IGZvcgorZGVidWdnaW5nIGBjb25maWd1cmUnKS4KKworICAgSXQgY2FuIGFsc28gdXNlIGFuIG9wdGlvbmFsIGZpbGUgKHR5cGljYWxseSBjYWxsZWQgYGNvbmZpZy5jYWNoZScKK2FuZCBlbmFibGVkIHdpdGggYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnIG9yIHNpbXBseSBgLUMnKSB0aGF0IHNhdmVzCit0aGUgcmVzdWx0cyBvZiBpdHMgdGVzdHMgdG8gc3BlZWQgdXAgcmVjb25maWd1cmluZy4gIChDYWNoaW5nIGlzCitkaXNhYmxlZCBieSBkZWZhdWx0IHRvIHByZXZlbnQgcHJvYmxlbXMgd2l0aCBhY2NpZGVudGFsIHVzZSBvZiBzdGFsZQorY2FjaGUgZmlsZXMuKQorCisgICBJZiB5b3UgbmVlZCB0byBkbyB1bnVzdWFsIHRoaW5ncyB0byBjb21waWxlIHRoZSBwYWNrYWdlLCBwbGVhc2UgdHJ5Cit0byBmaWd1cmUgb3V0IGhvdyBgY29uZmlndXJlJyBjb3VsZCBjaGVjayB3aGV0aGVyIHRvIGRvIHRoZW0sIGFuZCBtYWlsCitkaWZmcyBvciBpbnN0cnVjdGlvbnMgdG8gdGhlIGFkZHJlc3MgZ2l2ZW4gaW4gdGhlIGBSRUFETUUnIHNvIHRoZXkgY2FuCitiZSBjb25zaWRlcmVkIGZvciB0aGUgbmV4dCByZWxlYXNlLiAgSWYgeW91IGFyZSB1c2luZyB0aGUgY2FjaGUsIGFuZCBhdAorc29tZSBwb2ludCBgY29uZmlnLmNhY2hlJyBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndCB3YW50IHRvIGtlZXAsIHlvdQorbWF5IHJlbW92ZSBvciBlZGl0IGl0LgorCisgICBUaGUgZmlsZSBgY29uZmlndXJlLmFjJyAob3IgYGNvbmZpZ3VyZS5pbicpIGlzIHVzZWQgdG8gY3JlYXRlCitgY29uZmlndXJlJyBieSBhIHByb2dyYW0gY2FsbGVkIGBhdXRvY29uZicuICBZb3Ugb25seSBuZWVkCitgY29uZmlndXJlLmFjJyBpZiB5b3Ugd2FudCB0byBjaGFuZ2UgaXQgb3IgcmVnZW5lcmF0ZSBgY29uZmlndXJlJyB1c2luZworYSBuZXdlciB2ZXJzaW9uIG9mIGBhdXRvY29uZicuCisKK1RoZSBzaW1wbGVzdCB3YXkgdG8gY29tcGlsZSB0aGlzIHBhY2thZ2UgaXM6CisKKyAgMS4gYGNkJyB0byB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIHBhY2thZ2UncyBzb3VyY2UgY29kZSBhbmQgdHlwZQorICAgICBgLi9jb25maWd1cmUnIHRvIGNvbmZpZ3VyZSB0aGUgcGFja2FnZSBmb3IgeW91ciBzeXN0ZW0uICBJZiB5b3UncmUKKyAgICAgdXNpbmcgYGNzaCcgb24gYW4gb2xkIHZlcnNpb24gb2YgU3lzdGVtIFYsIHlvdSBtaWdodCBuZWVkIHRvIHR5cGUKKyAgICAgYHNoIC4vY29uZmlndXJlJyBpbnN0ZWFkIHRvIHByZXZlbnQgYGNzaCcgZnJvbSB0cnlpbmcgdG8gZXhlY3V0ZQorICAgICBgY29uZmlndXJlJyBpdHNlbGYuCisKKyAgICAgUnVubmluZyBgY29uZmlndXJlJyB0YWtlcyBhd2hpbGUuICBXaGlsZSBydW5uaW5nLCBpdCBwcmludHMgc29tZQorICAgICBtZXNzYWdlcyB0ZWxsaW5nIHdoaWNoIGZlYXR1cmVzIGl0IGlzIGNoZWNraW5nIGZvci4KKworICAyLiBUeXBlIGBtYWtlJyB0byBjb21waWxlIHRoZSBwYWNrYWdlLgorCisgIDMuIE9wdGlvbmFsbHksIHR5cGUgYG1ha2UgY2hlY2snIHRvIHJ1biBhbnkgc2VsZi10ZXN0cyB0aGF0IGNvbWUgd2l0aAorICAgICB0aGUgcGFja2FnZS4KKworICA0LiBUeXBlIGBtYWtlIGluc3RhbGwnIHRvIGluc3RhbGwgdGhlIHByb2dyYW1zIGFuZCBhbnkgZGF0YSBmaWxlcyBhbmQKKyAgICAgZG9jdW1lbnRhdGlvbi4KKworICA1LiBZb3UgY2FuIHJlbW92ZSB0aGUgcHJvZ3JhbSBiaW5hcmllcyBhbmQgb2JqZWN0IGZpbGVzIGZyb20gdGhlCisgICAgIHNvdXJjZSBjb2RlIGRpcmVjdG9yeSBieSB0eXBpbmcgYG1ha2UgY2xlYW4nLiAgVG8gYWxzbyByZW1vdmUgdGhlCisgICAgIGZpbGVzIHRoYXQgYGNvbmZpZ3VyZScgY3JlYXRlZCAoc28geW91IGNhbiBjb21waWxlIHRoZSBwYWNrYWdlIGZvcgorICAgICBhIGRpZmZlcmVudCBraW5kIG9mIGNvbXB1dGVyKSwgdHlwZSBgbWFrZSBkaXN0Y2xlYW4nLiAgVGhlcmUgaXMKKyAgICAgYWxzbyBhIGBtYWtlIG1haW50YWluZXItY2xlYW4nIHRhcmdldCwgYnV0IHRoYXQgaXMgaW50ZW5kZWQgbWFpbmx5CisgICAgIGZvciB0aGUgcGFja2FnZSdzIGRldmVsb3BlcnMuICBJZiB5b3UgdXNlIGl0LCB5b3UgbWF5IGhhdmUgdG8gZ2V0CisgICAgIGFsbCBzb3J0cyBvZiBvdGhlciBwcm9ncmFtcyBpbiBvcmRlciB0byByZWdlbmVyYXRlIGZpbGVzIHRoYXQgY2FtZQorICAgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK0NvbXBpbGVycyBhbmQgT3B0aW9ucworPT09PT09PT09PT09PT09PT09PT09CisKKyAgIFNvbWUgc3lzdGVtcyByZXF1aXJlIHVudXN1YWwgb3B0aW9ucyBmb3IgY29tcGlsYXRpb24gb3IgbGlua2luZyB0aGF0Cit0aGUgYGNvbmZpZ3VyZScgc2NyaXB0IGRvZXMgbm90IGtub3cgYWJvdXQuICBSdW4gYC4vY29uZmlndXJlIC0taGVscCcKK2ZvciBkZXRhaWxzIG9uIHNvbWUgb2YgdGhlIHBlcnRpbmVudCBlbnZpcm9ubWVudCB2YXJpYWJsZXMuCisKKyAgIFlvdSBjYW4gZ2l2ZSBgY29uZmlndXJlJyBpbml0aWFsIHZhbHVlcyBmb3IgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzCitieSBzZXR0aW5nIHZhcmlhYmxlcyBpbiB0aGUgY29tbWFuZCBsaW5lIG9yIGluIHRoZSBlbnZpcm9ubWVudC4gIEhlcmUKK2lzIGFuIGV4YW1wbGU6CisKKyAgICAgLi9jb25maWd1cmUgQ0M9Yzg5IENGTEFHUz0tTzIgTElCUz0tbHBvc2l4CisKK0NvbXBpbGluZyBGb3IgTXVsdGlwbGUgQXJjaGl0ZWN0dXJlcworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyAgIFlvdSBjYW4gY29tcGlsZSB0aGUgcGFja2FnZSBmb3IgbW9yZSB0aGFuIG9uZSBraW5kIG9mIGNvbXB1dGVyIGF0IHRoZQorc2FtZSB0aW1lLCBieSBwbGFjaW5nIHRoZSBvYmplY3QgZmlsZXMgZm9yIGVhY2ggYXJjaGl0ZWN0dXJlIGluIHRoZWlyCitvd24gZGlyZWN0b3J5LiAgVG8gZG8gdGhpcywgeW91IG11c3QgdXNlIGEgdmVyc2lvbiBvZiBgbWFrZScgdGhhdAorc3VwcG9ydHMgdGhlIGBWUEFUSCcgdmFyaWFibGUsIHN1Y2ggYXMgR05VIGBtYWtlJy4gIGBjZCcgdG8gdGhlCitkaXJlY3Rvcnkgd2hlcmUgeW91IHdhbnQgdGhlIG9iamVjdCBmaWxlcyBhbmQgZXhlY3V0YWJsZXMgdG8gZ28gYW5kIHJ1bgordGhlIGBjb25maWd1cmUnIHNjcmlwdC4gIGBjb25maWd1cmUnIGF1dG9tYXRpY2FsbHkgY2hlY2tzIGZvciB0aGUKK3NvdXJjZSBjb2RlIGluIHRoZSBkaXJlY3RvcnkgdGhhdCBgY29uZmlndXJlJyBpcyBpbiBhbmQgaW4gYC4uJy4KKworICAgSWYgeW91IGhhdmUgdG8gdXNlIGEgYG1ha2UnIHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGUgYFZQQVRIJwordmFyaWFibGUsIHlvdSBoYXZlIHRvIGNvbXBpbGUgdGhlIHBhY2thZ2UgZm9yIG9uZSBhcmNoaXRlY3R1cmUgYXQgYQordGltZSBpbiB0aGUgc291cmNlIGNvZGUgZGlyZWN0b3J5LiAgQWZ0ZXIgeW91IGhhdmUgaW5zdGFsbGVkIHRoZQorcGFja2FnZSBmb3Igb25lIGFyY2hpdGVjdHVyZSwgdXNlIGBtYWtlIGRpc3RjbGVhbicgYmVmb3JlIHJlY29uZmlndXJpbmcKK2ZvciBhbm90aGVyIGFyY2hpdGVjdHVyZS4KKworSW5zdGFsbGF0aW9uIE5hbWVzCis9PT09PT09PT09PT09PT09PT0KKworICAgQnkgZGVmYXVsdCwgYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIHRoZSBwYWNrYWdlJ3MgZmlsZXMgaW4KK2AvdXNyL2xvY2FsL2JpbicsIGAvdXNyL2xvY2FsL21hbicsIGV0Yy4gIFlvdSBjYW4gc3BlY2lmeSBhbgoraW5zdGFsbGF0aW9uIHByZWZpeCBvdGhlciB0aGFuIGAvdXNyL2xvY2FsJyBieSBnaXZpbmcgYGNvbmZpZ3VyZScgdGhlCitvcHRpb24gYC0tcHJlZml4PVBBVEgnLgorCisgICBZb3UgY2FuIHNwZWNpZnkgc2VwYXJhdGUgaW5zdGFsbGF0aW9uIHByZWZpeGVzIGZvcgorYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZpbGVzIGFuZCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMuICBJZiB5b3UKK2dpdmUgYGNvbmZpZ3VyZScgdGhlIG9wdGlvbiBgLS1leGVjLXByZWZpeD1QQVRIJywgdGhlIHBhY2thZ2Ugd2lsbCB1c2UKK1BBVEggYXMgdGhlIHByZWZpeCBmb3IgaW5zdGFsbGluZyBwcm9ncmFtcyBhbmQgbGlicmFyaWVzLgorRG9jdW1lbnRhdGlvbiBhbmQgb3RoZXIgZGF0YSBmaWxlcyB3aWxsIHN0aWxsIHVzZSB0aGUgcmVndWxhciBwcmVmaXguCisKKyAgIEluIGFkZGl0aW9uLCBpZiB5b3UgdXNlIGFuIHVudXN1YWwgZGlyZWN0b3J5IGxheW91dCB5b3UgY2FuIGdpdmUKK29wdGlvbnMgbGlrZSBgLS1iaW5kaXI9UEFUSCcgdG8gc3BlY2lmeSBkaWZmZXJlbnQgdmFsdWVzIGZvciBwYXJ0aWN1bGFyCitraW5kcyBvZiBmaWxlcy4gIFJ1biBgY29uZmlndXJlIC0taGVscCcgZm9yIGEgbGlzdCBvZiB0aGUgZGlyZWN0b3JpZXMKK3lvdSBjYW4gc2V0IGFuZCB3aGF0IGtpbmRzIG9mIGZpbGVzIGdvIGluIHRoZW0uCisKKyAgIElmIHRoZSBwYWNrYWdlIHN1cHBvcnRzIGl0LCB5b3UgY2FuIGNhdXNlIHByb2dyYW1zIHRvIGJlIGluc3RhbGxlZAord2l0aCBhbiBleHRyYSBwcmVmaXggb3Igc3VmZml4IG9uIHRoZWlyIG5hbWVzIGJ5IGdpdmluZyBgY29uZmlndXJlJyB0aGUKK29wdGlvbiBgLS1wcm9ncmFtLXByZWZpeD1QUkVGSVgnIG9yIGAtLXByb2dyYW0tc3VmZml4PVNVRkZJWCcuCisKK09wdGlvbmFsIEZlYXR1cmVzCis9PT09PT09PT09PT09PT09PQorCisgICBTb21lIHBhY2thZ2VzIHBheSBhdHRlbnRpb24gdG8gYC0tZW5hYmxlLUZFQVRVUkUnIG9wdGlvbnMgdG8KK2Bjb25maWd1cmUnLCB3aGVyZSBGRUFUVVJFIGluZGljYXRlcyBhbiBvcHRpb25hbCBwYXJ0IG9mIHRoZSBwYWNrYWdlLgorVGhleSBtYXkgYWxzbyBwYXkgYXR0ZW50aW9uIHRvIGAtLXdpdGgtUEFDS0FHRScgb3B0aW9ucywgd2hlcmUgUEFDS0FHRQoraXMgc29tZXRoaW5nIGxpa2UgYGdudS1hcycgb3IgYHgnIChmb3IgdGhlIFggV2luZG93IFN5c3RlbSkuICBUaGUKK2BSRUFETUUnIHNob3VsZCBtZW50aW9uIGFueSBgLS1lbmFibGUtJyBhbmQgYC0td2l0aC0nIG9wdGlvbnMgdGhhdCB0aGUKK3BhY2thZ2UgcmVjb2duaXplcy4KKworICAgRm9yIHBhY2thZ2VzIHRoYXQgdXNlIHRoZSBYIFdpbmRvdyBTeXN0ZW0sIGBjb25maWd1cmUnIGNhbiB1c3VhbGx5CitmaW5kIHRoZSBYIGluY2x1ZGUgYW5kIGxpYnJhcnkgZmlsZXMgYXV0b21hdGljYWxseSwgYnV0IGlmIGl0IGRvZXNuJ3QsCit5b3UgY2FuIHVzZSB0aGUgYGNvbmZpZ3VyZScgb3B0aW9ucyBgLS14LWluY2x1ZGVzPURJUicgYW5kCitgLS14LWxpYnJhcmllcz1ESVInIHRvIHNwZWNpZnkgdGhlaXIgbG9jYXRpb25zLgorCitTcGVjaWZ5aW5nIHRoZSBTeXN0ZW0gVHlwZQorPT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgVGhlcmUgbWF5IGJlIHNvbWUgZmVhdHVyZXMgYGNvbmZpZ3VyZScgY2Fubm90IGZpZ3VyZSBvdXQKK2F1dG9tYXRpY2FsbHksIGJ1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgbWFjaGluZSB0aGUgcGFja2FnZQord2lsbCBydW4gb24uICBVc3VhbGx5LCBhc3N1bWluZyB0aGUgcGFja2FnZSBpcyBidWlsdCB0byBiZSBydW4gb24gdGhlCitfc2FtZV8gYXJjaGl0ZWN0dXJlcywgYGNvbmZpZ3VyZScgY2FuIGZpZ3VyZSB0aGF0IG91dCwgYnV0IGlmIGl0IHByaW50cworYSBtZXNzYWdlIHNheWluZyBpdCBjYW5ub3QgZ3Vlc3MgdGhlIG1hY2hpbmUgdHlwZSwgZ2l2ZSBpdCB0aGUKK2AtLWJ1aWxkPVRZUEUnIG9wdGlvbi4gIFRZUEUgY2FuIGVpdGhlciBiZSBhIHNob3J0IG5hbWUgZm9yIHRoZSBzeXN0ZW0KK3R5cGUsIHN1Y2ggYXMgYHN1bjQnLCBvciBhIGNhbm9uaWNhbCBuYW1lIHdoaWNoIGhhcyB0aGUgZm9ybToKKworICAgICBDUFUtQ09NUEFOWS1TWVNURU0KKword2hlcmUgU1lTVEVNIGNhbiBoYXZlIG9uZSBvZiB0aGVzZSBmb3JtczoKKworICAgICBPUyBLRVJORUwtT1MKKworICAgU2VlIHRoZSBmaWxlIGBjb25maWcuc3ViJyBmb3IgdGhlIHBvc3NpYmxlIHZhbHVlcyBvZiBlYWNoIGZpZWxkLiAgSWYKK2Bjb25maWcuc3ViJyBpc24ndCBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UsIHRoZW4gdGhpcyBwYWNrYWdlIGRvZXNuJ3QKK25lZWQgdG8ga25vdyB0aGUgbWFjaGluZSB0eXBlLgorCisgICBJZiB5b3UgYXJlIF9idWlsZGluZ18gY29tcGlsZXIgdG9vbHMgZm9yIGNyb3NzLWNvbXBpbGluZywgeW91IHNob3VsZAordXNlIHRoZSBgLS10YXJnZXQ9VFlQRScgb3B0aW9uIHRvIHNlbGVjdCB0aGUgdHlwZSBvZiBzeXN0ZW0gdGhleSB3aWxsCitwcm9kdWNlIGNvZGUgZm9yLgorCisgICBJZiB5b3Ugd2FudCB0byBfdXNlXyBhIGNyb3NzIGNvbXBpbGVyLCB0aGF0IGdlbmVyYXRlcyBjb2RlIGZvciBhCitwbGF0Zm9ybSBkaWZmZXJlbnQgZnJvbSB0aGUgYnVpbGQgcGxhdGZvcm0sIHlvdSBzaG91bGQgc3BlY2lmeSB0aGUKKyJob3N0IiBwbGF0Zm9ybSAoaS5lLiwgdGhhdCBvbiB3aGljaCB0aGUgZ2VuZXJhdGVkIHByb2dyYW1zIHdpbGwKK2V2ZW50dWFsbHkgYmUgcnVuKSB3aXRoIGAtLWhvc3Q9VFlQRScuCisKK1NoYXJpbmcgRGVmYXVsdHMKKz09PT09PT09PT09PT09PT0KKworICAgSWYgeW91IHdhbnQgdG8gc2V0IGRlZmF1bHQgdmFsdWVzIGZvciBgY29uZmlndXJlJyBzY3JpcHRzIHRvIHNoYXJlLAoreW91IGNhbiBjcmVhdGUgYSBzaXRlIHNoZWxsIHNjcmlwdCBjYWxsZWQgYGNvbmZpZy5zaXRlJyB0aGF0IGdpdmVzCitkZWZhdWx0IHZhbHVlcyBmb3IgdmFyaWFibGVzIGxpa2UgYENDJywgYGNhY2hlX2ZpbGUnLCBhbmQgYHByZWZpeCcuCitgY29uZmlndXJlJyBsb29rcyBmb3IgYFBSRUZJWC9zaGFyZS9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLCB0aGVuCitgUFJFRklYL2V0Yy9jb25maWcuc2l0ZScgaWYgaXQgZXhpc3RzLiAgT3IsIHlvdSBjYW4gc2V0IHRoZQorYENPTkZJR19TSVRFJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgbG9jYXRpb24gb2YgdGhlIHNpdGUgc2NyaXB0LgorQSB3YXJuaW5nOiBub3QgYWxsIGBjb25maWd1cmUnIHNjcmlwdHMgbG9vayBmb3IgYSBzaXRlIHNjcmlwdC4KKworRGVmaW5pbmcgVmFyaWFibGVzCis9PT09PT09PT09PT09PT09PT0KKworICAgVmFyaWFibGVzIG5vdCBkZWZpbmVkIGluIGEgc2l0ZSBzaGVsbCBzY3JpcHQgY2FuIGJlIHNldCBpbiB0aGUKK2Vudmlyb25tZW50IHBhc3NlZCB0byBgY29uZmlndXJlJy4gIEhvd2V2ZXIsIHNvbWUgcGFja2FnZXMgbWF5IHJ1bgorY29uZmlndXJlIGFnYWluIGR1cmluZyB0aGUgYnVpbGQsIGFuZCB0aGUgY3VzdG9taXplZCB2YWx1ZXMgb2YgdGhlc2UKK3ZhcmlhYmxlcyBtYXkgYmUgbG9zdC4gIEluIG9yZGVyIHRvIGF2b2lkIHRoaXMgcHJvYmxlbSwgeW91IHNob3VsZCBzZXQKK3RoZW0gaW4gdGhlIGBjb25maWd1cmUnIGNvbW1hbmQgbGluZSwgdXNpbmcgYFZBUj12YWx1ZScuICBGb3IgZXhhbXBsZToKKworICAgICAuL2NvbmZpZ3VyZSBDQz0vdXNyL2xvY2FsMi9iaW4vZ2NjCisKK3dpbGwgY2F1c2UgdGhlIHNwZWNpZmllZCBnY2MgdG8gYmUgdXNlZCBhcyB0aGUgQyBjb21waWxlciAodW5sZXNzIGl0IGlzCitvdmVycmlkZGVuIGluIHRoZSBzaXRlIHNoZWxsIHNjcmlwdCkuCisKK2Bjb25maWd1cmUnIEludm9jYXRpb24KKz09PT09PT09PT09PT09PT09PT09PT0KKworICAgYGNvbmZpZ3VyZScgcmVjb2duaXplcyB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29udHJvbCBob3cgaXQKK29wZXJhdGVzLgorCitgLS1oZWxwJworYC1oJworICAgICBQcmludCBhIHN1bW1hcnkgb2YgdGhlIG9wdGlvbnMgdG8gYGNvbmZpZ3VyZScsIGFuZCBleGl0LgorCitgLS12ZXJzaW9uJworYC1WJworICAgICBQcmludCB0aGUgdmVyc2lvbiBvZiBBdXRvY29uZiB1c2VkIHRvIGdlbmVyYXRlIHRoZSBgY29uZmlndXJlJworICAgICBzY3JpcHQsIGFuZCBleGl0LgorCitgLS1jYWNoZS1maWxlPUZJTEUnCisgICAgIEVuYWJsZSB0aGUgY2FjaGU6IHVzZSBhbmQgc2F2ZSB0aGUgcmVzdWx0cyBvZiB0aGUgdGVzdHMgaW4gRklMRSwKKyAgICAgdHJhZGl0aW9uYWxseSBgY29uZmlnLmNhY2hlJy4gIEZJTEUgZGVmYXVsdHMgdG8gYC9kZXYvbnVsbCcgdG8KKyAgICAgZGlzYWJsZSBjYWNoaW5nLgorCitgLS1jb25maWctY2FjaGUnCitgLUMnCisgICAgIEFsaWFzIGZvciBgLS1jYWNoZS1maWxlPWNvbmZpZy5jYWNoZScuCisKK2AtLXF1aWV0JworYC0tc2lsZW50JworYC1xJworICAgICBEbyBub3QgcHJpbnQgbWVzc2FnZXMgc2F5aW5nIHdoaWNoIGNoZWNrcyBhcmUgYmVpbmcgbWFkZS4gIFRvCisgICAgIHN1cHByZXNzIGFsbCBub3JtYWwgb3V0cHV0LCByZWRpcmVjdCBpdCB0byBgL2Rldi9udWxsJyAoYW55IGVycm9yCisgICAgIG1lc3NhZ2VzIHdpbGwgc3RpbGwgYmUgc2hvd24pLgorCitgLS1zcmNkaXI9RElSJworICAgICBMb29rIGZvciB0aGUgcGFja2FnZSdzIHNvdXJjZSBjb2RlIGluIGRpcmVjdG9yeSBESVIuICBVc3VhbGx5CisgICAgIGBjb25maWd1cmUnIGNhbiBkZXRlcm1pbmUgdGhhdCBkaXJlY3RvcnkgYXV0b21hdGljYWxseS4KKworYGNvbmZpZ3VyZScgYWxzbyBhY2NlcHRzIHNvbWUgb3RoZXIsIG5vdCB3aWRlbHkgdXNlZnVsLCBvcHRpb25zLiAgUnVuCitgY29uZmlndXJlIC0taGVscCcgZm9yIG1vcmUgZGV0YWlscy4KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvTWFrZWZpbGUuYW0gYi9sem8tMi4wMy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Nzk5NTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw1MiBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworQVVUT01BS0VfT1BUSU9OUyA9IDEuOS42IGdudQorCitTVUJESVJTID0gaW5jbHVkZSBzcmMgbHpvdGVzdCBleGFtcGxlcyB0ZXN0cyBtaW5pbHpvCisKK0VYVFJBX0RJU1QgPSBCVUdTCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gYXV0b21ha2UgdGFyZ2V0cworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2Rpc3QtaG9vazoKKwktcm0gLXJmICIuLyQoZGlzdGRpcikvYXV0b2NvbmYvIgorCWNwIC1wUiAkKHNyY2RpcikvQi8gJChzcmNkaXIpL2FzbS8gJChzcmNkaXIpL2F1dG9jb25mLyAkKHNyY2RpcikvZG9jLyAkKHNyY2RpcikvdXRpbC8gIiQoZGlzdGRpcikvIgorCS1ybSAtZiBgZmluZCAiLi8kKGRpc3RkaXIpLyIgLXR5cGUgbCAtcHJpbnRgCisJLXJtIC1mIC4vJChkaXN0ZGlyKS91dGlsLyouZGF0CisKK2NoZWNrLWxvY2FsOiBhbGwtYW0KKwkuL2x6b3Rlc3QvbHpvdGVzdCAtbWx6byAtbjIgLXEgJCh0b3Bfc3JjZGlyKS9DT1BZSU5HCisJQGVjaG8KKwlAZWNobyAiQWxsIGNoZWNrcyBwYXNzZWQuIgorCUBlY2hvCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3BlY2lhbCB0YXJnZXRzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworYmFzaWMtdGVzdDogYWxsCisJLi9sem90ZXN0L2x6b3Rlc3QgLW1sem8gLW4yIC1xICQodG9wX3NyY2RpcikvQ09QWUlORworCS4vdGVzdHMvYWxpZ24KKwkuL3Rlc3RzL2Noa3N1bQorCS4vZXhhbXBsZXMvc2ltcGxlCisJLi9taW5pbHpvL3Rlc3RtaW5pCisKK3Rlc3Q6IGFsbAorCS4vbHpvdGVzdC9sem90ZXN0IC1tYXZhaWwgLW4xMCAtcSAkKHRvcF9zcmNkaXIpL0NPUFlJTkcKKwkkKFNIRUxMKSAtZSAkKHRvcF9zcmNkaXIpL3V0aWwvY2hlY2suc2ggJCh0b3Bfc3JjZGlyKQorCS4vdGVzdHMvYWxpZ24KKwkuL3Rlc3RzL2Noa3N1bQorCS4vZXhhbXBsZXMvc2ltcGxlCisJLi9taW5pbHpvL3Rlc3RtaW5pCisJQGVjaG8KKwlAZWNobyAiQWxsIHRlc3RzIHBhc3NlZC4gTm93IHlvdSBhcmUgcmVhZHkgdG8gaW5zdGFsbCBMWk8uIgorCUBlY2hvCisKK0BNQUlOVEAtaW5jbHVkZSAkKHRvcF9zcmNkaXIpL01ha2VmaWxlLm1haW50CmRpZmYgLS1naXQgYS9sem8tMi4wMy9NYWtlZmlsZS5pbiBiL2x6by0yLjAzL01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZTVhYzcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDY3OSBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK0RJU1RfQ09NTU9OID0gUkVBRE1FICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gXAorCSQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHNyY2RpcikvY29uZmlnLmhpbiBcCisJJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgQVVUSE9SUyBDT1BZSU5HIENoYW5nZUxvZyBJTlNUQUxMIE5FV1MgXAorCVRIQU5LUyBhdXRvY29uZi9jb21waWxlIGF1dG9jb25mL2NvbmZpZy5ndWVzcyBcCisJYXV0b2NvbmYvY29uZmlnLnJwYXRoIGF1dG9jb25mL2NvbmZpZy5zdWIgYXV0b2NvbmYvZGVwY29tcCBcCisJYXV0b2NvbmYvaW5zdGFsbC1zaCBhdXRvY29uZi9sdG1haW4uc2ggYXV0b2NvbmYvbWRhdGUtc2ggXAorCWF1dG9jb25mL21pc3NpbmcgYXV0b2NvbmYvbWtpbnN0YWxsZGlycyBhdXRvY29uZi9weS1jb21waWxlIFwKKwlhdXRvY29uZi95bHdyYXAKK3N1YmRpciA9IC4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCithbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUyA9IGNvbmZpZy5zdGF0dXMgY29uZmlnLmNhY2hlIGNvbmZpZy5sb2cgXAorIGNvbmZpZ3VyZS5saW5lbm8gY29uZmlndXJlLnN0YXR1cy5saW5lbm8KK21raW5zdGFsbGRpcnMgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2F1dG9jb25mL21raW5zdGFsbGRpcnMKK0NPTkZJR19IRUFERVIgPSBjb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1NPVVJDRVMgPQorRElTVF9TT1VSQ0VTID0KK1JFQ1VSU0lWRV9UQVJHRVRTID0gYWxsLXJlY3Vyc2l2ZSBjaGVjay1yZWN1cnNpdmUgZHZpLXJlY3Vyc2l2ZSBcCisJaHRtbC1yZWN1cnNpdmUgaW5mby1yZWN1cnNpdmUgaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZSBcCisJaW5zdGFsbC1leGVjLXJlY3Vyc2l2ZSBpbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwlpbnN0YWxsLXJlY3Vyc2l2ZSBpbnN0YWxsY2hlY2stcmVjdXJzaXZlIGluc3RhbGxkaXJzLXJlY3Vyc2l2ZSBcCisJcGRmLXJlY3Vyc2l2ZSBwcy1yZWN1cnNpdmUgdW5pbnN0YWxsLWluZm8tcmVjdXJzaXZlIFwKKwl1bmluc3RhbGwtcmVjdXJzaXZlCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNUX1NVQkRJUlMgPSAkKFNVQkRJUlMpCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorZGlzdGRpciA9ICQoUEFDS0FHRSktJChWRVJTSU9OKQordG9wX2Rpc3RkaXIgPSAkKGRpc3RkaXIpCithbV9fcmVtb3ZlX2Rpc3RkaXIgPSBcCisgIHsgdGVzdCAhIC1kICQoZGlzdGRpcikgXAorICAgIHx8IHsgZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtMjAwIC1leGVjIGNobW9kIHUrdyB7fSAnOycgXAorICAgICAgICAgJiYgcm0gLWZyICQoZGlzdGRpcik7IH07IH0KK0RJU1RfQVJDSElWRVMgPSAkKGRpc3RkaXIpLnRhci5negorR1pJUF9FTlYgPSAtLWJlc3QKK2Rpc3R1bmluc3RhbGxjaGVja19saXN0ZmlsZXMgPSBmaW5kIC4gLXR5cGUgZiAtcHJpbnQKK2Rpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcyA9IGZpbmQgLiAtdHlwZSBmIC1wcmludAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMWk9fQVNNX1ZQQVRIID0gQExaT19BU01fVlBBVEhACitMWk9fQ0ZMQUdTID0gQExaT19DRkxBR1NACitMWk9fQ1BQRkxBR1MgPSBATFpPX0NQUEZMQUdTQAorTFpPX0VYVFJBX0NGTEFHUyA9IEBMWk9fRVhUUkFfQ0ZMQUdTQAorTFpPX0VYVFJBX0NQUEZMQUdTID0gQExaT19FWFRSQV9DUFBGTEFHU0AKK0xaT19VU0VfQVNNX0ZBTFNFID0gQExaT19VU0VfQVNNX0ZBTFNFQAorTFpPX1VTRV9BU01fVFJVRSA9IEBMWk9fVVNFX0FTTV9UUlVFQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK09CSkVYVCA9IEBPQkpFWFRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKK2FjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAorYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitjb25maWd1cmVfQ0ZMQUdTID0gQGNvbmZpZ3VyZV9DRkxBR1NACitjb25maWd1cmVfQ1BQRkxBR1MgPSBAY29uZmlndXJlX0NQUEZMQUdTQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACitBVVRPTUFLRV9PUFRJT05TID0gMS45LjYgZ251CitTVUJESVJTID0gaW5jbHVkZSBzcmMgbHpvdGVzdCBleGFtcGxlcyB0ZXN0cyBtaW5pbHpvCitFWFRSQV9ESVNUID0gQlVHUworYWxsOiBjb25maWcuaAorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFsbC1yZWN1cnNpdmUKKworLlNVRkZJWEVTOgorYW0tLXJlZnJlc2g6CisJQDoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGVjaG8gJyBjZCAkKHNyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgJzsgXAorCSAgICAgIGNkICQoc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBNYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBNYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGVjaG8gJyAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMnOyBcCisJICAgICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1czs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQoc3JjZGlyKSAmJiAkKEFVVE9DT05GKQorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJChzcmNkaXIpICYmICQoQUNMT0NBTCkgJChBQ0xPQ0FMX0FNRkxBR1MpCisKK2NvbmZpZy5oOiBzdGFtcC1oMQorCUBpZiB0ZXN0ICEgLWYgJEA7IHRoZW4gXAorCSAgcm0gLWYgc3RhbXAtaDE7IFwKKwkgICQoTUFLRSkgc3RhbXAtaDE7IFwKKwllbHNlIDo7IGZpCisKK3N0YW1wLWgxOiAkKHNyY2RpcikvY29uZmlnLmhpbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBybSAtZiBzdGFtcC1oMQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKKyQoc3JjZGlyKS9jb25maWcuaGluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKSAKKwljZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT0hFQURFUikKKwlybSAtZiBzdGFtcC1oMQorCXRvdWNoICRACisKK2Rpc3RjbGVhbi1oZHI6CisJLXJtIC1mIGNvbmZpZy5oIHN0YW1wLWgxCisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKKworIyBUaGlzIGRpcmVjdG9yeSdzIHN1YmRpcmVjdG9yaWVzIGFyZSBtb3N0bHkgaW5kZXBlbmRlbnQ7IHlvdSBjYW4gY2QKKyMgaW50byB0aGVtIGFuZCBydW4gYG1ha2UnIHdpdGhvdXQgZ29pbmcgdGhyb3VnaCB0aGlzIE1ha2VmaWxlLgorIyBUbyBjaGFuZ2UgdGhlIHZhbHVlcyBvZiBgbWFrZScgdmFyaWFibGVzOiBpbnN0ZWFkIG9mIGVkaXRpbmcgTWFrZWZpbGVzLAorIyAoMSkgaWYgdGhlIHZhcmlhYmxlIGlzIHNldCBpbiBgY29uZmlnLnN0YXR1cycsIGVkaXQgYGNvbmZpZy5zdGF0dXMnCisjICAgICAod2hpY2ggd2lsbCBjYXVzZSB0aGUgTWFrZWZpbGVzIHRvIGJlIHJlZ2VuZXJhdGVkIHdoZW4geW91IHJ1biBgbWFrZScpOworIyAoMikgb3RoZXJ3aXNlLCBwYXNzIHRoZSBkZXNpcmVkIHZhbHVlcyBvbiB0aGUgYG1ha2UnIGNvbW1hbmQgbGluZS4KKyQoUkVDVVJTSVZFX1RBUkdFVFMpOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJdGFyZ2V0PWBlY2hvICRAIHwgc2VkIHMvLXJlY3Vyc2l2ZS8vYDsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgZG90X3NlZW49eWVzOyBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQtYW0iOyBcCisJICBlbHNlIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldCI7IFwKKwkgIGZpOyBcCisJICAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgJCRsb2NhbF90YXJnZXQpIFwKKwkgIHx8IGV2YWwgJCRmYWlsY29tOyBcCisJZG9uZTsgXAorCWlmIHRlc3QgIiQkZG90X3NlZW4iID0gIm5vIjsgdGhlbiBcCisJICAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAiJCR0YXJnZXQtYW0iIHx8IGV4aXQgMTsgXAorCWZpOyB0ZXN0IC16ICIkJGZhaWwiCisKK21vc3RseWNsZWFuLXJlY3Vyc2l2ZSBjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXJlY3Vyc2l2ZSBcCittYWludGFpbmVyLWNsZWFuLXJlY3Vyc2l2ZToKKwlAZmFpbGNvbT0nZXhpdCAxJzsgXAorCWZvciBmIGluIHggJCRNQUtFRkxBR1M7IGRvIFwKKwkgIGNhc2UgJCRmIGluIFwKKwkgICAgKj0qIHwgLS1bIWtdKik7OyBcCisJICAgICprKikgZmFpbGNvbT0nZmFpbD15ZXMnOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwlkb3Rfc2Vlbj1ubzsgXAorCWNhc2UgIiRAIiBpbiBcCisJICBkaXN0Y2xlYW4tKiB8IG1haW50YWluZXItY2xlYW4tKikgbGlzdD0nJChESVNUX1NVQkRJUlMpJyA7OyBcCisJICAqKSBsaXN0PSckKFNVQkRJUlMpJyA7OyBcCisJZXNhYzsgXAorCXJldj0nJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIGlmIHRlc3QgIiQkc3ViZGlyIiA9ICIuIjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgcmV2PSIkJHN1YmRpciAkJHJldiI7IFwKKwkgIGZpOyBcCisJZG9uZTsgXAorCXJldj0iJCRyZXYgLiI7IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJZm9yIHN1YmRpciBpbiAkJHJldjsgZG8gXAorCSAgZWNobyAiTWFraW5nICQkdGFyZ2V0IGluICQkc3ViZGlyIjsgXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lICYmIHRlc3QgLXogIiQkZmFpbCIKK3RhZ3MtcmVjdXJzaXZlOgorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgdGVzdCAiJCRzdWJkaXIiID0gLiB8fCAoY2QgJCRzdWJkaXIgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgdGFncyk7IFwKKwlkb25lCitjdGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjdGFncyk7IFwKKwlkb25lCisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogdGFncy1yZWN1cnNpdmUgJChIRUFERVJTKSAkKFNPVVJDRVMpIGNvbmZpZy5oaW4gJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlpZiAoJChFVEFHUykgLS1ldGFncy1pbmNsdWRlIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0tZXRhZ3MtaW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PS47IFwKKwllbHNlIFwKKwkgIGluY2x1ZGVfb3B0aW9uPS0taW5jbHVkZTsgXAorCSAgZW1wdHlfZml4PTsgXAorCWZpOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0ICEgLWYgJCRzdWJkaXIvVEFHUyB8fCBcCisJICAgICAgdGFncz0iJCR0YWdzICQkaW5jbHVkZV9vcHRpb249JCRoZXJlLyQkc3ViZGlyL1RBR1MiOyBcCisJICBmaTsgXAorCWRvbmU7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgY29uZmlnLmhpbiAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgY29uZmlnLmhpbiAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSBjb25maWcuaGluICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpCisJJChta2Rpcl9wKSAkKGRpc3RkaXIpL2F1dG9jb25mCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgdG9wX2Rpc3RkaXI9IiQodG9wX2Rpc3RkaXIpIiBkaXN0ZGlyPSIkKGRpc3RkaXIpIiBcCisJICBkaXN0LWhvb2sKKwktZmluZCAkKGRpc3RkaXIpIC10eXBlIGQgISAtcGVybSAtNzc3IC1leGVjIGNobW9kIGErcnd4IHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWxpbmtzIDEgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00MDAgLWV4ZWMgY2htb2QgYStyIHt9IFw7IC1vIFwKKwkgICEgLXR5cGUgZCAhIC1wZXJtIC00NDQgLWV4ZWMgJChTSEVMTCkgJChpbnN0YWxsX3NoKSAtYyAtbSBhK3Ige30ge30gXDsgXAorCXx8IGNobW9kIC1SIGErciAkKGRpc3RkaXIpCitkaXN0LWd6aXA6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCitkaXN0LWJ6aXAyOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGJ6aXAyIC05IC1jID4kKGRpc3RkaXIpLnRhci5iejIKKwkkKGFtX19yZW1vdmVfZGlzdGRpcikKKworZGlzdC10YXJaOiBkaXN0ZGlyCisJdGFyZGlyPSQoZGlzdGRpcikgJiYgJChhbV9fdGFyKSB8IGNvbXByZXNzIC1jID4kKGRpc3RkaXIpLnRhci5aCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3Qtc2hhcjogZGlzdGRpcgorCXNoYXIgJChkaXN0ZGlyKSB8IEdaSVA9JChHWklQX0VOVikgZ3ppcCAtYyA+JChkaXN0ZGlyKS5zaGFyLmd6CisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QtemlwOiBkaXN0ZGlyCisJLXJtIC1mICQoZGlzdGRpcikuemlwCisJemlwIC1ycSAkKGRpc3RkaXIpLnppcCAkKGRpc3RkaXIpCisJJChhbV9fcmVtb3ZlX2Rpc3RkaXIpCisKK2Rpc3QgZGlzdC1hbGw6IGRpc3RkaXIKKwl0YXJkaXI9JChkaXN0ZGlyKSAmJiAkKGFtX190YXIpIHwgR1pJUD0kKEdaSVBfRU5WKSBnemlwIC1jID4kKGRpc3RkaXIpLnRhci5negorCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCisjIFRoaXMgdGFyZ2V0IHVudGFycyB0aGUgZGlzdCBmaWxlIGFuZCB0cmllcyBhIFZQQVRIIGNvbmZpZ3VyYXRpb24uICBUaGVuCisjIGl0IGd1YXJhbnRlZXMgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGlzIHNlbGYtY29udGFpbmVkIGJ5IG1ha2luZyBhbm90aGVyCisjIHRhcmZpbGUuCitkaXN0Y2hlY2s6IGRpc3QKKwljYXNlICckKERJU1RfQVJDSElWRVMpJyBpbiBcCisJKi50YXIuZ3oqKSBcCisJICBHWklQPSQoR1pJUF9FTlYpIGd1bnppcCAtYyAkKGRpc3RkaXIpLnRhci5neiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5iejIqKSBcCisJICBidW56aXAyIC1jICQoZGlzdGRpcikudGFyLmJ6MiB8ICQoYW1fX3VudGFyKSA7O1wKKwkqLnRhci5aKikgXAorCSAgdW5jb21wcmVzcyAtYyAkKGRpc3RkaXIpLnRhci5aIHwgJChhbV9fdW50YXIpIDs7XAorCSouc2hhci5neiopIFwKKwkgIEdaSVA9JChHWklQX0VOVikgZ3VuemlwIC1jICQoZGlzdGRpcikuc2hhci5neiB8IHVuc2hhciA7O1wKKwkqLnppcCopIFwKKwkgIHVuemlwICQoZGlzdGRpcikuemlwIDs7XAorCWVzYWMKKwljaG1vZCAtUiBhLXcgJChkaXN0ZGlyKTsgY2htb2QgYSt3ICQoZGlzdGRpcikKKwlta2RpciAkKGRpc3RkaXIpL19idWlsZAorCW1rZGlyICQoZGlzdGRpcikvX2luc3QKKwljaG1vZCBhLXcgJChkaXN0ZGlyKQorCWRjX2luc3RhbGxfYmFzZT1gJChhbV9fY2QpICQoZGlzdGRpcikvX2luc3QgJiYgcHdkIHwgc2VkIC1lICdzLF5bXjpcXC9dOltcXC9dLC8sJ2AgXAorCSAgJiYgZGNfZGVzdGRpcj0iJCR7VE1QRElSLS90bXB9L2FtLWRjLSQkJCQvIiBcCisJICAmJiBjZCAkKGRpc3RkaXIpL19idWlsZCBcCisJICAmJiAuLi9jb25maWd1cmUgLS1zcmNkaXI9Li4gLS1wcmVmaXg9IiQkZGNfaW5zdGFsbF9iYXNlIiBcCisJICAgICQoRElTVENIRUNLX0NPTkZJR1VSRV9GTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZHZpIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbGNoZWNrIFwKKwkgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIHVuaW5zdGFsbCBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0dW5pbnN0YWxsY2hlY2tfZGlyPSIkJGRjX2luc3RhbGxfYmFzZSIgXAorCSAgICAgICAgZGlzdHVuaW5zdGFsbGNoZWNrIFwKKwkgICYmIGNobW9kIC1SIGEtdyAiJCRkY19pbnN0YWxsX2Jhc2UiIFwKKwkgICYmICh7IFwKKwkgICAgICAgKGNkIC4uLy4uICYmIHVtYXNrIDA3NyAmJiBta2RpciAiJCRkY19kZXN0ZGlyIikgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIGluc3RhbGwgXAorCSAgICAgICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBERVNURElSPSIkJGRjX2Rlc3RkaXIiIHVuaW5zdGFsbCBcCisJICAgICAgICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIERFU1RESVI9IiQkZGNfZGVzdGRpciIgXAorCSAgICAgICAgICAgIGRpc3R1bmluc3RhbGxjaGVja19kaXI9IiQkZGNfZGVzdGRpciIgZGlzdHVuaW5zdGFsbGNoZWNrOyBcCisJICAgICAgfSB8fCB7IHJtIC1yZiAiJCRkY19kZXN0ZGlyIjsgZXhpdCAxOyB9KSBcCisJICAmJiBybSAtcmYgIiQkZGNfZGVzdGRpciIgXAorCSAgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgZGlzdCBcCisJICAmJiBybSAtcmYgJChESVNUX0FSQ0hJVkVTKSBcCisJICAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBkaXN0Y2xlYW5jaGVjaworCSQoYW1fX3JlbW92ZV9kaXN0ZGlyKQorCUAoZWNobyAiJChkaXN0ZGlyKSBhcmNoaXZlcyByZWFkeSBmb3IgZGlzdHJpYnV0aW9uOiAiOyBcCisJICBsaXN0PSckKERJU1RfQVJDSElWRVMpJzsgZm9yIGkgaW4gJCRsaXN0OyBkbyBlY2hvICQkaTsgZG9uZSkgfCBcCisJICBzZWQgLWUgJzF7aDtzLy4vPS9nO3A7eDt9JyAtZSAnJCR7cDt4O30nCitkaXN0dW5pbnN0YWxsY2hlY2s6CisJQGNkICQoZGlzdHVuaW5zdGFsbGNoZWNrX2RpcikgXAorCSYmIHRlc3QgYCQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgfCB3YyAtbGAgLWxlIDEgXAorCSAgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgYWZ0ZXIgdW5pbnN0YWxsOiIgOyBcCisJICAgICAgICBpZiB0ZXN0IC1uICIkKERFU1RESVIpIjsgdGhlbiBcCisJICAgICAgICAgIGVjaG8gIiAgKGNoZWNrIERFU1RESVIgc3VwcG9ydCkiOyBcCisJICAgICAgICBmaSA7IFwKKwkgICAgICAgICQoZGlzdHVuaW5zdGFsbGNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgICBleGl0IDE7IH0gPiYyCitkaXN0Y2xlYW5jaGVjazogZGlzdGNsZWFuCisJQGlmIHRlc3QgJyQoc3JjZGlyKScgPSAuIDsgdGhlbiBcCisJICBlY2hvICJFUlJPUjogZGlzdGNsZWFuY2hlY2sgY2FuIG9ubHkgcnVuIGZyb20gYSBWUEFUSCBidWlsZCIgOyBcCisJICBleGl0IDEgOyBcCisJZmkKKwlAdGVzdCBgJChkaXN0Y2xlYW5jaGVja19saXN0ZmlsZXMpIHwgd2MgLWxgIC1lcSAwIFwKKwkgIHx8IHsgZWNobyAiRVJST1I6IGZpbGVzIGxlZnQgaW4gYnVpbGQgZGlyZWN0b3J5IGFmdGVyIGRpc3RjbGVhbjoiIDsgXAorCSAgICAgICAkKGRpc3RjbGVhbmNoZWNrX2xpc3RmaWxlcykgOyBcCisJICAgICAgIGV4aXQgMTsgfSA+JjIKK2NoZWNrLWFtOiBhbGwtYW0KKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBjaGVjay1sb2NhbAorY2hlY2s6IGNoZWNrLXJlY3Vyc2l2ZQorYWxsLWFtOiBNYWtlZmlsZSBjb25maWcuaAoraW5zdGFsbGRpcnM6IGluc3RhbGxkaXJzLXJlY3Vyc2l2ZQoraW5zdGFsbGRpcnMtYW06CitpbnN0YWxsOiBpbnN0YWxsLXJlY3Vyc2l2ZQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1yZWN1cnNpdmUKK3VuaW5zdGFsbDogdW5pbnN0YWxsLXJlY3Vyc2l2ZQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1yZWN1cnNpdmUKK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tcmVjdXJzaXZlCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tcmVjdXJzaXZlCisJLXJtIC1mICQoYW1fX0NPTkZJR19ESVNUQ0xFQU5fRklMRVMpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1oZHIgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgJChhbV9fQ09ORklHX0RJU1RDTEVBTl9GSUxFUykKKwktcm0gLXJmICQodG9wX3NyY2RpcikvYXV0b200dGUuY2FjaGUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gYW0tLXJlZnJlc2ggY2hlY2sgXAorCWNoZWNrLWFtIGNoZWNrLWxvY2FsIGNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBcCisJY2xlYW4tcmVjdXJzaXZlIGN0YWdzIGN0YWdzLXJlY3Vyc2l2ZSBkaXN0IGRpc3QtYWxsIGRpc3QtYnppcDIgXAorCWRpc3QtZ3ppcCBkaXN0LWhvb2sgZGlzdC1zaGFyIGRpc3QtdGFyWiBkaXN0LXppcCBkaXN0Y2hlY2sgXAorCWRpc3RjbGVhbiBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4taGRyIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tcmVjdXJzaXZlIGRpc3RjbGVhbi10YWdzIGRpc3RjbGVhbmNoZWNrIGRpc3RkaXIgXAorCWRpc3R1bmluc3RhbGxjaGVjayBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgXAorCW1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIG1vc3RseWNsZWFuIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wgbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdGFncy1yZWN1cnNpdmUgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbQorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIGF1dG9tYWtlIHRhcmdldHMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkaXN0LWhvb2s6CisJLXJtIC1yZiAiLi8kKGRpc3RkaXIpL2F1dG9jb25mLyIKKwljcCAtcFIgJChzcmNkaXIpL0IvICQoc3JjZGlyKS9hc20vICQoc3JjZGlyKS9hdXRvY29uZi8gJChzcmNkaXIpL2RvYy8gJChzcmNkaXIpL3V0aWwvICIkKGRpc3RkaXIpLyIKKwktcm0gLWYgYGZpbmQgIi4vJChkaXN0ZGlyKS8iIC10eXBlIGwgLXByaW50YAorCS1ybSAtZiAuLyQoZGlzdGRpcikvdXRpbC8qLmRhdAorCitjaGVjay1sb2NhbDogYWxsLWFtCisJLi9sem90ZXN0L2x6b3Rlc3QgLW1sem8gLW4yIC1xICQodG9wX3NyY2RpcikvQ09QWUlORworCUBlY2hvCisJQGVjaG8gIkFsbCBjaGVja3MgcGFzc2VkLiIKKwlAZWNobworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBzcGVjaWFsIHRhcmdldHMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitiYXNpYy10ZXN0OiBhbGwKKwkuL2x6b3Rlc3QvbHpvdGVzdCAtbWx6byAtbjIgLXEgJCh0b3Bfc3JjZGlyKS9DT1BZSU5HCisJLi90ZXN0cy9hbGlnbgorCS4vdGVzdHMvY2hrc3VtCisJLi9leGFtcGxlcy9zaW1wbGUKKwkuL21pbmlsem8vdGVzdG1pbmkKKwordGVzdDogYWxsCisJLi9sem90ZXN0L2x6b3Rlc3QgLW1hdmFpbCAtbjEwIC1xICQodG9wX3NyY2RpcikvQ09QWUlORworCSQoU0hFTEwpIC1lICQodG9wX3NyY2RpcikvdXRpbC9jaGVjay5zaCAkKHRvcF9zcmNkaXIpCisJLi90ZXN0cy9hbGlnbgorCS4vdGVzdHMvY2hrc3VtCisJLi9leGFtcGxlcy9zaW1wbGUKKwkuL21pbmlsem8vdGVzdG1pbmkKKwlAZWNobworCUBlY2hvICJBbGwgdGVzdHMgcGFzc2VkLiBOb3cgeW91IGFyZSByZWFkeSB0byBpbnN0YWxsIExaTy4iCisJQGVjaG8KKworQE1BSU5UQC1pbmNsdWRlICQodG9wX3NyY2RpcikvTWFrZWZpbGUubWFpbnQKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL05FV1MgYi9sem8tMi4wMy9ORVdTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNGFhNmIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9ORVdTCkBAIC0wLDAgKzEsMjQ5IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitVc2VyIHZpc2libGUgY2hhbmdlcyBmb3IgTFpPIC0tIGEgcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitDaGFuZ2VzIGluIDIuMDMgKDMwIEFwciAyMDA4KQorICAqIFVwZGF0ZWQgdGhlIEVMRiBhc3NlbWJsZXIgc291cmNlcyB0byBtYXJrIHRoZSBzdGFjayBhcyBub24tZXhlY3V0YWJsZS4KKyAgKiBGaXhlZCBhIEhQLVVYIDExIGJ1aWxkIGlzc3VlIHdpdGggSXRhbml1bSBpbiBJTFAzMiBtb2RlLgorICAqIFVwZGF0ZWQgdGhlIGNvbmZpZ3VyZSBzeXN0ZW0uCisKK0NoYW5nZXMgaW4gMi4wMiAoMTcgT2N0IDIwMDUpCisgICogVXBkYXRlZCB0aGUgYnVpbGQgYW5kIEF1dG9jb25mIHNjcmlwdHMgdG8gZml4IHNvbWUgcmVwb3J0ZWQKKyAgICBjb21waWxhdGlvbiBwcm9ibGVtcy4KKworQ2hhbmdlcyBpbiAyLjAxICgyNyBKdW4gMjAwNSkKKyAgKiBDaGFuZ2VkIHRoZSBjb25maWd1cmUgc3lzdGVtIHRvIGluc3RhbGwgdGhlIExaTyBsaWJyYXJ5IHVuZGVyIHRoZQorICAgIG5hbWUgImxpYmx6bzIiIHNvIHRoYXQgcGFyYWxsZWwgaW5zdGFsbGF0aW9uIHdpdGggTFpPIHYxIGlzIHBvc3NpYmxlLgorICAqIEltcHJvdmVkIGF1dG8tY29uZmlndXJhdGlvbiBpbiBtaW5pTFpPIGZvciBzb21lIGVtYmVkZGVkIHRhcmdldHMgbGlrZQorICAgIEJsYWNrZmluIGFuZCBIOC8zMDAgcHJvY2Vzc29ycy4KKworQ2hhbmdlcyBpbiAyLjAwICgzMCBNYXkgMjAwNSkKKworICBbTGlicmFyeSBpbnRlcmZhY2UgY2hhbmdlc10KKyAgKiBUaGUgJ2x6b191aW50JyB0eXBlZGVmIGhhcyBiZWVuIGNoYW5nZWQgdG8gbWF0Y2ggJ3NpemVfdCcsIHdoaWNoIG1lYW5zCisgICAgaXQgbm93IGlzIDY0IGJpdHMgb24gbW9zdCA2NC1iaXQgYXJjaGl0ZWN0dXJlcy4gMzItYml0IG1hY2hpbmVzCisgICAgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4KKyAgKiBUaGUgZm9ybXVsYSBmb3IgbWF4aW11bSBleHBhbnNpb24gb2YgaW5jb21wcmVzc2libGUgZGF0YSBoYXMgY2hhbmdlZC4KKyAgICBTZWUgZG9jL0xaTy5GQVEuIFRoaXMgaXMgbmVlZGVkIGZvciBzb21lIHVwY29taW5nIHNwZWVkIGltcHJvdmVtZW50cywKKyAgICBhbmQgYWxzbyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG91ciBjb21tZXJjaWFsIExaTyBQcm9mZXNzaW9uYWwgcHJvZHVjdC4KKyAgKiBUaGUgcHJvZ3Jlc3MgaW5kaWNhdG9yIGNhbGxiYWNrIGludGVyZmFjZSBoYXMgYmVlbiByZXZhbXBlZC4KKyAgKiBBbGwgcHVibGljIGhlYWRlciBmaWxlcyBub3cgZ2V0IGluc3RhbGxlZCBpbnRvIGEgImx6byIgc3ViZGlyZWN0b3J5LCBzbworICAgIHlvdXIgYXBwbGljYXRpb25zIHNob3VsZCB1c2UgI2luY2x1ZGUgPGx6by9sem9YWFguaD4uCisgICogQSBudW1iZXIgb2YgKGludGVybmFsKSBtYWNyb3MgaGF2ZSBiZWVuIHJlbmFtZWQuIFNlZSBMWk9fQ0ZHX0NPTVBBVAorICAgIGluIDxsem8vbHpvY29uZi5oPiBpZiB5b3VyIGNvZGUgZGVwZW5kcyBvbiB0aGVzZS4KKworICBbU3BlZWRdCisgICogU21hbGwgb3ZlcmFsbCBzcGVlZHVwIGJ5IGV4cGxvaXRpbmcgZmVhdHVyZXMgbGlrZSBicmFuY2ggcHJlZGljdGlvbgorICAgIGhpbnRzIGFuZCBleHBsaWNpdCBpbmxpbmUgY29udHJvbCBwcmVzZW50IGluIG1vZGVybiBDL0MrKyBjb21waWxlcnMuCisgICogU2lnbmlmaWNhbnQgc3BlZWR1cCBmb3IgNjQtYml0IGFyY2hpdGVjdHVyZXMgbGlrZSBBTUQ2NC4KKworICBbUG9ydGFiaWxpdHldCisgICogTFpPIG5vdyBmdWxseSBzdXBwb3J0cyB0aGUgTExQNjQgcHJvZ3JhbW1pbmcgbW9kZWwuCisgICogTFpPIG5vdyBmdWxseSBzdXBwb3J0cyB0aGUgSUxQNjQgYW5kIFNJTFA2NCBwcm9ncmFtbWluZyBtb2RlbHMgd2hpY2gKKyAgICBhcmUgdXNlZCBvbiBzb21lIHN1cGVyY29tcHV0aW5nIGFyY2hpdGVjdHVyZXMuCisgICogRnVsbCBXaW42NCBzdXBwb3J0IGZvciBBTUQ2NCAoYWthIHg2NCkgYW5kIElBNjQgKEl0YW5pdW0pLgorICAqIEZ1bGwgMTYtYml0IHN1cHBvcnQgZm9yIGFuY2llbnQgRE9TIDI4NiBwcm90ZWN0ZWQgbW9kZSwgT1MvMiAxLngKKyAgICBhbmQgV2luZG93cyAzLnguCisgICogVGhlIExaTyBsaWJyYXJ5IG5vdyBjb21waWxlcyBhbmQgd29ya3Mgb24gY29tcGxldGVseSBmcmVlc3RhbmRpbmcgb3IKKyAgICBlbWJlZGRlZCBzeXN0ZW1zIGFzIGxvbmcgYXMgeW91IGhhdmUgPGxpbWl0cy5oPiBhbmQgPHN0ZGRlZi5oPiBoZWFkZXIKKyAgICBmaWxlcy4gU2VlIHRoZSBCL2dlbmVyaWMvYnVpbGRfZnJlZXN0YW5kaW5nLnNoIGJ1aWxkIHNjcmlwdC4KKworICBbTWlzY10KKyAgKiBUaGUgaTM4NiBhc3NlbWJsZXIgdmVyc2lvbnMgb2YgdGhlIGRlY29tcHJlc3NvcnMgYXJlIG5vdyBhdXRvbWF0aWNhbGx5CisgICAgYnVpbHQgYW5kIGluc3RhbGxlZC4gU2VlIGFsc28gYXNtL2kzODYvMDBSRUFETUUuVFhULgorICAqIEFkZGVkIGluY2x1ZGUgZmlsZSA8bHpvL2x6b19hc20uaD4gdGhhdCBwcm92aWRlcyBwcm90b3R5cGVzIGZvciBhbGwKKyAgICBhc3NlbWJsZXIgZnVuY3Rpb25zLgorICAqIFVuZGVyIE1hY09TIFgsIHRoZSBjb25maWd1cmUgc2NyaXB0IG5vdyB3aWxsIHVzZSB0aGUgYC1uby1jcHAtcHJlY29tcCcKKyAgICBjb21waWxlciBvcHRpb24gaW4gb3JkZXIgdG8gd29yayBhcm91bmQgYnVncyBpbiBzb21lIHZlcnNpb25zIG9mCisgICAgQXBwbGUncyBuYXRpdmUgInNtYXJ0IiBwcmVwcm9jZXNzb3IuCisgICogV29ya2VkIGFyb3VuZCBhIHByZXByb2Nlc3NvciBidWcgdGhhdCBpcyBwcmVzZW50IGluIGFsbCBjb21waWxlcnMgd2hpY2gKKyAgICBhcmUgYmFzZWQgb24gdGhlIGxjYyBjb21waWxlciBraXQuCisgICogQWRkZWQgc2ltcGxlIEIvZ2VuZXJpYy9idWlsZC5zaCBidWlsZCBzY3JpcHQgZmFtaWx5LgorICAqIEFkZGVkIGxvdHMgb2YgbmV3IGJ1aWxkIHNjcmlwdHMgZm9yIHZhcmlvdXMgRE9TL1dpbmRvd3MgY29tcGlsZXJzLgorCisgIFtVcGdyYWRlIGluc3RydWN0aW9ucyBmcm9tIExaTyB2MSB0byBMWk8gdjJdCisgICogT24gNjQtYml0IGFyY2hpdGVjdHVyZXMsIHJldmlzaXQgYWxsIHVzZXMgb2YgbHpvX3VpbnQuCisgICogQWRhcHQgZm9yIHRoZSBtYXhpbXVtIGV4cGFuc2lvbiBjaGFuZ2Ugb2YgaW5jb21wcmVzc2libGUgZGF0YS4KKyAgKiBJZiB5b3UgdXNlIHRoZSBwcm9ncmVzcyBjYWxsYmFjayB0aGVuIGFkYXB0IGZvciB0aGUgbmV3IGludGVyZmFjZS4KKyAgKiBVc2UgI2luY2x1ZGUgPGx6by9sem9YWFguaD4gb3IgYWRqdXN0IHlvdXIgaW5jbHVkZSBwYXRoLgorICAqIENoZWNrIHlvdXIgY29kZSBmb3IgdXNlIG9mIGRlcHJlY2F0ZWQgbWFjcm9zLiBBZGQgYQorICAgICNkZWZpbmUgTFpPX0NGR19DT01QQVQgaWYgbmVjZXNzYXJ5LgorICAqIE90aGVyIHRoYW4gdGhhdCBMWk8gdjIgc2hvdWxkIGJlIGZ1bGx5IHNvdXJjZS1jb21wYXRpYmxlIHdpdGggTFpPIHYxLgorICAgIE9mIGNvdXJzZSwgdGhlIGNvbXByZXNzZWQgZGF0YSBpcyBmdWxseSBjb21wYXRpYmxlIGFzIHdlbGwuCisgICogUmUtY29tcGlsZSBhbmQgcmUtbGluayB5b3VyIGFwcGxpY2F0aW9uLgorICAqIEVuam95IHRoZSBpbXByb3ZlbWVudHMhCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlcyBpbiAxLjA4ICgxMiBKdWwgMjAwMikKKyAgKiBNdWNoIGJldHRlciBzdXBwb3J0IGZvciBjcm9zcyBjb21waWxpbmcuCisgICogU3RyYWlnaHRlbiBvdXQgQU5TSS1jb25mb3JtaW5nIGNvbXBpbGVyIGNoZWNrcy4KKyAgKiBBdm9pZCBoYXJtbGVzcyBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSAtV2Nhc3QtYWxpZ24uCisgICogRml4ZWQgc29tZSBzaWduIGV4dGVuc2lvbiBwcm9ibGVtcyBvbiByYXRoZXIgZXhvdGljIG1hY2hpbmVzIHdoZXJlCisgICAgc2l6ZW9mKHNpemVfdCkgPCBzaXplb2YocHRyZGlmZl90KSBhbmQgc2l6ZW9mKGx6b191aW50KSA9PSBzaXplb2Yoc2l6ZV90KQorICAqIFVwZGF0ZWQgdGhlIGNvbmZpZ3VyZSBzeXN0ZW0gdG8gdXNlIHRoZSBsYXRlc3QgQXV0b2NvbmYsIEF1dG9tYWtlCisgICAgYW5kIExpYnRvb2wgdmVyc2lvbnMuCisKK0NoYW5nZXMgaW4gMS4wNyAoMTggT2N0IDIwMDApCisgICogRGVmYXVsdCB0byBgLS1kaXNhYmxlLXNoYXJlZCcgKEknbSBnZXR0aW5nIHRpcmVkIG9mIExpYnRvb2wncworICAgIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkIHByb2JsZW1zLCB0aGlzIHRpbWUgQUlYIHdhcyB0aGUgY3VscHJpdCkuCisgICogQXZvaWQgc29tZSBoYXJtbGVzcyBjb21waWxlciB3YXJuaW5ncy4KKworQ2hhbmdlcyBpbiAxLjA2ICgyOSBOb3YgMTk5OSkKKyAgKiBVcGRhdGVkIHRoZSBjb25maWd1cmUgc3lzdGVtIHRvIHVzZSBBdXRvY29uZiAyLjEzLCBBdXRvbWFrZSAxLjQgYW5kCisgICAgTGlidG9vbCAxLjMuMy4gVGhpcyBzaG91bGQgaG9wZWZ1bGx5IGZpeCB0aGUgc2hhcmVkLWxpYnJhcnkgYnVpbGQKKyAgICBwcm9ibGVtcyB0aGF0IHdlcmUgcmVwb3J0ZWQgb24gc29tZSBtYWNoaW5lcy4KKyAgKiBFbmhhbmNlZCBleGFtcGxlIHByb2dyYW1zIGEgbGl0dGxlIGJpdC4KKworQ2hhbmdlcyBpbiAxLjA1ICgxNCBBcHIgMTk5OCkKKyAgKiBKdXN0IGEgb25lLWxpbmUgY2hhbmdlIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHdvcmthcm91bmQKKyAgICBhIEhQVVggYW5kIElSSVggYnVpbGQgcHJvYmxlbS4KKworQ2hhbmdlcyBpbiAxLjA0ICgxNSBNYXIgMTk5OCkKKyAgKiBXb3JrZWQgYXJvdW5kIGEgYnVnIGluIHRoZSBjcHAgcHJlcHJvY2Vzc29yIHVuZGVyIEhQVVggMTAuMjAuCisgICogQWRhcHRlZCBmb3IgQXV0b21ha2UgMS4yZiBhbmQgTGlidG9vbCAxLjEuCisKK0NoYW5nZXMgaW4gMS4wMyAoMTggSmFuIDE5OTgpCisgICogbWlub3IgY29tcHJlc3Npb24gcmF0aW8gaW1wcm92ZW1lbnQKKyAgKiBleHRlbmRlZCBleGFtcGxlIHByb2dyYW0gdG8gc2hvdyBob3cgdG8gZG8gb3ZlcmxhcHBpbmcgY29tcHJlc3Npb24KKyAgKiBhc3NlbWJsZXIgY2hhbmdlcywgYWRkZWQgc3VwcG9ydCBmb3IgdGhlIG5hc20gYXNzZW1ibGVyCisgICogYmV0dGVyIHN1cHBvcnQgZm9yIGNyb3NzIGNvbXBpbGluZworICAqIHNvbWUgY2xlYW51cHMKKworQ2hhbmdlcyBpbiAxLjAyICgwNyBEZWMgMTk5NykKKyAgKiBpbXByb3ZlZCBMWk8xWC05OTkgYW5kIExaTzFZLTk5OSBjb21wcmVzc2lvbiByYXRpbyBhIGxpdHRsZSBiaXQgYWdhaW4KKyAgKiBpbnRyb2R1Y2VkIGNvbXByZXNzaW9uIGxldmVscyBmb3IgTFpPMVgtOTk5IGFuZCBMWk8xWS05OTkKKyAgKiBhZGRlZCBzdXBwb3J0IGZvciBwcmVzZXQgZGljdGlvbmFyaWVzCisgICogaW1wbGVtZW50ZWQgTFpPMVgtMSgxMik6IG5lZWRzIDE2IGtCIGZvciBjb21wcmVzc2lvbgorICAqIG5ldyBhbGdvcml0aG0gTFpPMVo6IHRoaXMgaXMgYW5vdGhlciB2YXJpYW50IG9mIExaTzFYCisgICogYWRkZWQgZXhhbXBsZSBwcm9ncmFtOiBob3cgdG8gdXNlIHByZXNldCBkaWN0aW9uYXJpZXMKKyAgKiBhZGRlZCBleGFtcGxlIHByb2dyYW06IGhvdyB0byBkbyBpbi1wbGFjZSBkZWNvbXByZXNzaW9uCisgICogYWRkZWQgYSBsaXR0bGUgZmlsZS1wYWNrZXIgZXhhbXBsZSBwcm9ncmFtCisgICogTFpPIG5vdyB3b3JrcyBjbGVhbmx5IHVuZGVyIGNoZWNrZXJnY2MKKyAgKiBzdHJpY3QgMTYtYml0IG1lbW9yeSBtb2RlbCBpcyB3b3JraW5nIChidXQgbm90IG9mZmljaWFsbHkgc3VwcG9ydGVkKQorICAqIHNoYXJlZCBsaWJyYXJpZXMgYXJlIHN1cHBvcnRlZCBvbiBtYW55IHBsYXRmb3JtcworICAqIGFkYXB0ZWQgZm9yIEF1dG9tYWtlIDEuMmQgYW5kIExpYnRvb2wgMS4waAorCitDaGFuZ2VzIGluIDEuMDEgKDEwIEF1ZyAxOTk3KQorICAqIGltcHJvdmVkIExaTzFYLTk5OSBhbmQgTFpPMVktOTk5IGNvbXByZXNzaW9uIHJhdGlvIGEgbGl0dGxlIGJpdAorICAqIGkzODYrZ2NjOiBzaWduaWZpY2FudCBzcGVlZHVwIG9mIHRoZSBDIHZlcnNpb24gb2YgdGhlIExaTzEsIExaTzFBLAorICAgIExaTzFCIGFuZCBMWk8xQyBkZWNvbXByZXNzb3JzCisgICogYWRkZWQgZXhhbXBsZSBwcm9ncmFtcyB0aGF0IHNob3cgaG93IHRvIGdlbmVyYXRlIHByZS1jb21wcmVzc2VkIGRhdGEKKyAgKiBhZGRlZCBNYWtlZmlsZXMgZm9yIERPUywgV2luZG93cyBhbmQgT1MvMiB0YXJnZXRzCisKK0NoYW5nZXMgaW4gMS4wMCAoMTMgSnVsIDE5OTcpCisgICogYWRkZWQgbWluaUxaTyAtIGNhbiBiZSBlYXNpbHkgaW5jbHVkZWQgaW4geW91ciBwcm9qZWN0CisgICogaW1wcm92ZWQgZG9jdW1lbnRhdGlvbiwgYWRkZWQgTFpPLkZBUQorICAqIGFkZGVkIGJ1aWxkIHNjcmlwdHMgZm9yIG1hbnkgc3lzdGVtcyB3aGVyZSBBdXRvY29uZiBpcyBub3QgYXZhaWxhYmxlOgorICAgIFdpbmRvd3MgMy4xIChMSUIrRExMKSwgV2luZG93cyA5NS9OVCAoTElCK0RMTCksIERPUyAoMTYrMzIgYml0KSwgT1MvMgorICAqIGFkYXB0ZWQgZm9yIEF1dG9tYWtlIDEuMiBhbmQgTGlidG9vbCAxLjAKKworQ2hhbmdlcyBpbiAwLjkwICgyNyBKdW4gMTk5Nyk6IG5ldmVyIHJlbGVhc2VkCisgICogTFpPIG5vdyB1c2VzIEdOVSBBdXRvbWFrZSAxLjAgLSBsb3RzIG9mIGNvbmZpZ3VyYXRpb24gY2hhbmdlcworICAqIGFkZGVkIExaTzFYLTEoMTEpOiB0aGlzIHZlcnNpb24gbmVlZHMgb25seSA4IGtCIGZvciBjb21wcmVzc2lvbgorICAqIGltcGxlbWVudGVkIExaTzFZLTEKKyAgKiBhZGRlZCBpMzg2IGFzc2VtYmxlciBkZWNvbXByZXNzb3JzIGZvciBNQVNNL1RBU00vV0FTTQorICAqIHRoZSBuYW1lIG9mIHNvbWUgYXNzZW1ibGVyIGZ1bmN0aW9ucyBjaGFuZ2VkCisgICogdGhlIG51bWVyaWMgdmFsdWUgb2Ygc29tZSBlcnJvciBjb2RlcyBjaGFuZ2VkCisgICogcG9ydGFiaWxpdHkgZml4ZXMKKworQ2hhbmdlcyBpbiAwLjI5ICgwNCBNYXkgMTk5NykKKyAgKiBMaW51eCBFTEYgc2hhcmVkIGxpYnJhcnkgc3VwcG9ydAorICAqIHdvcmthcm91bmQgZm9yIGdjYyAyLjcuMiBvcHRpbWl6ZXIgYnVnIHVuZGVyIEFJWAorICAqIGFkZGVkIGx6b19jcmMzMigpIGNoZWNrc3VtCisKK0NoYW5nZXMgaW4gMC4yOCAoMjIgRmViIDE5OTcpCisgICogbmV3IGFsZ29yaXRobSBMWk8xWTogTFpPMVktOTk5IGFuZCBMWk8xWSBkZWNvbXByZXNzb3IKKyAgKiBhZGRlZCBsem8xeF9vcHRpbWl6ZSgpIGFuZCBsem8xeV9vcHRpbWl6ZSgpCisgICogbWlub3Igc3BlZWR1cCBpbiBhc3NlbWJsZXIgZGVjb21wcmVzc29ycyAoaTM4NitnY2MpCisgICogbHRlc3QuYyByZXdyaXR0ZW4KKworQ2hhbmdlcyBpbiAwLjI3ICgxOSBKYW4gMTk5NykKKyAgKiBmaXhlZCBhIGJ1ZyBpbiBMWk8xQi05OTkgYW5kIExaTzFDLTk5OSB0aGF0IGNvdWxkIHByb2R1Y2UKKyAgICBpbnZhbGlkIGNvbXByZXNzZWQgZGF0YSBpbiB2ZXJ5IHJhcmUgY2FzZXMKKworQ2hhbmdlcyBpbiAwLjI2ICgxOCBKYW4gMTk5Nyk6IG5ldmVyIHJlbGVhc2VkCisgICogaW1wbGVtZW50ZWQgTFpPMUItOTk5CisgICogcmVuYW1lZCBMWk8xRCB0byBMWk8yQSAoYWxzbyB1cGRhdGVkIGFsbCBkb2NzKQorICAqIHNvbWUgY2xlYW51cHMKKworQ2hhbmdlcyBpbiAwLjI1ICgyOCBEZWMgMTk5Nik6IG5ldmVyIHJlbGVhc2VkCisgICogc29tZSBwb3J0YWJpbGl0eSBmaXhlcyAoTFpPIG5vdyB3b3JrcyBvbiBteSBvbGQgQXRhcmkgU1QgOi0pCisgICogYWRhcHRlZCBmb3IgQXV0b2NvbmYgMi4xMgorCitDaGFuZ2VzIGluIDAuMjQgKDMwIE5vdiAxOTk2KTogbmV2ZXIgcmVsZWFzZWQKKyAgKiBpbXByb3ZlZCBwZXJmb3JtYW5jZSBvZiBMWk8xWCBhc3NlbWJsZXIgZGVjb21wcmVzc29yIG9uIGEgUGVudGl1bSAoaTM4NitnY2MpCisKK0NoYW5nZXMgaW4gMC4yMyAoMjMgTm92IDE5OTYpCisgICogYWRkZWQgTFpPMUMsIExaTzFGIGFuZCBMWk8xWCBkZWNvbXByZXNzb3JzIGluIGFzc2VtYmxlciAoaTM4NitnY2MpCisgICogYWRkZWQgY29ycmVzcG9uZGluZyBMWk9fUFVCTElDIHRvIGFsbCBMWk9fRVhURVJOIGZ1bmN0aW9ucworICAqIGFkZGVkIHN1cHBvcnQgZm9yIE1pY3Jvc29mdCBDIDcuMCAoMTYtYml0IERPUykKKyAgKiBpbnRyb2R1Y2VkIGx6b191aW50MzIuIFRoaXMgY291bGQgcHJvdmUgdXNlZnVsIGZvciBhIHN0cmljdCAxNi1iaXQKKyAgICB2ZXJzaW9uIHRoYXQgZG9lc24ndCB1c2UgYGh1Z2UnIHBvaW50ZXJzLgorICAqIGFsbCBhbGdvcml0aG1zIHVzZSBpbmNyZW1lbnRhbCBoYXNoaW5nIG5vdworICAqIHNvbWUgY2xlYW51cHMgYW5kIHBvcnRhYmlsaXR5IGZpeGVzCisKK0NoYW5nZXMgaW4gMC4yMiAoMTkgU2VwIDE5OTYpCisgICogTFpPMVg6IG1pbm9yIGRlY29tcHJlc3NvciBzcGVlZHVwLCBhZGRlZCBzb21lIGNoZWNrcyBpbiBzYWZlIGRlY29tcHJlc3NvcgorICAqIEF1dG9jb25mOiBhZGRlZCBkZXRlY3Rpb24gb2YgZ2NjIHN0cmVuZ3RoLXJlZHVjdGlvbiBidWcKKyAgKiBNYWtlZmlsZSBjaGFuZ2VzCisKK0NoYW5nZXMgaW4gMC4yMSAoMDggU2VwIDE5OTYpCisgICogTFpPIG5vdyB1c2VzIEdOVSBBdXRvY29uZiAyLjEwIC0gbG90cyBvZiBjb25maWd1cmF0aW9uIGNoYW5nZXMKKyAgKiBhIGZldyBjb3NtZXRpY2FsIGNoYW5nZXMKKworQ2hhbmdlcyBpbiAwLjIwICgxMSBBdWcgMTk5NikKKyAgKiBuZXcgYWxnb3JpdGhtIExaTzFYOiBMWk8xWC0xLCBMWk8xWC05OTkgYW5kIExaTzFYIGRlY29tcHJlc3NvcgorICAqIHNpZ25pZmljYW50bHkgc3BlZWRlZCB1cCBMWk8xQiwgTFpPMUMgYW5kIExaTzFGIGRlY29tcHJlc3NvcnMKKyAgICBvbiBDUFVzIHdoaWNoIGFsbG93IHVuYWxpZ25lZCBtZW1vcnkgYWNjZXNzIChlLmcuIEludGVsIGkzODYpCisgICogZ3JlYXRseSBzcGVlZGVkIHVwIExaTzJBLTk5OSBjb21wcmVzc29yIGF0IHRoZSBjb3N0IG9mIHNvbWUgbWVtb3J5CisgICogc29tZSBjbGVhbnVwcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG1pbm9yIHNwZWVkdXBzCisKK0NoYW5nZXMgaW4gMC4xNiAoMjIgSnVsIDE5OTYpCisgICogc3BlZWRlZCB1cCBMWk8xRiBkZWNvbXByZXNzb3IgYSBsaXR0bGUgYml0CisgICogaW1wcm92ZWQgTFpPMUYtOTk5IGNvbXByZXNzaW9uIHJhdGlvCisKK0NoYW5nZXMgaW4gMC4xNSAoMTAgSnVsIDE5OTYpCisgICogbmV3IGFsZ29yaXRobSBMWk8xRjogTFpPMUYtMSwgTFpPMUYtOTk5IGFuZCBMWk8xRiBkZWNvbXByZXNzb3IKKyAgKiBpbXByb3ZlZCBMWk8yQS05OTkgY29tcHJlc3Npb24gcmF0aW8KKyAgKiByZW1vdmVkIExaTzFFIGFzIGl0IGlzIGRvbWluYXRlZCBieSBMWk8xRgorCitDaGFuZ2VzIGluIDAuMTQgKDA2IEp1bCAxOTk2KTogbmV2ZXIgcmVsZWFzZWQKKyAgKiBleHBlcmltZW50YWwgYWxnb3JpdGhtczogTFpPMUUgYW5kIExaTzFGCisgICogYWRkZWQgTFpPX0VYVEVSTiB0byBhbGwgcHJvdG90eXBlcy4gVXNlZnVsIHdoZW4gYnVpbGRpbmcgYSBETEwuCisgICogaW1wcm92ZWQgTFpPMUMtOTk5IGFuZCBMWk8yQS05OTkgY29tcHJlc3Npb24gcmF0aW8gYSBsaXR0bGUgYml0CisgICogZml4ZWQgcHJvZ3Jlc3MgaW5kaWNhdG9yIGNhbGxiYWNrIChpdCB3YXMgY2FsbGVkIG9ubHkgb25jZSkKKworQ2hhbmdlcyBpbiAwLjEzICgyMCBKdW4gMTk5NikKKyAgKiBzb21lIHNwZWVkIGltcHJvdmVtZW50cyBpbiBMWk8xQy05OTkgYW5kIExaTzJBLTk5OQorCitDaGFuZ2VzIGluIDAuMTIgKDE4IEp1biAxOTk2KTogbmV2ZXIgcmVsZWFzZWQKKyAgKiBhZGRlZCBMWk8xQy05OTksIGEgc2xvdyBidXQgbmVhcmx5IG9wdGltYWwgY29tcHJlc3NvcgorICAgIGludGVuZGVkIGZvciBnZW5lcmF0aW5nIHByZS1jb21wcmVzc2VkIGRhdGEKKyAgKiBhZGRlZCB0ZXN0cyBmb3IgbG9va2JlaGluZC1vdmVycnVuIGluIGFsbCBzYWZlIGRlY29tcHJlc3NvcnMKKyAgKiBzb3VyY2UgdHJlZSBjb21wbGV0ZWx5IHJlYXJyYW5nZWQsIHNvbWUgZmlsZW5hbWVzIGNoYW5nZWQKKyAgKiBleHRlbnNpb25zIGNoYW5nZWQ6IGEgLmNoIGZpbGUgaXMgYSBDIHNvdXJjZSBjb2RlIHRoYXQgaXMgaW5jbHVkZWQKKyAgICBmb3IgcmVhc29ucyBvZiBjb2RlIHNoYXJpbmcKKyAgKiBuZXcgYWxnb3JpdGhtIExaTzJBOiBMWk8yQS05OTkgYW5kIExaTzJBIGRlY29tcHJlc3Nvci4gVGhlcmUgaXMKKyAgICBubyBmYXN0IGNvbXByZXNzb3IgeWV0LgorICAqIHNvbWUgY2xlYW51cHMKKworQ2hhbmdlcyBpbiAwLjExICgyOSBNYXkgMTk5NikKKyAgKiBzb3VyY2UgdHJlZSByZWFycmFuZ2VkCisgICogTFpPIG5vdyBjb21waWxlcyBmaW5lIGFzIGEgQysrIGxpYnJhcnkgKGludGVyZmFjZSBzdGlsbCBoYXMgQyBsaW5rYWdlKQorICAqIGltcHJvdmVkIG92ZXJhbGwgY29tcHJlc3Npb24gcmF0aW8gYSBsaXR0bGUgYml0CisgICogTFpPMUItOTkvTFpPMUMtOTkgbm93IHNlYXJjaCBmb3IgbG9uZ2VyIG1hdGNoZXMKKyAgKiBpbmNyZW1lbnRhbCBoYXNoIGlzIHdvcmtpbmcsIGl0J3MgYSBsaXR0bGUgYml0IGZhc3RlcgorICAqIE1ha2VmaWxlIGNoYW5nZWQKKyAgKiBhZGRlZCBsem9fdWludCBhbmQgbHpvX3NpemVvZiBpbiBzb21lIHBsYWNlcworICAqIHNwbGl0IExaTzFCIGNvbXByZXNzb3IgaW50byBldmVuIG1vcmUgaW5jbHVkZS1maWxlcworCitDaGFuZ2VzIGluIDAuMTAgKDIwIE1heSAxOTk2KTogZmlyc3QgcHVibGljIHJlbGVhc2Ugb2YgdGhlIExaTyBsaWJyYXJ5CisgICogaW5jbHVkZXMgTFpPMSwgTFpPMUEsIExaTzFCIGFuZCBMWk8xQyBhbGdvcml0aG1zCisgICAgKGNvbXByZXNzaW9uIGxldmVscyAxLTkgYW5kIDk5KQorCisxNCBNYXIgMTk5NjoKKyAgKiBwdWJsaWMgcmVsZWFzZSBvZiB0aGUgTFpPMUEgYWxnb3JpdGhtCisKKzA0IE1hciAxOTk2OgorICAqIHB1YmxpYyByZWxlYXNlIG9mIHRoZSBMWk8xIGFsZ29yaXRobQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvUkVBRE1FIGIvbHpvLTIuMDMvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkMWQzMzEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9SRUFETUUKQEAgLTAsMCArMSwzMiBAQAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorTFpPIC0tIGEgcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQbGVhc2UgcmVhZCB0aGUgZmlsZSBkb2MvTFpPLlRYVCBmb3IgYW4gaW50cm9kdWN0aW9uIHRvIExaTy4KK1NlZSB0aGUgZmlsZSBkb2MvTFpPLkZBUSBmb3IgdmFyaW91cyB0aWRiaXRzIG9mIGluZm9ybWF0aW9uLgorCitTZWUgdGhlIGZpbGUgTkVXUyBmb3IgYSBsaXN0IG9mIG1ham9yIGNoYW5nZXMgaW4gdGhlIGN1cnJlbnQgcmVsZWFzZS4KKworU2VlIHRoZSBmaWxlIElOU1RBTEwgZm9yIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zLgorCitGb3IgYSBxdWljayBzdGFydCBob3cgdG8gdXNlIExaTyBsb29rIGF0IGV4YW1wbGVzL2x6b3BhY2suYy4KKworCitEaXJlY3Rvcnkgb3ZlcnZpZXc6CistLS0tLS0tLS0tLS0tLS0tLS0tCisgIGF1dG9jb25mICAgICAgQXV0b2NvbmYgY29uZmlndXJhdGlvbiBmaWxlcyAoVU5JWCBzcGVjaWZpYykKKyAgQiAgICAgICAgICAgICB2YXJpb3VzIHN1cHBvcnQgZmlsZXMgZm9yIERPUywgV2luZG93cywgT1MvMiwgLi4uCisgIGRvYyAgICAgICAgICAgZG9jdW1lbnRhdGlvbgorICBleGFtcGxlcyAgICAgIGV4YW1wbGUgcHJvZ3JhbXMKKyAgaW5jbHVkZSAgICAgICBwdWJsaWMgaGVhZGVyIGZpbGVzCisgIG1pbmlsem8gICAgICAgYSBsaWdodHdlaWdodCBzdWJzZXQgZm9yIGVhc3kgaW5jbHVzaW9uIGluIHlvdXIgcHJvamVjdAorICBzcmMgICAgICAgICAgIGxpYnJhcnkgc291cmNlCisgIHRlc3RzICAgICAgICAgbW9yZSBvciBsZXNzIGV4b3RpYyB0ZXN0IHByb2dyYW1zCisgIHV0aWwgICAgICAgICAgc29tZSB1dGlsaXR5IHNjcmlwdHMKKworCitIYXZlIGZ1biwKK01hcmt1cworCitodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL1RIQU5LUyBiL2x6by0yLjAzL1RIQU5LUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZjA5YmRmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvVEhBTktTCkBAIC0wLDAgKzEsMTQgQEAKK0kgd2FudCB0byB0aGFuayB0aGUgZm9sbG93aW5nIHBlb3BsZSBmb3IgZ2l2aW5nIGZlZWRiYWNrLCBkb2luZworYmV0YS10ZXN0aW5nIG9yIGhlbHBpbmcgbWUgc29tZSBvdGhlciB3YXk6CisKK0NoYXJsZXMgVy4gU2FuZG1hbm4gICAgICAgICAgICAgPHNhbmRtYW5uQGNsaW8ucmljZS5lZHU+CitGcmFuayBEb25haG9lICAgICAgICAgICAgICAgICAgIDxmZG9uYWhvZUB3aWxrZXMxLndpbGtlcy5lZHU+CitIb2xnZXIgQmVyZ2VyICAgICAgICAgICAgICAgICAgIDxIb2xnZXIuQmVyZ2VyQHJ1cy51bmktc3R1dHRnYXJ0LmRlPgorSmVhbi1sb3VwIEdhaWxseSAgICAgICAgICAgICAgICA8amxvdXBAZ3ppcC5vcmc+CitMYXN6bG8gTW9sbmFyICAgICAgICAgICAgICAgICAgIDxtbDEwNTBAZnJlZW1haWwuYzMuaHU+CitNYXJrIEFkbGVyICAgICAgICAgICAgICAgICAgICAgIDxtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1PgorUGF1bCBELiBFY2NsZXMgICAgICAgICAgICAgICAgICA8cGRlQHNkLmlucmkuY29tPgorUm9kb2xwaGUgT3J0YWxvICAgICAgICAgICAgICAgICA8b3J0YWxvQGxhYXMuZnI+CitXaWxsaWFtIE1hZ3JvICAgICAgICAgICAgICAgICAgIDx3bWFncm9AVEMuQ29ybmVsbC5FRFU+CitXb2xmZ2FuZyBMdWdtYXlyICAgICAgICAgICAgICAgIDxXLkx1Z21heXJAaW5mb3N5cy50dXdpZW4uYWMuYXQ+CitOYXRhc2NoYQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYWNsb2NhbC5tNCBiL2x6by0yLjAzL2FjbG9jYWwubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0ZmUyNgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FjbG9jYWwubTQKQEAgLTAsMCArMSw3NjM3IEBACisjIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS45LjYgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwKKyMgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIHN0YW5kYXJkIEFDQyBtYWNyb3MKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKEFDQ19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShBQ0NfQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX0hFQURFUlNdLCBbCitBQ19IRUFERVJfVElNRQorQUNfQ0hFQ0tfSEVBREVSUyhbYXNzZXJ0LmggY3R5cGUuaCBkaXJlbnQuaCBlcnJuby5oIGZjbnRsLmggZmxvYXQuaCBsaW1pdHMuaCBtYWxsb2MuaCBtZW1vcnkuaCBzZXRqbXAuaCBzaWduYWwuaCBzdGRhcmcuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRpby5oIHN0ZGxpYi5oIHN0cmluZy5oIHN0cmluZ3MuaCB0aW1lLmggdW5pc3RkLmggdXRpbWUuaCBzeXMvbW1hbi5oIHN5cy9yZXNvdXJjZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oXSkKK10pIworCitBQ19ERUZVTihbbWZ4X0FDQ19DSEVDS19GVU5DU10sIFsKK0FDX0NIRUNLX0ZVTkNTKGFjY2VzcyBhbGxvY2EgYXRleGl0IGF0b2kgYXRvbCBjaG1vZCBjaG93biBjbG9ja19nZXRjcHVjbG9ja2lkIGNsb2NrX2dldHJlcyBjbG9ja19nZXR0aW1lIGN0aW1lIGRpZmZ0aW1lIGZzdGF0IGdldGVudiBnZXRwYWdlc2l6ZSBnZXRydXNhZ2UgZ2V0dGltZW9mZGF5IGdtdGltZSBpc2F0dHkgbG9jYWx0aW1lIGxvbmdqbXAgbHN0YXQgbWVtY21wIG1lbWNweSBtZW1tb3ZlIG1lbXNldCBta2RpciBta3RpbWUgbW1hcCBtcHJvdGVjdCBtdW5tYXAgcXNvcnQgcmFpc2Ugcm1kaXIgc2V0am1wIHNpZ25hbCBzbnByaW50ZiBzdHJjYXNlY21wIHN0cmNociBzdHJkdXAgc3RyZXJyb3Igc3RyZnRpbWUgc3RyaWNtcCBzdHJuY2FzZWNtcCBzdHJuaWNtcCBzdHJyY2hyIHN0cnN0ciB0aW1lIHVtYXNrIHV0aW1lIHZzbnByaW50ZikKK10pIworCisKK0FDX0RFRlVOKFttZnhfQUNDX0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihzaG9ydCkKK0FDX0NIRUNLX1NJWkVPRihpbnQpCitBQ19DSEVDS19TSVpFT0YobG9uZykKKworQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKK0FDX0NIRUNLX1NJWkVPRihfX2ludDE2KQorQUNfQ0hFQ0tfU0laRU9GKF9faW50MzIpCitBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKworQUNfQ0hFQ0tfU0laRU9GKHZvaWQgKikKK0FDX0NIRUNLX1NJWkVPRihzaXplX3QpCitBQ19DSEVDS19TSVpFT0YocHRyZGlmZl90KQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gQ2hlY2sgZm9yIEFDQ19jb25mb3JtYW5jZQorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0FDX0RFRlVOKFttZnhfQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjaW5jbHVkZSAiYWNjL2FjYy5oIgorI2luY2x1ZGUgImFjYy9hY2NfaW5jZC5oIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorc3RhdGljIHZvaWQgdGVzdF9hY2NfY29tcGlsZV90aW1lX2Fzc2VydCh2b2lkKSB7CisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjaW5jbHVkZSAiYWNjL2FjY19jaGsuY2giCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorfQorI3VuZGVmIE5ERUJVRworI2luY2x1ZGUgPGFzc2VydC5oPgorc3RhdGljIGludCB0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoaW50IHIpIHsKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgYXNzZXJ0KGV4cHIpOworI2luY2x1ZGUgImFjYy9hY2NfY2hrLmNoIgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X0FDQ19BQ0NDSEsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVjayBmb3IgQUNDX2NvbmZvcm1hbmNlCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfREVGVU4oW21meF9NSU5JQUNDX0FDQ0NIS10sIFsKK21meF90bXA9JDEKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworZG5sIGluIE1ha2VmaWxlLmluICQoSU5DTFVERVMpIHdpbGwgYmUgYmVmb3JlICQoQ1BQRkxBR1MpLCBzbyB3ZSBtaW1pYyB0aGlzIGhlcmUKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHlvdXIgY29tcGlsZXIgcGFzc2VzIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdF0pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihleHByKQorI2luY2x1ZGUgJDIKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCitzdGF0aWMgdm9pZCB0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KHZvaWQpIHsKKyNpbmNsdWRlICQyCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgJDIKK3JldHVybiByOworfQorXV0sIFtbCit0ZXN0X2FjY19jb21waWxlX3RpbWVfYXNzZXJ0KCk7CitpZiAodGVzdF9hY2NfcnVuX3RpbWVfYXNzZXJ0KDEpICE9IDEpIHJldHVybiAxOworXV0KKyldKQorCittZnhfdG1wPUZBSUxFRAorX0FDX0NPTVBJTEVfSUZFTFNFKFtdLCBbbWZ4X3RtcD15ZXNdKQorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CisKK0NQUEZMQUdTPSRtZnhfc2F2ZV9DUFBGTEFHUworCitBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCitjYXNlIHgkbWZ4X3RtcCBpbgorICB4cGFzc2VkIHwgeHllcykgOzsKKyAgKikKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19OT1RJQ0UoW1lvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSBdKQorICAgIEFDX01TR19OT1RJQ0UoW2Bjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmddKQorICAgIEFDX01TR19OT1RJQ0UoW2EgcGF0Y2ggb3IgYnVnLXJlcG9ydCB0byA8JHtQQUNLQUdFX0JVR1JFUE9SVH0+Ll0pCisgICAgQUNfTVNHX05PVElDRShbVGhhbmtzIGZvciB5b3VyIHN1cHBvcnQuXSkKKyAgICBBQ19NU0dfTk9USUNFKFtdKQorICAgIEFDX01TR19FUlJPUihbQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLl0pCitkbmwgICAgQVNfRVhJVAorICAgIDs7Citlc2FjCitdKSMgbWZ4X01JTklBQ0NfQUNDQ0hLCisKKworCisjIHNlcmlhbCAxCisKK0FDX0RFRlVOKFttZnhfUFJPR19DUFBGTEFHU10sIFsKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFnc10pCisKK0FDX0xBTkdfQ09ORlRFU1QoW0FDX0xBTkdfUFJPR1JBTSgKK1tbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMSIKKyNlbGlmICgweGZmZmZ1ID09IDB4ZmZmZmZmZmZ1bCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZWxpZiAoMzI3NjcgPj0gVUxPTkdfTUFYKSB8fCAoNjU1MzV1ID49IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgInlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKK11dLCBbWyBdXQorKV0pCisKK21meF9zYXZlX0NQUEZMQUdTPSRDUFBGTEFHUworbWZ4X3RtcD1FUlJPUgorZm9yIG1meF9hcmcgaW4gIiIgLW5vLWNwcC1wcmVjb21wCitkbworICBDUFBGTEFHUz0iJG1meF9hcmcgJG1meF9zYXZlX0NQUEZMQUdTIgorICBfQUNfQ09NUElMRV9JRkVMU0UoW10sCitbbWZ4X3RtcD0kbWZ4X2FyZworYnJlYWtdKQorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBuZWVkZWRdKSA7OworICB4RVJST1IpCisgICAgQUNfTVNHX1JFU1VMVChbRVJST1JdKQorICAgIEFDX01TR19FUlJPUihbeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZ10pCisgICAgOzsKKyAgKikKKyAgICBBQ19NU0dfUkVTVUxUKFskbWZ4X3RtcF0pCisgICAgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKyAgICA7OworZXNhYworXSkjIG1meF9QUk9HX0NQUEZMQUdTCisKKworIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKworIyBzZXJpYWwgNDggQUNfUFJPR19MSUJUT09MCisKKworIyBBQ19QUk9WSURFX0lGRUxTRShNQUNSTy1OQU1FLCBJRi1QUk9WSURFRCwgSUYtTk9ULVBST1ZJREVEKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZiB0aGlzIG1hY3JvIGlzIG5vdCBkZWZpbmVkIGJ5IEF1dG9jb25mLCBkZWZpbmUgaXQgaGVyZS4KK200X2lmZGVmKFtBQ19QUk9WSURFX0lGRUxTRV0sCisgICAgICAgICBbXSwKKyAgICAgICAgIFttNF9kZWZpbmUoW0FDX1BST1ZJREVfSUZFTFNFXSwKKwkgICAgICAgICBbbTRfaWZkZWYoW0FDX1BST1ZJREVfJDFdLAorCQkgICAgICAgICAgIFskMl0sIFskM10pXSldKQorCisKKyMgQUNfUFJPR19MSUJUT09MCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX1BST0dfTElCVE9PTF0sCitbQUNfUkVRVUlSRShbX0FDX1BST0dfTElCVE9PTF0pZG5sCitkbmwgSWYgQUNfUFJPR19DWFggaGFzIGFscmVhZHkgYmVlbiBleHBhbmRlZCwgcnVuIEFDX0xJQlRPT0xfQ1hYCitkbmwgaW1tZWRpYXRlbHksIG90aGVyd2lzZSwgaG9vayBpdCBpbiBhdCB0aGUgZW5kIG9mIEFDX1BST0dfQ1hYLgorICBBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19DWFhdLAorICAgIFtBQ19MSUJUT09MX0NYWF0sCisgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLCBkZWZuKFtBQ19QUk9HX0NYWF0pW0FDX0xJQlRPT0xfQ1hYCisgIF0pXSkKK2RubCBBbmQgYSBzaW1pbGFyIHNldHVwIGZvciBGb3J0cmFuIDc3IHN1cHBvcnQKKyAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfRjc3XSwKKyAgICBbQUNfTElCVE9PTF9GNzddLAorICAgIFtkZWZpbmUoW0FDX1BST0dfRjc3XSwgZGVmbihbQUNfUFJPR19GNzddKVtBQ19MSUJUT09MX0Y3NworXSldKQorCitkbmwgUXVvdGUgQV1bTV9QUk9HX0dDSiBzbyB0aGF0IGFjbG9jYWwgZG9lc24ndCBicmluZyBpdCBpbiBuZWVkbGVzc2x5LgorZG5sIElmIGVpdGhlciBBQ19QUk9HX0dDSiBvciBBXVtNX1BST0dfR0NKIGhhdmUgYWxyZWFkeSBiZWVuIGV4cGFuZGVkLCBydW4KK2RubCBBQ19MSUJUT09MX0dDSiBpbW1lZGlhdGVseSwgb3RoZXJ3aXNlLCBob29rIGl0IGluIGF0IHRoZSBlbmQgb2YgYm90aC4KKyAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgICBbQUNfTElCVE9PTF9HQ0pdLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgICBbQUNfTElCVE9PTF9HQ0pdLAorICAgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9BQ19QUk9HX0dDSl0sCisJW0FDX0xJQlRPT0xfR0NKXSwKKyAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLAorCSAgICAgW2RlZmluZShbQUNfUFJPR19HQ0pdLCBkZWZuKFtBQ19QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKQorICAgICAgIGlmZGVmKFtBXVtNX1BST0dfR0NKXSwKKwkgICAgIFtkZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pCisgICAgICAgaWZkZWYoW0xUX0FDX1BST0dfR0NKXSwKKwkgICAgIFtkZWZpbmUoW0xUX0FDX1BST0dfR0NKXSwKKwkJZGVmbihbTFRfQUNfUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSldKV0pCitdKV0pIyBBQ19QUk9HX0xJQlRPT0wKKworCisjIF9BQ19QUk9HX0xJQlRPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BQ19QUk9HX0xJQlRPT0xdLAorW0FDX1JFUVVJUkUoW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfQ1hYXSlkbmwKK0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0Y3N10pZG5sCitBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9HQ0pdKWRubAorCisjIFRoaXMgY2FuIGJlIHVzZWQgdG8gcmVidWlsZCBsaWJ0b29sIHdoZW4gbmVlZGVkCitMSUJUT09MX0RFUFM9IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgorZGVmaW5lKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK10pIyBfQUNfUFJPR19MSUJUT09MCisKKworIyBBQ19MSUJUT09MX1NFVFVQCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NFVFVQXSwKK1tBQ19QUkVSRVEoMi41MClkbmwKK0FDX1JFUVVJUkUoW0FDX0VOQUJMRV9TSEFSRURdKWRubAorQUNfUkVRVUlSRShbQUNfRU5BQkxFX1NUQVRJQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTERdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19MRF9SRUxPQURfRkxBR10pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX05NXSlkbmwKKworQUNfUkVRVUlSRShbQUNfUFJPR19MTl9TXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0RFUExJQlNfQ0hFQ0tfTUVUSE9EXSlkbmwKKyMgQXV0b2NvbmYgMi4xMydzIEFDX09CSkVYVCBhbmQgQUNfRVhFRVhUIG1hY3JvcyBvbmx5IHdvcmtzIGZvciBDIGNvbXBpbGVycyEKK0FDX1JFUVVJUkUoW0FDX09CSkVYVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19FWEVFWFRdKWRubAorZG5sCisKK0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOCitBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKK0FDX0xJQlRPT0xfT0JKRElSCisKK0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAorX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgICMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorICAjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyAgIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgorICBpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgICBDT0xMRUNUX05BTUVTPQorICAgIGV4cG9ydCBDT0xMRUNUX05BTUVTCisgIGZpCisgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSdzZWQgLWUgMXMvXlgvLycKK1tzZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgJFxcXFxdXCkvXFxcMS9nJ10KKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitbZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYFxcXFxdXCkvXFxcMS9nJ10KKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNoZWxsIHZhcmlhYmxlIGluIGEKKyMgZG91YmxlX3F1b3RlX3N1YnN0J2VkIHN0cmluZy4KK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSdzL1xcXFxcXFxcXFxcJC9cXFxcXFwkL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKKyMgQ29uc3RhbnRzOgorcm09InJtIC1mIgorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitkZWZhdWx0X29maWxlPWxpYnRvb2wKK2Nhbl9idWlsZF9zaGFyZWQ9eWVzCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK2x0bWFpbj0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgorb2ZpbGU9IiRkZWZhdWx0X29maWxlIgord2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKKworQUNfQ0hFQ0tfVE9PTChBUiwgYXIsIGZhbHNlKQorQUNfQ0hFQ0tfVE9PTChSQU5MSUIsIHJhbmxpYiwgOikKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQVIiICYmIEFSPWFyCit0ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQordGVzdCAteiAiJEFTIiAmJiBBUz1hcwordGVzdCAteiAiJENDIiAmJiBDQz1jYwordGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCit0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKK3Rlc3QgLXogIiRMRCIgJiYgTEQ9bGQKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCit0ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06Cit0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bworCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK2Nhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCitmaWxlX21hZ2ljKikKKyAgaWYgdGVzdCAiJGZpbGVfbWFnaWNfY21kIiA9ICckTUFHSUNfQ01EJzsgdGhlbgorICAgIEFDX1BBVEhfTUFHSUMKKyAgZmkKKyAgOzsKK2VzYWMKKworQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfRExPUEVOXSwgZW5hYmxlX2Rsb3Blbj15ZXMsIGVuYWJsZV9kbG9wZW49bm8pCitBQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorZW5hYmxlX3dpbjMyX2RsbD15ZXMsIGVuYWJsZV93aW4zMl9kbGw9bm8pCisKK0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKwlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKK0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBQ19IRUxQX1NUUklORyhbLS13aXRoLXBpY10sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbcGljX21vZGU9IiR3aXRodmFsIl0sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0Cit0YWduYW1lPQorQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCitfTFRfQUNfVEFHQ09ORklHCitdKSMgQUNfTElCVE9PTF9TRVRVUAorCisKKyMgX0xUX0FDX1NZU19DT01QSUxFUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1NZU19DT01QSUxFUl0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKK10pIyBfTFRfQUNfU1lTX0NPTVBJTEVSCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorQUNfREVGVU4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1thY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorCisKKyMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KK0FDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKK1thY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKK10pIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTGlua3MgYSBtaW5pbWFsIHByb2dyYW0gYW5kIGNoZWNrcyB0aGUgZXhlY3V0YWJsZQorIyBmb3IgdGhlIHN5c3RlbSBkZWZhdWx0IGhhcmRjb2RlZCBsaWJyYXJ5IHBhdGguIEluIG1vc3QgY2FzZXMsCisjIHRoaXMgaXMgL3Vzci9saWI6L2xpYiwgYnV0IHdoZW4gdGhlIE1QSSBjb21waWxlcnMgYXJlIHVzZWQKKyMgdGhlIGxvY2F0aW9uIG9mIHRoZSBjb21tdW5pY2F0aW9uIGFuZCBNUEkgbGlicyBhcmUgaW5jbHVkZWQgdG9vLgorIyBJZiB3ZSBkb24ndCBmaW5kIGFueXRoaW5nLCB1c2UgdGhlIGRlZmF1bHQgbGlicmFyeSBwYXRoIGFjY29yZGluZworIyB0byB0aGUgYWl4IGxkIG1hbnVhbC4KK0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwKK1tBQ19MSU5LX0lGRUxTRShBQ19MQU5HX1BST0dSQU0sWworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpXSxbXSkKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorXSkjIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKworCisjIF9MVF9BQ19TSEVMTF9JTklUKEFSRykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSwKK1tpZmRlZihbQUNfRElWRVJTSU9OX05PVElDRV0sCisJICAgICBbQUNfRElWRVJUX1BVU0goQUNfRElWRVJTSU9OX05PVElDRSldLAorCSBbQUNfRElWRVJUX1BVU0goTk9USUNFKV0pCiskMQorQUNfRElWRVJUX1BPUAorXSkjIF9MVF9BQ19TSEVMTF9JTklUCisKKworIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBZGQgc29tZSBjb2RlIHRvIHRoZSBzdGFydCBvZiB0aGUgZ2VuZXJhdGVkIGNvbmZpZ3VyZSBzY3JpcHQgd2hpY2gKKyMgd2lsbCBmaW5kIGFuIGVjaG8gY29tbWFuZCB3aGljaCBkb2Vzbid0IGludGVycHJldCBiYWNrc2xhc2hlcy4KK0FDX0RFRlVOKFtfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSF0sCitbX0xUX0FDX1NIRUxMX0lOSVQoWworIyBDaGVjayB0aGF0IHdlIGFyZSBydW5uaW5nIHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KKworY2FzZSBYJEVDSE8gaW4KK1gqLS1mYWxsYmFjay1lY2hvKQorICAjIFJlbW92ZSBvbmUgbGV2ZWwgb2YgcXVvdGF0aW9uICh3aGljaCB3YXMgcmVxdWlyZWQgZm9yIE1ha2UpLgorICBFQ0hPPWBlY2hvICIkRUNITyIgfCBzZWQgJ3MsXFxcXFxbJF1cXFskXTAsJ1skXTAnLCdgCisgIDs7Citlc2FjCisKK2VjaG89JHtFQ0hPLWVjaG99CitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KKyAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgorICA6CitlbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KKyAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KKyAgZXhlYyAkU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CitmaQorCitpZiB0ZXN0ICJYWyRdMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PEVPRgorWyRdKgorRU9GCisgIGV4aXQgMAorZmkKKworIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKKyMgaWYgQ0RQQVRIIGlzIHNldC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworaWYgdGVzdCAteiAiJEVDSE8iOyB0aGVuCitpZiB0ZXN0ICJYJHtlY2hvX3Rlc3Rfc3RyaW5nK3NldH0iICE9IFhzZXQ7IHRoZW4KKyMgZmluZCBhIHN0cmluZyBhcyBsYXJnZSBhcyBwb3NzaWJsZSwgYXMgbG9uZyBhcyB0aGUgc2hlbGwgY2FuIGNvcGUgd2l0aCBpdAorICBmb3IgY21kIGluICdzZWQgNTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMnEgIlskXTAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgorICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKKyAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorZmkKKworaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgOgorZWxzZQorICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworICAjCisgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgZWNobz0iJGRpci9lY2hvIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgorICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICBlY2hvPSdwcmludCAtcicKKyAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgorCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KKyAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCisgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICBleGVjICRDT05GSUdfU0hFTEwgIlskXTAiIC0tbm8tcmVleGVjICR7MSsiWyRdQCJ9CisgICAgZWxzZQorICAgICAgIyBUcnkgdXNpbmcgcHJpbnRmLgorICAgICAgZWNobz0ncHJpbnRmICVzXG4nCisgICAgICBpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKwkgZWNob190ZXN0aW5nX3N0cmluZz1gKCRlY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwkjIENvb2wsIHByaW50ZiB3b3JrcworCToKKyAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRPUklHSU5BTF9DT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCisJZXhwb3J0IENPTkZJR19TSEVMTAorCVNIRUxMPSIkQ09ORklHX1NIRUxMIgorCWV4cG9ydCBTSEVMTAorCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwllY2hvPSIkQ09ORklHX1NIRUxMIFskXTAgLS1mYWxsYmFjay1lY2hvIgorICAgICAgZWxzZQorCSMgbWF5YmUgd2l0aCBhIHNtYWxsZXIgc3RyaW5nLi4uCisJcHJldj06CisKKwlmb3IgY21kIGluICdlY2hvIHRlc3QnICdzZWQgMnEgIlskXTAiJyAnc2VkIDEwcSAiWyRdMCInICdzZWQgMjBxICJbJF0wIicgJ3NlZCA1MHEgIlskXTAiJzsgZG8KKwkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCisJICB0aGVuCisJICAgIGJyZWFrCisJICBmaQorCSAgcHJldj0iJGNtZCIKKwlkb25lCisKKwlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIlskXTAiJzsgdGhlbgorCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKKwkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCisJICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiWyRdMCIgJHsxKyJbJF1AIn0KKwllbHNlCisJICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgZWNobz1lY2hvCisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK0VDSE89JGVjaG8KK2lmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisgICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcWyRdMCAtLWZhbGxiYWNrLWVjaG8iCitmaQorCitBQ19TVUJTVChFQ0hPKQorXSldKSMgX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0gKKworCisjIF9MVF9BQ19MT0NLCisjIC0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX0xPQ0tdLAorW0FDX0FSR19FTkFCTEUoW2xpYnRvb2wtbG9ja10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWRpc2FibGUtbGlidG9vbC1sb2NrXSwKKwlbYXZvaWQgbG9ja2luZyAobWlnaHQgYnJlYWsgcGFyYWxsZWwgYnVpbGRzKV0pXSkKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgKkVMRi0zMiopCisgICAgICBIUFVYX0lBNjRfTU9ERT0iMzIiCisgICAgICA7OworICAgICpFTEYtNjQqKQorICAgICAgSFBVWF9JQTY0X01PREU9IjY0IgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKyotKi1pcml4NiopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYnNtaXAiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJibWlwbjMyIgorICAgICAgOzsKKyAgICAqNjQtYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjY0Ym1pcCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZWxzZQorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAqMzItYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtMzIiCisgICAgICA7OworICAgICpOMzIqKQorICAgICAgTEQ9IiR7TEQtbGR9IC1uMzIiCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgTEQ9IiR7TEQtbGR9IC02NCIKKyAgICAgIDs7CisgICAgZXNhYworICAgZmkKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworCit4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnxzMzkwKi0qbGludXgqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICozMi1iaXQqKQorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICB4ODZfNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisgICAgICAgICAgOzsKKyAgICAgICAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKyAgICAgICAgICA7OworICAgICAgICBzMzkweC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYzY0LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICB4ODZfNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKKyAgICAgICAgICA7OworICAgICAgICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCisgICAgICAgICAgOzsKKyAgICAgICAgczM5MCotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKKyAgICAgICAgICA7OworICAgICAgICBzcGFyYyotKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKyotKi1zY28zLjJ2NSopCisgICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KKyAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCisgIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKKyAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGZdLCBsdF9jdl9jY19uZWVkc19iZWxmLAorICAgIFtBQ19MQU5HX1BVU0goQykKKyAgICAgQUNfVFJZX0xJTksoW10sW10sW2x0X2N2X2NjX25lZWRzX2JlbGY9eWVzXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj1ub10pCisgICAgIEFDX0xBTkdfUE9QXSkKKyAgaWYgdGVzdCB4IiRsdF9jdl9jY19uZWVkc19iZWxmIiAhPSB4InllcyI7IHRoZW4KKyAgICAjIHRoaXMgaXMgcHJvYmFibHkgZ2NjIDIuOC4wLCBlZ2NzIDEuMCBvciBuZXdlcjsgbm8gbmVlZCBmb3IgLWJlbGYKKyAgICBDRkxBR1M9IiRTQVZFX0NGTEFHUyIKKyAgZmkKKyAgOzsKK3NwYXJjKi0qc29sYXJpcyopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikgICAgTEQ9IiR7TEQtbGR9IC02NCIgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqKQorICBBQ19DSEVDS19UT09MKERMTFRPT0wsIGRsbHRvb2wsIGZhbHNlKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7CisgIF0pCitlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitdKSMgX0xUX0FDX0xPQ0sKKworCisjIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIwkJW09VVFBVVC1GSUxFXSwgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIHRoZSBnaXZlbiBjb21waWxlciBvcHRpb24gd29ya3MKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sCitbQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgIGlmZWxzZShbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKK10pCisKK2lmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCisgICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQorZmkKK10pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgorCisKKyMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCitbQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJDMiCisgICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkZWNobyAiWCRfbHRfbGlua2VyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgJDI9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgICQyPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIGlmZWxzZShbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKK2ZpCitdKSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OCisKKworIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwKK1sjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK0FDX01TR19DSEVDS0lORyhbdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHNdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbWF4X2NtZF9sZW5dLCBbZG5sCisgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKltbIAldXS8vJ2AKKyAgICBlbHNlCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MzI3NjgKKyAgICBmaQorICAgIDs7CisgICopCisgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAjIG1heGltdW0gbGVuZ3RoIHRoYXQgaXMgb25seSBoYWxmIG9mIHRoZSBhY3R1YWwgbWF4aW11bSBsZW5ndGgsIGJ1dAorICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQorICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8gIlgkdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgPSAiWFgkdGVzdHN0cmluZyIpID4vZGV2L251bGwgMj4mMSAmJgorCSAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgorCSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKKwkgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCisgICAgZG8KKyAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCisgICAgZG9uZQorICAgIHRlc3RzdHJpbmc9CisgICAgIyBBZGQgYSBzaWduaWZpY2FudCBzYWZldHkgZmFjdG9yIGJlY2F1c2UgQysrIGNvbXBpbGVycyBjYW4gdGFjayBvbiBtYXNzaXZlCisgICAgIyBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlIGxpbmtlci4KKyAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyAyYAorICAgIDs7CisgIGVzYWMKK10pCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIEFDX01TR19SRVNVTFQoJGx0X2N2X3N5c19tYXhfY21kX2xlbikKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChub25lKQorZmkKK10pIyBBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTgorCisKKyMgX0xUX0FDX0NIRUNLX0RMRkNOCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0sCitbQUNfQ0hFQ0tfSEVBREVSUyhkbGZjbi5oKWRubAorXSkjIF9MVF9BQ19DSEVDS19ETEZDTgorCisKKyMgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRiAoQUNUSU9OLUlGLVRSVUUsIEFDVElPTi1JRi1UUlVFLVctVVNDT1JFLAorIyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCitbQUNfUkVRVUlSRShbX0xUX0FDX0NIRUNLX0RMRkNOXSlkbmwKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgWyQ0XQorZWxzZQorICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCisgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK1sjbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgICAgZXhpdCAoc3RhdHVzKTsKK31dCitFT0YKKyAgaWYgQUNfVFJZX0VWQUwoYWNfbGluaykgJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mQVNfTUVTU0FHRV9MT0dfRkQgMj4vZGV2L251bGwKKyAgICBsdF9zdGF0dXM9JD8KKyAgICBjYXNlIHgkbHRfc3RhdHVzIGluCisgICAgICB4JGx0X2Rsbm9fdXNjb3JlKSAkMSA7OworICAgICAgeCRsdF9kbG5lZWRfdXNjb3JlKSAkMiA7OworICAgICAgeCRsdF9kbHVua25vd258eCopICQzIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgICQzCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorXSkjIF9MVF9BQ19UUllfRExPUEVOX1NFTEYKKworCisjIEFDX0xJQlRPT0xfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOX1NFTEZdLAorW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBBQ19DSEVDS19MSUIoW2RsXSwgW2Rsb3Blbl0sCisJCVtsdF9jdl9kbG9wZW49ImRsb3BlbiIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGwiXSxbCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIF0pCisgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQyhbc2hsX2xvYWRdLAorCSAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiXSwKKyAgICAgIFtBQ19DSEVDS19MSUIoW2RsZF0sIFtzaGxfbG9hZF0sCisJICAgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCJdKQorCSAgICAgIF0pCisJICAgIF0pCisJICBdKQorCV0pCisgICAgICBdKQorICAgIDs7CisgIGVzYWMKKworICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCisgICAgZW5hYmxlX2Rsb3Blbj15ZXMKKyAgZWxzZQorICAgIGVuYWJsZV9kbG9wZW49bm8KKyAgZmkKKworICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KKyAgZGxvcGVuKQorICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKKyAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKKworICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorCisgICAgc2F2ZV9MSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCisKKyAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKKwkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCisJICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCisgICAgXSkKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAorICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitdKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgorCisKKyMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAorW0FDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAorQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAorICBbX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKKyAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubworICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTpfX29saW5lX186IFwkPyA9ICRhY19zdGF0dXMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT15ZXMKKyAgICAgZmkKKyAgIGZpCisgICBjaG1vZCB1K3cgLiAyPiZBU19NRVNTQUdFX0xPR19GRAorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKK10pCitdKSMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTworCisKKyMgQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdLAorW0FDX1JFUVVJUkUoW19MVF9BQ19MT0NLXSlkbmwKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKSIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIEFDX01TR19DSEVDS0lORyhbaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzXSkKKyAgaGFyZF9saW5rcz15ZXMKKyAgJHJtIGNvbmZ0ZXN0KgorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICB0b3VjaCBjb25mdGVzdC5hCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPiY1IHx8IGhhcmRfbGlua3M9bm8KKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgQUNfTVNHX1JFU1VMVChbJGhhcmRfbGlua3NdKQorICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgorICAgIEFDX01TR19XQVJOKFtgJENDJyBkb2VzIG5vdCBzdXBwb3J0IGAtYyAtbycsIHNvIGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlXSkKKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKK10pIyBBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MKKworCisjIEFDX0xJQlRPT0xfT0JKRElSCisjIC0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3Igb2JqZGlyXSwgW2x0X2N2X29iamRpcl0sCitbcm0gLWYgLmxpYnMgMj4vZGV2L251bGwKK21rZGlyIC5saWJzIDI+L2Rldi9udWxsCitpZiB0ZXN0IC1kIC5saWJzOyB0aGVuCisgIGx0X2N2X29iamRpcj0ubGlicworZWxzZQorICAjIE1TLURPUyBkb2VzIG5vdCBhbGxvdyBmaWxlbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGEgZG90LgorICBsdF9jdl9vYmpkaXI9X2xpYnMKK2ZpCitybWRpciAubGlicyAyPi9kZXYvbnVsbF0pCitvYmpkaXI9JGx0X2N2X29iamRpcgorXSkjIEFDX0xJQlRPT0xfT0JKRElSCisKKworIyBBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSChbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXNdKQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKT0KK2lmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSIgfHwgXAorICAgdGVzdCAtbiAiJF9MVF9BQ19UQUdWQVIocnVucGF0aF92YXIsICQxKSIgfHwgXAorICAgdGVzdCAiWCRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK10pIyBBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSAorCisKKyMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUF0sCitbc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9CitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZV0pCitpZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgZ3JlcCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGRhcndpbiopCisgICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorICAgICAgIGVsc2UKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorZmkKKyAgICAgICA7OworICAgKikKKyAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIDs7CisgIGVzYWMKK2ZpCitdKSMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCisKKworIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2tmcmVlYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkW1sxMjNdXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuW1swMV1dKiB8IGZyZWVic2RlbGYzLltbMDFdXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzItOV1dKiB8IGZyZWVic2RlbGYzLltbMi05XV0qIHwgXAorICBmcmVlYnNkNC5bWzAtNV1dIHwgZnJlZWJzZGVsZjQuW1swLTVdXSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZCopICMgZnJvbSA0LjYgb24KKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgIGhwcGEqNjQqKQorICAgICBzaHJleHRfY21kcz0nLnNsJworICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICAgOzsKKyAgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgZmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZworICBsaWJzdWZmPQorICBjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCp8czM5MHgqfHBvd2VycGM2NCopCisgICAgZWNobyAnWyNdbGluZSBfX29saW5lX18gImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqNjQtYml0KikKKyAgICAgICAgbGlic3VmZj02NAorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIke2xpYnN1ZmZ9IC91c3IvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBybSAtcmYgY29uZnRlc3QqCisgICAgOzsKKyAgZXNhYworCisgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCisgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisgICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIiwgXFskXTIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFxbJF0wOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK2tuZXRic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworbnRvLXFueCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bWzg5XV0gfCBvcGVuYnNkMi5bWzg5XV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorXSkjIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSCisKKworIyBfTFRfQUNfVEFHQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSwKK1tBQ19BUkdfV0lUSChbdGFnc10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtdGFnc0A8OkA9VEFHU0A6PkBdLAorICAgICAgICBbaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIEA8OkBhdXRvbWF0aWNAOj5AXSldLAorICAgIFt0YWduYW1lcz0iJHdpdGh2YWwiXSkKKworaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgorICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCisgIGZpCisKKyAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCisgICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgorICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgorICAgICAgQUNfTVNHX1dBUk4oW291dHB1dCBmaWxlIGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0XSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCisgICAgZmkKKyAgZmkKKyAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgorICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCisgIGZpCisKKyAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCisgICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCisgIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAorCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCisgICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbWy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL11dOjpnJ2AgaW4KKyAgICAiIikgOzsKKyAgICAqKSAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCisJOzsKKyAgICBlc2FjCisKKyAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIEFDX01TR19FUlJPUihbdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzXSkKKyAgICBmaQorCisgICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCisKKyAgICAgIGNhc2UgJHRhZ25hbWUgaW4KKyAgICAgIENYWCkKKwlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKKwkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisJICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRworCWVsc2UKKwkgIHRhZ25hbWU9IiIKKwlmaQorCTs7CisKKyAgICAgIEY3NykKKwlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KKwkgIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCisJZWxzZQorCSAgdGFnbmFtZT0iIgorCWZpCisJOzsKKworICAgICAgR0NKKQorCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgorCSAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKKwllbHNlCisJICB0YWduYW1lPSIiCisJZmkKKwk7OworCisgICAgICBSQykKKwlBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCisJOzsKKworICAgICAgKikKKwlBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KKyAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KKyAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCisgICAgZmkKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KKyAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KKyAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgorICAgIGNobW9kICt4ICIkb2ZpbGUiCisgIGVsc2UKKyAgICBybSAtZiAiJHtvZmlsZX1UIgorICAgIEFDX01TR19FUlJPUihbdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuXSkKKyAgZmkKK2ZpCitdKSMgX0xUX0FDX1RBR0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9ETE9QRU4KKyMgLS0tLS0tLS0tLS0tLS0tLS0KKyMgZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCisgW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSkKK10pIyBBQ19MSUJUT09MX0RMT1BFTgorCisKKyMgQUNfTElCVE9PTF9XSU4zMl9ETEwKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgZGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIERMTHMKK0FDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCitbQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJUT09MX1NFVFVQXSkKK10pIyBBQ19MSUJUT09MX1dJTjMyX0RMTAorCisKKyMgQUNfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK0FDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKK1tkZWZpbmUoW0FDX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAorQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKKyAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zaGFyZWQ9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3NoYXJlZD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9TSEFSRUQKKworCisjIEFDX0RJU0FCTEVfU0hBUkVECisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCBzaGFyZWQgZmxhZyB0byAtLWRpc2FibGUtc2hhcmVkCitBQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9TSEFSRUQobm8pCitdKSMgQUNfRElTQUJMRV9TSEFSRUQKKworCisjIEFDX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZworIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCitbZGVmaW5lKFtBQ19FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoW3N0YXRpY10sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9TVEFUSUMKKworCisjIEFDX0RJU0FCTEVfU1RBVElDCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCBzdGF0aWMgZmxhZyB0byAtLWRpc2FibGUtc3RhdGljCitBQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9TVEFUSUMobm8pCitdKSMgQUNfRElTQUJMRV9TVEFUSUMKKworCisjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZworIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCitBQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKK0FDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKKyAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQorXSkjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwKKworCisjIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIHNldCB0aGUgZGVmYXVsdCB0byAtLWRpc2FibGUtZmFzdC1pbnN0YWxsCitBQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAorW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKK0FDX0VOQUJMRV9GQVNUX0lOU1RBTEwobm8pCitdKSMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwKKworCisjIEFDX0xJQlRPT0xfUElDTU9ERShbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnCisjIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKK1tBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCitwaWNfbW9kZT1pZmVsc2UoJCMsMSwkMSxkZWZhdWx0KQorXSkjIEFDX0xJQlRPT0xfUElDTU9ERQorCisKKyMgQUNfUFJPR19FR1JFUAorIyAtLS0tLS0tLS0tLS0tCisjIFRoaXMgaXMgcHJlZGVmaW5lZCBzdGFydGluZyB3aXRoIEF1dG9jb25mIDIuNTQsIHNvIHRoaXMgY29uZGl0aW9uYWwKKyMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgQXV0b2NvbmYgMi41NCBvciBsYXRlci4KK200X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sIFtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKKyAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCisgICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKKyAgICBmaV0pCisgRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKKyBBQ19TVUJTVChbRUdSRVBdKQorXSldKQorCisKKyMgQUNfUEFUSF9UT09MX1BSRUZJWAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbmlzZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAorQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAorW2Nhc2UgJE1BR0lDX0NNRCBpbgorW1tcXC8qXSB8ICA/OltcXC9dKl0pCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2RubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgorZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAorZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KKyAgYWNfZHVtbXk9ImlmZWxzZShbJDJdLCAsICRQQVRILCBbJDJdKSIKKyAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgorICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgorCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJImZpbGVfbWFnaWMgIiopCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKKwkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgorCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAorCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICA6CisJICBlbHNlCisJICAgIGNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCisqKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCisqKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKKyoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAorKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCisqKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91CisqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCisqKiogYnVnLWxpYnRvb2xAZ251Lm9yZworCitFT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK10pIyBBQ19QQVRIX1RPT0xfUFJFRklYCisKKworIyBBQ19QQVRIX01BR0lDCisjIC0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXNlIGEgc2hhcmVkIGxpYnJhcnkKK0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSwKK1tBQ19QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKK2lmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgIEFDX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIEFDX1BBVEhfTUFHSUMKKworCisjIEFDX1BST0dfTEQKKyMgLS0tLS0tLS0tLQorIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCitBQ19ERUZVTihbQUNfUFJPR19MRF0sCitbQUNfQVJHX1dJVEgoW2dudS1sZF0sCisgICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKKwlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKKyAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKKyAgICBbd2l0aF9nbnVfbGQ9bm9dKQorQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAorQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAorYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbworCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBkb25lCisgICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKKyAgICAgIDs7CisgICIiKQorICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgorICAgIGFjX3Byb2c9bGQKKyAgICA7OworICAqKQorICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KKyAgICB3aXRoX2dudV9sZD11bmtub3duCisgICAgOzsKKyAgZXNhYworZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCitlbHNlCisgIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQorZmkKK0FDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAorW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KKyAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCisgICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCisgICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgorICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCisgICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKyAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKKwk7OworICAgICAgKikKKwl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhaworCTs7CisgICAgICBlc2FjCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KK2ZpXSkKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTEQpCitlbHNlCisgIEFDX01TR19SRVNVTFQobm8pCitmaQordGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKK0FDX1BST0dfTERfR05VCitdKSMgQUNfUFJPR19MRAorCisKKyMgQUNfUFJPR19MRF9HTlUKKyMgLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKK1sjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCitjYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIGx0X2N2X3Byb2dfZ251X2xkPXllcworICA7OworKikKKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KKyAgOzsKK2VzYWNdKQord2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCitdKSMgQUNfUFJPR19MRF9HTlUKKworCisjIEFDX1BST0dfTERfUkVMT0FEX0ZMQUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKKyMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgorQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCisgIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK10pIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCisKKworIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCitBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAorW0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXNdLAorbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCitbbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCitsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJworIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0CisjIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCisjICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KKyMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgorIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgorIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgorIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAorIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KKyMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQorIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4NCogfCBhaXg1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW01MXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiknCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvdXNyL2Jpbi9maWxlIC1MJworICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vc2hsaWIvbGliYy5zbworICA7OworCitjeWd3aW4qKQorICAjIGZ1bmNfd2luMzJfbGliaWQgaXMgYSBzaGVsbCBmdW5jdGlvbiBkZWZpbmVkIGluIGx0bWFpbi5zaAorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgOzsKKworbWluZ3cqIHwgcHczMiopCisgICMgQmFzZSBNU1lTL01pbkdXIGRvIG5vdCBwcm92aWRlIHRoZSAnZmlsZScgY29tbWFuZCBuZWVkZWQgYnkKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIHNoZWxsIGZ1bmN0aW9uLCBzbyB1c2UgYSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlaSotaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2ZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICBpKjg2ICkKKyAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCisgICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgorICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbWzMtOV1dODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfEVMRi1bWzAtOV1dW1swLTldXSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIFtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gUEEtUklTQyBbMC05XS5bMC05XSddCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxQQS1SSVNDW1swLTldXS5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4MyopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCitudG8tcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bWzAtOV1dW1swLTldXSogVmVyc2lvbiBbWzAtOV1dJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTE1dXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorXSkjIEFDX0RFUExJQlNfQ0hFQ0tfTUVUSE9ECisKKworIyBBQ19QUk9HX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtY29tcGF0aWJsZSBuYW1lIGxpc3RlcgorQUNfREVGVU4oW0FDX1BST0dfTk1dLAorW0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELWNvbXBhdGlibGUgbm1dLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9OTSIgJiYgbHRfY3ZfcGF0aF9OTT1ubQorZmldKQorTk09IiRsdF9jdl9wYXRoX05NIgorXSkjIEFDX1BST0dfTk0KKworCisjIEFDX0NIRUNLX0xJQk0KKyMgLS0tLS0tLS0tLS0tLQorIyBjaGVjayBmb3IgbWF0aCBsaWJyYXJ5CitBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorTElCTT0KK2Nhc2UgJGhvc3QgaW4KKyotKi1iZW9zKiB8ICotKi1jeWd3aW4qIHwgKi0qLXB3MzIqIHwgKi0qLWRhcndpbiopCisgICMgVGhlc2Ugc3lzdGVtIGRvbid0IGhhdmUgbGlibSwgb3IgZG9uJ3QgbmVlZCBpdAorICA7OworKi1uY3Itc3lzdjQuMyopCisgIEFDX0NIRUNLX0xJQihtdywgX213dmFsaWRjaGVja2wsIExJQk09Ii1sbXciKQorICBBQ19DSEVDS19MSUIobSwgY29zLCBMSUJNPSIkTElCTSAtbG0iKQorICA7OworKikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iLWxtIikKKyAgOzsKK2VzYWMKK10pIyBBQ19DSEVDS19MSUJNCisKKworIyBBQ19MSUJMVERMX0NPTlZFTklFTkNFKFtESVJFQ1RPUlldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBzZXRzIExJQkxUREwgdG8gdGhlIGxpbmsgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGNvbnZlbmllbmNlIGxpYnJhcnkgYW5kCisjIExURExJTkNMIHRvIHRoZSBpbmNsdWRlIGZsYWdzIGZvciB0aGUgbGlibHRkbCBoZWFkZXIgYW5kIGFkZHMKKyMgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSB0byB0aGUgY29uZmlndXJlIGFyZ3VtZW50cy4gIE5vdGUgdGhhdAorIyBBQ19DT05GSUdfU1VCRElSUyBpcyBub3QgY2FsbGVkIGhlcmUuICBJZiBESVJFQ1RPUlkgaXMgbm90IHByb3ZpZGVkLAorIyBpdCBpcyBhc3N1bWVkIHRvIGJlIGBsaWJsdGRsJy4gIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoCisjICcke3RvcF9idWlsZGRpcn0vJyBhbmQgTFRETElOQ0wgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9zcmNkaXJ9LycKKyMgKG5vdGUgdGhlIHNpbmdsZSBxdW90ZXMhKS4gIElmIHlvdXIgcGFja2FnZSBpcyBub3QgZmxhdCBhbmQgeW91J3JlIG5vdAorIyB1c2luZyBhdXRvbWFrZSwgZGVmaW5lIHRvcF9idWlsZGRpciBhbmQgdG9wX3NyY2RpciBhcHByb3ByaWF0ZWx5IGluCisjIHRoZSBNYWtlZmlsZXMuCitBQ19ERUZVTihbQUNfTElCTFRETF9DT05WRU5JRU5DRV0sCitbQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorICBjYXNlICRlbmFibGVfbHRkbF9jb252ZW5pZW5jZSBpbgorICBubykgQUNfTVNHX0VSUk9SKFt0aGlzIHBhY2thZ2UgbmVlZHMgYSBjb252ZW5pZW5jZSBsaWJsdGRsXSkgOzsKKyAgIiIpIGVuYWJsZV9sdGRsX2NvbnZlbmllbmNlPXllcworICAgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWNvbnZlbmllbmNlIiA7OworICBlc2FjCisgIExJQkxUREw9JyR7dG9wX2J1aWxkZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkvbGlibHRkbGMubGEKKyAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKKyAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgorICBJTkNMVERMPSIkTFRETElOQ0wiCitdKSMgQUNfTElCTFRETF9DT05WRU5JRU5DRQorCisKKyMgQUNfTElCTFRETF9JTlNUQUxMQUJMRShbRElSRUNUT1JZXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBpbnN0YWxsYWJsZSBsaWJyYXJ5IGFuZAorIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCisjIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCB0byB0aGUgY29uZmlndXJlIGFyZ3VtZW50cy4gIE5vdGUgdGhhdAorIyBBQ19DT05GSUdfU1VCRElSUyBpcyBub3QgY2FsbGVkIGhlcmUuICBJZiBESVJFQ1RPUlkgaXMgbm90IHByb3ZpZGVkLAorIyBhbmQgYW4gaW5zdGFsbGVkIGxpYmx0ZGwgaXMgbm90IGZvdW5kLCBpdCBpcyBhc3N1bWVkIHRvIGJlIGBsaWJsdGRsJy4KKyMgTElCTFRETCB3aWxsIGJlIHByZWZpeGVkIHdpdGggJyR7dG9wX2J1aWxkZGlyfS8nIyBhbmQgTFRETElOQ0wgd2l0aAorIyAnJHt0b3Bfc3JjZGlyfS8nIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90CisjIGZsYXQgYW5kIHlvdSdyZSBub3QgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIKKyMgYXBwcm9wcmlhdGVseSBpbiB0aGUgTWFrZWZpbGVzLgorIyBJbiB0aGUgZnV0dXJlLCB0aGlzIG1hY3JvIG1heSBoYXZlIHRvIGJlIGNhbGxlZCBhZnRlciBBQ19QUk9HX0xJQlRPT0wuCitBQ19ERUZVTihbQUNfTElCTFRETF9JTlNUQUxMQUJMRV0sCitbQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfU0VUVVBdKWRubAorICBBQ19DSEVDS19MSUIobHRkbCwgbHRfZGxpbml0LAorICBbdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiAhPSB4eWVzICYmIGVuYWJsZV9sdGRsX2luc3RhbGw9bm9dLAorICBbaWYgdGVzdCB4IiRlbmFibGVfbHRkbF9pbnN0YWxsIiA9IHhubzsgdGhlbgorICAgICBBQ19NU0dfV0FSTihbbGlibHRkbCBub3QgaW5zdGFsbGVkLCBidXQgaW5zdGFsbGF0aW9uIGRpc2FibGVkXSkKKyAgIGVsc2UKKyAgICAgZW5hYmxlX2x0ZGxfaW5zdGFsbD15ZXMKKyAgIGZpCisgIF0pCisgIGlmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4InllcyI7IHRoZW4KKyAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzIC0tZW5hYmxlLWx0ZGwtaW5zdGFsbCIKKyAgICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGwubGEKKyAgICBMVERMSU5DTD0nLUkke3RvcF9zcmNkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKQorICBlbHNlCisgICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGw9bm8iCisgICAgTElCTFRETD0iLWxsdGRsIgorICAgIExURExJTkNMPQorICBmaQorICAjIEZvciBiYWNrd2FyZHMgbm9uLWdldHRleHQgY29uc2lzdGVudCBjb21wYXRpYmlsaXR5Li4uCisgIElOQ0xUREw9IiRMVERMSU5DTCIKK10pIyBBQ19MSUJMVERMX0lOU1RBTExBQkxFCisKKworIyBBQ19MSUJUT09MX0NYWAorIyAtLS0tLS0tLS0tLS0tLQorIyBlbmFibGUgc3VwcG9ydCBmb3IgQysrIGxpYnJhcmllcworQUNfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwKK1tBQ19SRVFVSVJFKFtfTFRfQUNfTEFOR19DWFhdKQorXSkjIEFDX0xJQlRPT0xfQ1hYCisKKworIyBfTFRfQUNfTEFOR19DWFgKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCitBQ19SRVFVSVJFKFtfTFRfQUNfUFJPR19DWFhDUFBdKQorX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUNYWF0pCitdKSMgX0xUX0FDX0xBTkdfQ1hYCisKKyMgX0xUX0FDX1BST0dfQ1hYQ1BQCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19QUk9HX0NYWENQUF0sCitbCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZmkKK10pIyBfTFRfQUNfUFJPR19DWFhDUFAKKworIyBBQ19MSUJUT09MX0Y3NworIyAtLS0tLS0tLS0tLS0tLQorIyBlbmFibGUgc3VwcG9ydCBmb3IgRm9ydHJhbiA3NyBsaWJyYXJpZXMKK0FDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sCitbQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfRjc3XSkKK10pIyBBQ19MSUJUT09MX0Y3NworCisKKyMgX0xUX0FDX0xBTkdfRjc3CisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10sCitbQUNfUkVRVUlSRShbQUNfUFJPR19GNzddKQorX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUY3N10pCitdKSMgX0xUX0FDX0xBTkdfRjc3CisKKworIyBBQ19MSUJUT09MX0dDSgorIyAtLS0tLS0tLS0tLS0tLQorIyBlbmFibGUgc3VwcG9ydCBmb3IgR0NKIGxpYnJhcmllcworQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwKK1tBQ19SRVFVSVJFKFtfTFRfQUNfTEFOR19HQ0pdKQorXSkjIEFDX0xJQlRPT0xfR0NKCisKKworIyBfTFRfQUNfTEFOR19HQ0oKKyMgLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKXSwKK1tBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19HQ0pdLFtdLAorICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLFtdLAorICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfQUNfUFJPR19HQ0pdLFtdLAorICAgICAgW2lmZGVmKFtBQ19QUk9HX0dDSl0sW0FDX1JFUVVJUkUoW0FDX1BST0dfR0NKXSldLAorCSBbaWZkZWYoW0FdW01fUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBXVtNX1BST0dfR0NKXSldLAorCSAgIFtBQ19SRVFVSVJFKFtBXVtDX1BST0dfR0NKX09SX0FdW01fUFJPR19HQ0pdKV0pXSldKV0pXSkKK19MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1HQ0pdKQorXSkjIF9MVF9BQ19MQU5HX0dDSgorCisKKyMgQUNfTElCVE9PTF9SQworIyAtLS0tLS0tLS0tLS0tCisjIGVuYWJsZSBzdXBwb3J0IGZvciBXaW5kb3dzIHJlc291cmNlIGZpbGVzCitBQ19ERUZVTihbQUNfTElCVE9PTF9SQ10sCitbQUNfUkVRVUlSRShbTFRfQUNfUFJPR19SQ10pCitfTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9UkNdKQorXSkjIEFDX0xJQlRPT0xfUkMKKworCisjIEFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCisjIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5CisjIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLCBbX0xUX0FDX0xBTkdfQ19DT05GSUddKQorQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSwKK1tsdF9zYXZlX0NDPSIkQ0MiCitBQ19MQU5HX1BVU0goQykKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7XG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO31cbicKKworX0xUX0FDX1NZU19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKK0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQorQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKK0FDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCitBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCitBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQorQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCitBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKK0FDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAorQUNfTElCVE9PTF9ETE9QRU5fU0VMRgorCisjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKK0FDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK0FDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQordGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgZmkKKyAgOzsKKworYWl4NCogfCBhaXg1KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGZpCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfc2hhcmVkXSkKKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCit0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKK0FDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworQUNfTElCVE9PTF9DT05GSUcoJDEpCisKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHCisKKworIyBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJzIGZvciB0aGUgQyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRob3NlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkKKyMgQUNfTElCVE9PTF9DT05GSUcgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DWFhfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NYWF9DT05GSUcoQ1hYKV0pCitBQ19ERUZVTihbX0xUX0FDX0xBTkdfQ1hYX0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEMrKykKK0FDX1JFUVVJUkUoW0FDX1BST0dfQ1hYXSkKK0FDX1JFUVVJUkUoW19MVF9BQ19QUk9HX0NYWENQUF0pCisKK19MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKT0KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9bm8KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CitfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQorX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgorX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KK19MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSBhbmQgYWZ0ZXIgdGhlIG9iamVjdCBiZWluZyBsaW5rZWQ6CitfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9CitfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPQorX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSk9CitfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9CitfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jcHAKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDtcbiIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfVxuJworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfQUNfU1lTX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9JENDCitsdF9zYXZlX0xEPSRMRAorbHRfc2F2ZV9HQ0M9JEdDQworR0NDPSRHWFgKK2x0X3NhdmVfd2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCitsdF9zYXZlX3BhdGhfTEQ9JGx0X2N2X3BhdGhfTEQKK2lmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgbHRfY3ZfcHJvZ19nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkY3h4CitlbHNlCisgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorZmkKK2lmIHRlc3QgLW4gIiR7bHRfY3ZfcGF0aF9MRENYWCtzZXR9IjsgdGhlbgorICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCitlbHNlCisgICRhc191bnNldCBsdF9jdl9wYXRoX0xECitmaQordGVzdCAteiAiJHtMRENYWCtzZXR9IiB8fCBMRD0kTERDWFgKK0NDPSR7Q1hYLSJjKysifQorY29tcGlsZXI9JENDCitfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3ZW4gY29tcGlsaW5nIEMrKyBjb2RlLCBzbyBzZXQgdGhlCisjIG5vX2J1aWx0aW5fZmxhZyBzZXBhcmF0ZWx5CitpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCitlbHNlCisgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KK2ZpCisKK2lmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgQUNfUFJPR19MRAorCisgICMgQ2hlY2sgaWYgR05VIEMrKyB1c2VzIEdOVSBsZCBhcyB0aGUgdW5kZXJseWluZyBsaW5rZXIsIHNpbmNlIHRoZQorICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICAjIFhYWCBJIHRoaW5rIHdsYXJjIGNhbiBiZSBlbGltaW5hdGVkIGluIGx0Y2YtY3h4LCBidXQgSSBuZWVkIHRvCisgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIGFuY2llbnQgR05VIGxkIGRpZG4ndCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZSBldC4gYWwuCisgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfCBcCisJZ3JlcCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgd2xhcmM9CisKKyAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICMgY29tbWFuZCBmb3IgR05VIEMrKyBmb3IgdGhlIGNhc2Ugd2hlcmUgaXQgdXNlcyB0aGUgbmF0aXZlCisgICAgIyBsaW5rZXIsIGluc3RlYWQgb2YgR05VIGxkLiAgSWYgcG9zc2libGUsIHRoaXMgc2V0dGluZyBzaG91bGQKKyAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAjIHRoZSBwbGF0Zm9ybSBpdCBpcyBiZWluZyB1c2VkIG9uLgorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgZmkKKworICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKKworZWxzZQorICBHWFg9bm8KKyAgd2l0aF9nbnVfbGQ9bm8KKyAgd2xhcmM9CitmaQorCisjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCitfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKKyAgYWl4NCogfCBhaXg1KikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgIGVsc2UKKyAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4NSopCisJZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBjYXNlICRsZF9mbGFnIGluCisJICAqLWJydGwqKQorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgICAgZXNhYworCisgICAgICBleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgIGZpCisKKyAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKKyAgICAgICMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCWNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKKwlpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCXRoZW4KKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwllbHNlCisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCXNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworICAgICAgZmkKKyAgICBlbHNlCisgICAgICAjIG5vdCB1c2luZyBnY2MKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKwkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCXNoYXJlZF9mbGFnPSctRycKKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCWVsc2UKKwkgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJZmkKKyAgICAgIGZpCisgICAgZmkKKworICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCisgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgZWxzZQorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisgICAgICBlbHNlCisJIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJX0xUX0FDX1NZU19MSUJQQVRIX0FJWAorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm9rJworCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICBmaQorICAgIGZpCisgICAgOzsKKworICBiZW9zKikKKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICBmaQorICAgIDs7CisKKyAgY2hvcnVzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisgICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgZWxzZQorCWVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisgICAgICBmaX4KKyAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKyAgICBlbHNlCisgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgZmkKKyAgOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQorICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIDs7CisgICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KKyAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KKyAgICAgICAgICAgICAxMC5bWzAxMl1dKQorICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgMTAuKikKKyAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KKyAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgIGlmICRDQyAtZHVtcHNwZWNzIDI+JjEgfCAkRUdSRVAgJ3NpbmdsZV9tb2R1bGUnID4vZGV2L251bGwgOyB0aGVuCisgICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgorICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgZWxzZQorICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCisgICAgICAgIGZpCisgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgorICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIGZpCisgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBlbHNlCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR2ZXJzdHJpbmcnCisgICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAgIDs7CisKKyAgZGd1eCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGVjKysqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgZ2hjeCopCisJIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgZXNhYworICAgIDs7CisgIGZyZWVic2RbWzEyXV0qKQorICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUgc3dpdGNoIHRvIEVMRgorICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICA7OworICBmcmVlYnNkLWVsZiopCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgOzsKKyAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgICAjIEZyZWVCU0QgMyBhbmQgbGF0ZXIgdXNlIEdOVSBDKysgYW5kIEdOVSBsZCB3aXRoIHN0YW5kYXJkIEVMRgorICAgICMgY29udmVudGlvbnMKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgIDs7CisgIGdudSopCisgICAgOzsKKyAgaHB1eDkqKQorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBDQyopCisgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgYUNDKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICMKKyAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJbWy1dXUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisgICAgICA7OworICAgICopCisgICAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBocHV4MTAqfGhwdXgxMSopCisgICAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisgICAgICAgIDs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCQkgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdAorCQkJCQkgICAgICAjIGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgYUNDKikKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAoJENDIC1iICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxKSB8IGdyZXAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorCSAgaWYgdGVzdCAkd2l0aF9nbnVfbGQgPSBubzsgdGhlbgorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KikKKwkgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgOzsKKwkgICAgaWE2NCopCisJICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgZmkKKwllbHNlCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIGludGVyaXgzKikKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5CisgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCisgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICA7OworICBpcml4NSogfCBpcml4NiopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwkjIFNHSSBDKysKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkjIGluIHRoZSBhcmNoaXZlLgorCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgLW8gJGxpYicKKwkgIGZpCisJZmkKKwlfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwk7OworICAgIGVzYWMKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICA7OworICBsaW51eCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIEtDQyopCisJIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJworCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkjCisJIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSMgZGVwZW5kZW5jaWVzLgorCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCBncmVwICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGgsJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICBpY3BjKikKKwkjIEludGVsIEMrKworCXdpdGhfZ251X2xkPXllcworCSMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCisJIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKKwkjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiVmVyc2lvbiA3LiIqKQorICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgOzsKKwkqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgorCSAgdG1wX2lkeW49CisJICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJICBlc2FjCisgIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICA7OworCWVzYWMKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwk7OworICAgICAgcGdDQyopCisgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisgIAlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJworCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgICAgOzsKKyAgICAgIGN4eCopCisJIyBDb21wYXEgQysrCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkjCisJIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQorCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSMgZGVwZW5kZW5jaWVzLgorCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbHlueG9zKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKKyAgbTg4ayopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgIG12cyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGN4eCopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICBuZXRic2QqKQorICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworICAgICAgd2xhcmM9CisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgZmkKKyAgICAjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCisgICAgOzsKKyAgb3BlbmJzZDIqKQorICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJGxpYicKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGZpCisgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgOzsKKyAgb3NmMyopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIEtDQyopCisJIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKKwkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCisKKwk7OworICAgICAgUkNDKikKKwkjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgICAgY3h4KikKKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSMKKwkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisJIyBkZXBlbmRlbmNpZXMuCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKKworCWVsc2UKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgb3NmNCogfCBvc2Y1KikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgS0NDKikKKwkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnCisJOzsKKyAgICAgIFJDQyopCisJIyBSYXRpb25hbCBDKysgMi40LjEKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgIGN4eCopCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAtV2wsLWlucHV0IC1XbCwkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uCSR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICRybSAkbGliLmV4cCcKKworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKKworCWVsc2UKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWZpCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgcHNvcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgIDs7CisgIHN1bm9zNCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwkjIFN1biBDKysgNC54CisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICBsY2MqKQorCSMgTHVjaWQKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgZXNhYworICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCWNhc2UgJGhvc3Rfb3MgaW4KKwkgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisJICAqKQorCSAgICAjIFRoZSBDKysgY29tcGlsZXIgaXMgdXNlZCBhcyBsaW5rZXIgc28gd2UgbXVzdCB1c2UgJHdsCisJICAgICMgZmxhZyB0byBwYXNzIHRoZSBjb21tYW5kcyB0byB0aGUgdW5kZXJseWluZyBzeXN0ZW0KKwkgICAgIyBsaW5rZXIuIFdlIG11c3QgYWxzbyBwYXNzIGVhY2ggY29udmllbmNlIGxpYnJhcnkgdGhyb3VnaAorCSAgICAjIHRvIHRoZSBzeXN0ZW0gbGlua2VyIGJldHdlZW4gYWxsZXh0cmFjdC9kZWZhdWx0ZXh0cmFjdC4KKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIHdpbGwgY29tYmluZSBsaW5rZXIgb3B0aW9ucyBzbyB3ZQorCSAgICAjIGNhbm5vdCBqdXN0IHBhc3MgdGhlIGNvbnZpZW5jZSBsaWJyYXJ5IG5hbWVzIHRocm91Z2gKKwkgICAgIyB3aXRob3V0ICR3bC4KKwkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJICAgIDs7CisJZXNhYworCV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkjIGluIHRoZSBhcmNoaXZlLgorCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICBnY3gqKQorCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICAqKQorCSMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgIGlmICRDQyAtLXZlcnNpb24gfCBncmVwIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKKwkgIGVsc2UKKwkgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAjIHBsYXRmb3JtLgorCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgorCSAgZmkKKworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCisgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgIyBhcyAteiBkZWZzLgorICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKyAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisgICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKyAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCisgICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCisgICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgorICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKKyAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgorICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwk7OworICAgICAgKikKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgZXNhYworICAgIDs7CisgIHRhbmRlbSopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIE5DQyopCisJIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICB2eHdvcmtzKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKKyAgKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworX0xUX0FDX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKK19MVF9BQ19UQUdWQVIoTEQsICQxKT0iJExEIgorCitBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKCQxKQorQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKK0FDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCitBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCitBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQorQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCitBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKKworQUNfTElCVE9PTF9DT05GSUcoJDEpCisKK0FDX0xBTkdfUE9QCitDQz0kbHRfc2F2ZV9DQworTERDWFg9JExECitMRD0kbHRfc2F2ZV9MRAorR0NDPSRsdF9zYXZlX0dDQword2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCit3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECitsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKK2x0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitdKSMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKKworIyBBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCisjIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5CisjIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSxbCitkbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKK2RubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCitkbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCitkbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAorZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCitpZmVsc2UoWyQxXSxbXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorRU9GCitdLFskMV0sW0NYWF0sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK0VPRgorXSxbJDFdLFtGNzddLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisgICAgICBzdWJyb3V0aW5lIGZvbworICAgICAgaW1wbGljaXQgbm9uZQorICAgICAgaW50ZWdlcio0IGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK0VPRgorXSxbJDFdLFtHQ0pdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCitwdWJsaWMgY2xhc3MgZm9vIHsKKyAgcHJpdmF0ZSBpbnQgYTsKKyAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7CisgICAgYSA9IDA7CisgIH0KK307CitFT0YKK10pCitkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Citkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgoraWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgorICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCisgICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgorICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKKworICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCisJICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KKwkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KKwkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRybSAtZiBjb25mZXN0LiRvYmpleHQKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK2lmZWxzZShbJDFdLFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXgzKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKKworc29sYXJpcyopCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIENDKikKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbENzdGQgLWxDcnVuJworICAgIDs7CisgIGVzYWMKKyAgOzsKK2VzYWMKK10pCisKK2Nhc2UgIiAkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpICIgaW4KKyoiIC1sYyAiKikgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vIDs7Citlc2FjCitdKSMgQUNfTElCVE9PTF9QT1NUREVQX1BSRURFUAorCisjIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQorIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUddLCBbX0xUX0FDX0xBTkdfRjc3X0NPTkZJRyhGNzcpXSkKK0FDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzdfQ09ORklHXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0Y3N10pCitBQ19MQU5HX1BVU0goRm9ydHJhbiA3NykKKworX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCitfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCitfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KK19MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPQorX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9CitfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSIgICAgICBzdWJyb3V0aW5lIHRcbiAgICAgIHJldHVyblxuICAgICAgZW5kXG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiAgICAgIHByb2dyYW0gdFxuICAgICAgZW5kXG4iCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KK19MVF9BQ19TWVNfQ09NUElMRVIKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorQ0M9JHtGNzctImY3NyJ9Citjb21waWxlcj0kQ0MKK19MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKworQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorQUNfTVNHX1JFU1VMVChbJGNhbl9idWlsZF9zaGFyZWRdKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCit0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCisjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICBmaQorICA7OworYWl4NCogfCBhaXg1KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgIGZpCisgIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKKyMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgordGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCisKK19MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHNzciCitfTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKKworQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKK0FDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCitBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCitBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQorQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCitBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKKworQUNfTElCVE9PTF9DT05GSUcoJDEpCisKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKKworCisjIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQorIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLCBbX0xUX0FDX0xBTkdfR0NKX0NPTkZJRyhHQ0opXSkKK0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwKK1tBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge31cbiIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfVxuJworCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfQUNfU1lTX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK0NDPSR7R0NKLSJnY2oifQorY29tcGlsZXI9JENDCitfTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyMgR0NKIGRpZCBub3QgZXhpc3QgYXQgdGhlIHRpbWUgR0NDIGRpZG4ndCBpbXBsaWNpdGx5IGxpbmsgbGliYyBpbi4KK19MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCitfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworCitBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSSgkMSkKK0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoJDEpCitBQ19MSUJUT09MX1BST0dfQ0NfQ19PKCQxKQorQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUygkMSkKK0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoJDEpCisKK0FDX0xJQlRPT0xfQ09ORklHKCQxKQorCitBQ19MQU5HX1JFU1RPUkUKK0NDPSIkbHRfc2F2ZV9DQyIKK10pIyBBQ19MSUJUT09MX0xBTkdfR0NKX0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBXaW5kb3dzIHJlc291cmNlIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQorIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCitBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJR10sIFtfTFRfQUNfTEFOR19SQ19DT05GSUcoUkMpXSkKK0FDX0RFRlVOKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAorW0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgUkMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PXJjCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBSQyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9J3NhbXBsZSBNRU5VIHsgTUVOVUlURU0gIiZTb3VwIiwgMTAwLCBDSEVDS0VEIH1cbicKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX0FDX1NZU19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitDQz0ke1JDLSJ3aW5kcmVzIn0KK2NvbXBpbGVyPSRDQworX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworCitBQ19MSUJUT09MX0NPTkZJRygkMSkKKworQUNfTEFOR19SRVNUT1JFCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRworCisKKyMgQUNfTElCVE9PTF9DT05GSUcoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBR05BTUUgaXMgbm90IHBhc3NlZCwgdGhlbiBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdAorIyB3aXRoIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlCisjIGFkZCBjb2RlIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieQorIyBUQUdOQU1FIGZyb20gdGhlIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KK0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10sCitbIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCisjIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAorIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCisjIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAorICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgZmkKKyAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZworICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKKyAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgorICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCisgICAgU0VEIFNIRUxMIFNUUklQIFwKKyAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKKyAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihDQywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKExELCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIocG9zdGluc3RhbGxfY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKHBvc3R1bmluc3RhbGxfY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSBcCisgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpIFwKKyAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSkgXAorICAgIF9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIHwgXAorICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpIHwgXAorICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpIHwgXAorICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKSB8IFwKKyAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKSB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCisgICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCisgICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICBjYXNlICRsdF9lY2hvIGluCisgIConXFskXTAgLS1mYWxsYmFjay1lY2hvIicpCisgICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcWyRdMCAtLWZhbGxiYWNrLWVjaG8iWyRdL1skXTAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAgIDs7CisgIGVzYWMKKworaWZlbHNlKFskMV0sIFtdLAorICBbY2ZnZmlsZT0iJHtvZmlsZX1UIgorICB0cmFwICIkcm0gXCIkY2ZnZmlsZVwiOyBleGl0IDEiIDEgMiAxNQorICAkcm0gLWYgIiRjZmdmaWxlIgorICBBQ19NU0dfTk9USUNFKFtjcmVhdGluZyAkb2ZpbGVdKV0sCisgIFtjZmdmaWxlPSIkb2ZpbGUiXSkKKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKK2lmZWxzZShbJDFdLCBbXSwKK1sjISAkU0hFTEwKKworIyBgJGVjaG8gIiRjZmdmaWxlIiB8IHNlZCAncyVeLiovJSUnYCAtIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIyBHZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCkKKyMgTk9URTogQ2hhbmdlcyBtYWRlIHRvIHRoaXMgZmlsZSB3aWxsIGJlIGxvc3Q6IGxvb2sgYXQgbHRtYWluLnNoLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sOgorIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIEEgc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuCitTRUQ9JGx0X1NFRAorCisjIFNlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uLgorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCisjIFRoZSBuYW1lcyBvZiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHN1cHBvcnRlZCBieSB0aGlzIHNjcmlwdC4KK2F2YWlsYWJsZV90YWdzPQorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJR10sCitbIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZV0pCisKKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKK2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSkKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitlY2hvPSRsdF9lY2hvCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9MVENDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9MVENGTEFHUworCisjIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyLCAkMSkKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JF9MVF9BQ19UQUdWQVIoR0NDLCAkMSkKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfW11fTFRfQUNfVEFHVkFSKExELCAkMSkKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kbHRfU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSIkYWNfb2JqZXh0IgorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSIkZXhlZXh0IgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKQorcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkKKworIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSkKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKQorCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKQorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKQorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KK3RocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKQorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKQorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKQorcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCittb2R1bGVfY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSkKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfW11fTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBfb2JqZWN0cz0kbHRfW11fTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBzPSRsdF9bXV9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBzPSRsdF9bXV9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKQorCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKQorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSkKKworIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSkKKworIyBXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzLgoraGFyZGNvZGVfaW50b19saWJzPSRoYXJkY29kZV9pbnRvX2xpYnMKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpCisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bworIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCisjIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSkKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSkKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSkKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KKyMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKQorCisjIFNldCB0byB5ZXMgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIgaW50byB0aGUgbGlicmFyeQorIyBhbmQgYWxsIHN1YnNlcXVlbnQgbGlicmFyaWVzIGFuZCBleGVjdXRhYmxlcyBsaW5rZWQgYWdhaW5zdCBpdC4KK2hhcmRjb2RlX2F1dG9tYXRpYz0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKQorCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSkKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIkX0xUX0FDX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSkiCisKKyMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KK2Fsd2F5c19leHBvcnRfc3ltYm9scz0kX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKQorCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKQorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpCisKK2lmZWxzZShbJDFdLFtdLAorWyMgIyMjIEVORCBMSUJUT09MIENPTkZJR10sCitbIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQorCitfX0VPRl9fCisKK2lmZWxzZShbJDFdLFtdLCBbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCisKKyMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQorIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCisjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCitpZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KKyAgQ09MTEVDVF9OQU1FUz0KKyAgZXhwb3J0IENPTExFQ1RfTkFNRVMKK2ZpCitFT0YKKyAgICA7OworICBlc2FjCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorXSkKK2Vsc2UKKyAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQorICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKKyAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgorICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKKyAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KKyAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCisgIGZpCitmaQorXSkjIEFDX0xJQlRPT0xfQ09ORklHCisKKworIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSShbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0sCitbQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCisKK19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKworaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworCisgIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sCisgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMsCisgICAgWy1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnNdLCBbXSwKKyAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPSIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiXSkKK2ZpCitdKSMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX05PX1JUVEkKKworCisjIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSkKK0FDX1JFUVVJUkUoW0FDX1BST0dfTk1dKQorQUNfUkVRVUlSRShbQUNfT0JKRVhUXSkKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUgXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikgIyBJdHMgbGlua2VyIGRpc3Rpbmd1aXNoZXMgZGF0YSBmcm9tIGNvZGUgc3ltYm9scworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgIHN5bWNvZGU9J1tbQUJDREVHUlNUXV0nCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCisgIDs7CitsaW51eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmMoKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK0VPRgorCisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCisgICAgbmxpc3Q9Y29uZnRlc3Qubm0KKyAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisjaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCisjIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKKyNlbHNlCisjIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKKyMgZGVmaW5lIGNvbnN0CisjZW5kaWYKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBsdF9wdHJfdCBhZGRyZXNzOworfQorbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKK0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAobHRfcHRyX3QpIDB9Cit9OworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorRU9GCisJICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgorCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0CisJICBsdF9zYXZlX0xJQlM9IiRMSUJTIgorCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgorCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKKwkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKwkgICAgcGlwZV93b3Jrcz15ZXMKKwkgIGZpCisJICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgorCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCisJZWxzZQorCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICBmaQorICBlbHNlCisgICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCitdKQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQorZmkKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKGZhaWxlZCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChvaykKK2ZpCitdKSAjIEFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQorCisKKyMgQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLAorW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPQorX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDXSkKKyBpZmVsc2UoWyQxXSxbQ1hYXSxbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgIDs7CisgICAgYmVvcyogfCBjeWd3aW4qIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKyAgICBtaW5ndyogfCBvczIqIHwgcHczMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnCisgICAgICA7OworICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKyAgICAqZGpncHAqKQorICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXgzKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQqIHwgYWl4NSopCisJIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwllbHNlCisJICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKKwlmaQorCTs7CisgICAgICBjaG9ydXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJY3hjaDY4KikKKwkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0iLS1ub19hdXRvX2luc3RhbnRpYXRpb24gLXUgX19tYWluIC11IF9fcHJlbWFpbiAtdSBfYWJvcnQgLXIgJENPT0xfRElSL2xpYi9saWJPcmIuYSAkTVZNRV9ESVIvbGliL0NDL2xpYkMuYSAkTVZNRV9ESVIvbGliL2NsYXNzaXgvbGliY3gucy5hIgorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgICBkYXJ3aW4qKQorICAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICAgeGxjKikKKyAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcW5vY29tbW9uJworICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICAgICAgOzsKKyAgICAgICAgIGVzYWMKKyAgICAgICA7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKKwk7OworICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCisJICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCisJICAgIGZpCisJICAgIDs7CisJICBhQ0MqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaHBwYSo2NCp8aWE2NCopCisJICAgICAgIyArWiB0aGUgZGVmYXVsdAorCSAgICAgIDs7CisJICAgICopCisJICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgaW50ZXJpeCopCisJIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCisJIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PworCTs7CisgICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgorCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGxpbnV4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgIyBLQUkgQysrIENvbXBpbGVyCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKwkgICAgOzsKKwkgIGljcGMqIHwgZWNwYyopCisJICAgICMgSW50ZWwgQysrCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIuCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mcGljJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBDb21wYXEgQysrCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbHlueG9zKikKKwk7OworICAgICAgbTg4ayopCisJOzsKKyAgICAgIG12cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGN4eCopCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVcgYyxleHBvcnRhbGwnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbmV0YnNkKikKKwk7OworICAgICAgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCisJICAgIDs7CisJICBSQ0MqKQorCSAgICAjIFJhdGlvbmFsIEMrKyAyLjQuMQorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIERpZ2l0YWwvQ29tcGFxIEMrKworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBwc29zKikKKwk7OworICAgICAgc29sYXJpcyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworCSAgICA7OworCSAgZ2N4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN1bm9zNCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgIyBTdW4gQysrIDQueAorCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBsY2MqKQorCSAgICAjIEx1Y2lkCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB0YW5kZW0qKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBOQ0MqKQorCSAgICAjIE5vblN0b3AtVVggTkNDIDMuMjAKKwkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgdnh3b3JrcyopCisJOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworCTs7CisgICAgZXNhYworICBmaQorXSwKK1sKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICA7OworCisgICAgYmVvcyogfCBjeWd3aW4qIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgorICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisKKyAgICBpbnRlcml4MyopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKyAgICAgIGRhcndpbiopCisgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICB4bGMqKQorICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcW5vY29tbW9uJworICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICA7OworICAgICAgIGVzYWMKKyAgICAgICA7OworCisgICAgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJworICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbmV3c29zNikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBpY2MqIHwgZWNjKikKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnOzsKKyAgICAgICopCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqKQorICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisJX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS2NvbmZvcm1fcGljJworCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHVuaWNvcyopCisgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSldKQorCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCitpZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIjsgdGhlbgorICBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTihbaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgd29ya3NdLAorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MsICQxKSwKKyAgICBbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKV0sIFtdLAorICAgIFtjYXNlICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiAkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIiA7OworICAgICBlc2FjXSwKKyAgICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vXSkKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKyAgICA7OworICAqKQorICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKWlmZWxzZShbJDFdLFtdLFsgLURQSUNdLFtpZmVsc2UoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpXCIKK0FDX0xJQlRPT0xfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitdKQorCisKKyMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZWUgaWYgdGhlIGxpbmtlciBzdXBwb3J0cyBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAorW0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKK2lmZWxzZShbJDFdLFtDWFhdLFsKKyAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXg0KiB8IGFpeDUqKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgorICA7OworICBjeWd3aW4qIHwgbWluZ3cqKQorICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXSAvcy8uKiBcKFtbXiBdXSpcKS9cMSBEQVRBLzsvXi4qIF9fbm1fXy9zL14uKiBfX25tX19cKFtbXiBdXSpcKSBbW14gXV0qL1wxIERBVEEvOy9eSSAvZDsvXltbQUlUV11dIC9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICA7OworICAqKQorICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgIGVzYWMKK10sWworICBydW5wYXRoX3Zhcj0KKyAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQorICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCisgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCisgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KKyAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CisgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIF9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCisgIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIGVsc2UKKyAgCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCisgICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgorICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgorICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKKyAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKKyAgICBlc2FjCisKKyAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyogfCBhaXg0KiB8IGFpeDUqKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiB0aGUgR05VIGxpbmtlciwgYXQgbGVhc3QgdXAgdG8gcmVsZWFzZSAyLjkuMSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBtb2RpZnkgeW91ciBQQVRICisqKiogc28gdGhhdCBhIG5vbi1HTlUgbGlua2VyIGlzIGZvdW5kLCBhbmQgdGhlbiByZXN0YXJ0LgorCitFT0YKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCisgICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cworICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKKyAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAorICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKKyAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQorICAgICAgIyB0aGVtLgorICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bW0JDREdSU11dIC9zLy4qIFwoW1teIF1dKlwpL1wxIERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV0gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4MyopCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgbGludXgqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJdG1wX2FkZGZsYWc9CisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisJcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwllc2FjCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisJaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitFT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xW1swLTVdXS4qKQorCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCisJICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4NCogfCBhaXg1KikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFxbJF0yID09ICJUIikgfHwgKFxbJF0yID09ICJEIikgfHwgKFxbJF0yID09ICJCIikpICYmIChbc3Vic3RyXShcWyRdMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXFskXTMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeDUqKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgCSAgICBicmVhaworICAJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJiBcCisgIAkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisgIAkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgZWxzZQorICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKyAgCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorICAJICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAorICAJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKyAgCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAJIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKKyAgCSMgY2hva2VzIG9uIC1XbCwtRy4gVGhlIGZvbGxvd2luZyBsaW5lIGlzIGNvcnJlY3Q6CisJICBzaGFyZWRfZmxhZz0nLUcnCisJZWxzZQorCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgZWxzZQorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCSAgZmkKKwlmaQorICAgICAgZmkKKworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCisgICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJIF9MVF9BQ19TWVNfTElCUEFUSF9BSVgKKwkgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSckY29udmVuaWVuY2UnCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICA7OworCisgICAgYnNkaVtbNDVdXSopCisgICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKyAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSdsaWIgL09VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBfTFRfQUNfVEFHVkFSKGZpeF9zcmNmaWxlX3BhdGgsICQxKT0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgOzsKKyAgICAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgorICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgZWxzZQorICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgorICAgICAgICAgICAgIDEwLltbMDEyXV0pCisgICAgICAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAxMC4qKQorICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgIGVzYWMKKyAgICAgICAgIGZpCisgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJworICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGVsc2UKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIHhsYyopCisgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHZlcnN0cmluZycKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKKyAgICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCSAgOzsKKwkqKQorCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgZWxzZQorICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgb3BlbmJzZFtbMDFdXS4qIHwgb3BlbmJzZDIuW1swLTddXSB8IG9wZW5ic2QyLltbMC03XV0uKikKKwkgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgOzsKKwkgKikKKwkgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcywgJDEpPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IHRleHQnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZWxzZQorCXdsYXJjPScnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKyAgICAgICopCisgCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKyAJIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisgCSMgd2l0aG91dCAkd2wsIGlmZiB3ZSBkbyBub3QgbGluayB3aXRoICRMRC4KKyAJIyBMdWNraWx5LCBnY2Mgc3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IHdlIG5lZWQgZm9yIFN1biBTdHVkaW8uCisgCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisgCWNhc2UgJHdsYXJjIGluCisgCScnKQorIAkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcgOzsKKyAJKikKKyAJICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0YGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcgOzsKKyAJZXNhYyA7OworICAgICAgZXNhYworICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKwk7OworCXNpZW1lbnMpCisJICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKKwkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfQUNfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICA7OworCW1vdG9yb2xhKQorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQuMyopCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisJaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCisJX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqKQorICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorXSkKK0FDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKK3Rlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbl0pCisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICAgICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwlwaWNfZmxhZz0kX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQorICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisgICAgICAgIGlmIEFDX1RSWV9FVkFMKF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkKKyAgICAgICAgdGhlbgorCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICAgIGVsc2UKKwkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIEFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSldKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCitdKSMgQUNfTElCVE9PTF9QUk9HX0xEX1NITElCUworCisKKyMgX0xUX0FDX0ZJTEVfTFRETExfQworIyAtLS0tLS0tLS0tLS0tLS0tLS0tCisjIEJlIGNhcmVmdWwgdGhhdCB0aGUgc3RhcnQgbWFya2VyIGFsd2F5cyBmb2xsb3dzIGEgbmV3bGluZS4KK0FDX0RFRlVOKFtfTFRfQUNfRklMRV9MVERMTF9DXSwgWworIyAvKiBsdGRsbC5jIHN0YXJ0cyBoZXJlICovCisjICNkZWZpbmUgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAjaW5jbHVkZSA8d2luZG93cy5oPgorIyAjdW5kZWYgV0lOMzJfTEVBTl9BTkRfTUVBTgorIyAjaW5jbHVkZSA8c3RkaW8uaD4KKyMKKyMgI2lmbmRlZiBfX0NZR1dJTl9fCisjICMgIGlmZGVmIF9fQ1lHV0lOMzJfXworIyAjICAgIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXworIyAjICBlbmRpZgorIyAjZW5kaWYKKyMKKyMgI2lmZGVmIF9fY3BsdXNwbHVzCisjIGV4dGVybiAiQyIgeworIyAjZW5kaWYKKyMgQk9PTCBBUElFTlRSWSBEbGxNYWluIChISU5TVEFOQ0UgaEluc3QsIERXT1JEIHJlYXNvbiwgTFBWT0lEIHJlc2VydmVkKTsKKyMgI2lmZGVmIF9fY3BsdXNwbHVzCisjIH0KKyMgI2VuZGlmCisjCisjICNpZmRlZiBfX0NZR1dJTl9fCisjICNpbmNsdWRlIDxjeWd3aW4vY3lnd2luX2RsbC5oPgorIyBERUNMQVJFX0NZR1dJTl9ETEwoIERsbE1haW4gKTsKKyMgI2VuZGlmCisjIEhJTlNUQU5DRSBfX2hEbGxJbnN0YW5jZV9iYXNlOworIworIyBCT09MIEFQSUVOVFJZCisjIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpCisjIHsKKyMgICBfX2hEbGxJbnN0YW5jZV9iYXNlID0gaEluc3Q7CisjICAgcmV0dXJuIFRSVUU7CisjIH0KKyMgLyogbHRkbGwuYyBlbmRzIGhlcmUgKi8KK10pIyBfTFRfQUNfRklMRV9MVERMTF9DCisKKworIyBfTFRfQUNfVEFHVkFSKFZBUk5BTUUsIFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0xUX0FDX1RBR1ZBUl0sIFtpZmVsc2UoWyQyXSwgW10sIFskMV0sIFskMV8kMl0pXSkKKworCisjIG9sZCBuYW1lcworQUNfREVGVU4oW0FNX1BST0dfTElCVE9PTF0sICAgW0FDX1BST0dfTElCVE9PTF0pCitBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sICBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQUNfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCAgW0FDX0VOQUJMRV9TVEFUSUMoJEApXSkKK0FDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtBQ19ESVNBQkxFX1NIQVJFRCgkQCldKQorQUNfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCitBQ19ERUZVTihbQU1fUFJPR19MRF0sICAgICAgICBbQUNfUFJPR19MRF0pCitBQ19ERUZVTihbQU1fUFJPR19OTV0sICAgICAgICBbQUNfUFJPR19OTV0pCisKKyMgVGhpcyBpcyBqdXN0IHRvIHNpbGVuY2UgYWNsb2NhbCBhYm91dCB0aGUgbWFjcm8gbm90IGJlaW5nIHVzZWQKK2lmZWxzZShbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdKQorCitBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLAorW0FDX0NIRUNLX1RPT0woR0NKLCBnY2osIG5vKQorICB0ZXN0ICJ4JHtHQ0pGTEFHUytzZXR9IiA9IHhzZXQgfHwgR0NKRkxBR1M9Ii1nIC1PMiIKKyAgQUNfU1VCU1QoR0NKRkxBR1MpCitdKQorCitBQ19ERUZVTihbTFRfQUNfUFJPR19SQ10sCitbQUNfQ0hFQ0tfVE9PTChSQywgd2luZHJlcywgbm8pCitdKQorCisjIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKKyMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIworIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCisjICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKKyMgTFRfQUNfUFJPR19TRUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK0FDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sCitbQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAorWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorXSkKK1NFRD0kbHRfY3ZfcGF0aF9TRUQKK0FDX01TR19SRVNVTFQoWyRTRURdKQorXSkKKworCisjIHNlcmlhbCAzCisKK0FDX0RFRlVOKFttZnhfQ0hFQ0tfSEVBREVSX1NBTkVfTElNSVRTX0hdLCBbCitBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lXSwKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCwKK1tBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbI2luY2x1ZGUgPGxpbWl0cy5oPgorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpIHx8ICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgaWYgZGVmaW5lZChfX0FQUExFX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICAgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSB1c2UgY29tcGlsZXIgb3B0aW9uIC1uby1jcHAtcHJlY29tcCIKKyMgIGVsc2UKKyMgICAgaW5jbHVkZSAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIgorIyAgZW5kaWYKKyNlbmRpZgorI2RlZmluZSBNRlhfMHhmZmZmICAgICAgICAgIDB4ZmZmZgorI2RlZmluZSBNRlhfMHhmZmZmZmZmZkwgICAgIDQyOTQ5NjcyOTV1bAorI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGluY2x1ZGUgImVycm9yIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0hSVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIElOVF9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKExPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgTE9OR19NQVggMSIKKyNlbmRpZgorI2lmIChVQ0hBUl9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUNIQVJfTUFYIDIiCisjZW5kaWYKKyNpZiAoVVNIUlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAyIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUxPTkdfTUFYIDwgMSkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAyIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDB4ZmYpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDMiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCBNRlhfMHhmZmZmKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMyIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCBNRlhfMHhmZmZmZmZmZkwpCisjICBpbmNsdWRlICJlcnJvciBVTE9OR19NQVggMyIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPiBVSU5UX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCB2cyBVSU5UX01BWCIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA+IFVMT05HX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVJTlRfTUFYIHZzIFVMT05HX01BWCIKKyNlbmRpZgorXV0sIFtbCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9DUkFZMSkgLyogQ1JBWSBQVlAgc3lzdGVtcyAqLworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2VuZGlmIC8qIF9DUkFZMSAqLworI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKK11dKV0sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPXllc10sCitbbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oPW5vXSldKQorXSkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gc3RhbmRhcmQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitBQ19ERUZVTihbbWZ4X0xaT19DSEVDS19FTkRJQU5dLCBbCitBQ19DX0JJR0VORElBTihbQUNfREVGSU5FKExaT19BQklfQklHX0VORElBTiwxLFtEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi5dKV0sW0FDX0RFRklORShMWk9fQUJJX0xJVFRMRV9FTkRJQU4sMSxbRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uXSldKQorXSkjCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitkbmwgbW9yZSB0eXBlcyB3aGljaCBhcmUgbm90IHlldCBjb3ZlcmVkIGJ5IEFDQworCitBQ19ERUZVTihbbWZ4X0NIRUNLX1NJWkVPRl0sIFsKK0FDX0NIRUNLX1NJWkVPRihfX2ludDMyKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorQUNfQ0hFQ0tfU0laRU9GKHVpbnRtYXhfdCkKK0FDX0NIRUNLX1NJWkVPRihpbnRwdHJfdCkKK0FDX0NIRUNLX1NJWkVPRih1aW50cHRyX3QpCisKK0FDX0NIRUNLX1NJWkVPRihmbG9hdCkKK0FDX0NIRUNLX1NJWkVPRihkb3VibGUpCitBQ19DSEVDS19TSVpFT0YobG9uZyBkb3VibGUpCisKK0FDX0NIRUNLX1NJWkVPRihkZXZfdCkKK0FDX0NIRUNLX1NJWkVPRihmcG9zX3QpCitBQ19DSEVDS19TSVpFT0YobW9kZV90KQorQUNfQ0hFQ0tfU0laRU9GKG9mZl90KQorQUNfQ0hFQ0tfU0laRU9GKHNzaXplX3QpCitBQ19DSEVDS19TSVpFT0YodGltZV90KQorXSkjCisKKworCitBQ19ERUZVTihbbWZ4X0NIRUNLX0xJQl9XSU5NTV0sIFsKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorXSkjCisKKworIyBDb3B5cmlnaHQgKEMpIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fQVVUT01BS0VfVkVSU0lPTihWRVJTSU9OKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEF1dG9tYWtlIFguWSB0cmFjZXMgdGhpcyBtYWNybyB0byBlbnN1cmUgYWNsb2NhbC5tNCBoYXMgYmVlbgorIyBnZW5lcmF0ZWQgZnJvbSB0aGUgbTQgZmlsZXMgYWNjb21wYW55aW5nIEF1dG9tYWtlIFguWS4KK0FDX0RFRlVOKFtBTV9BVVRPTUFLRV9WRVJTSU9OXSwgW2FtX19hcGlfdmVyc2lvbj0iMS45Il0pCisKKyMgQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENhbGwgQU1fQVVUT01BS0VfVkVSU0lPTiBzbyBpdCBjYW4gYmUgdHJhY2VkLgorIyBUaGlzIGZ1bmN0aW9uIGlzIEFDX1JFUVVJUkVkIGJ5IEFDX0lOSVRfQVVUT01BS0UuCitBQ19ERUZVTihbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0sCisJIFtBTV9BVVRPTUFLRV9WRVJTSU9OKFsxLjkuNl0pXSkKKworIyBBTV9BVVhfRElSX0VYUEFORCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwMSwgMjAwMywgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBGb3IgcHJvamVjdHMgdXNpbmcgQUNfQ09ORklHX0FVWF9ESVIoW2Zvb10pLCBBdXRvY29uZiBzZXRzCisjICRhY19hdXhfZGlyIHRvIGAkc3JjZGlyL2ZvbycuICBJbiBvdGhlciBwcm9qZWN0cywgaXQgaXMgc2V0IHRvCisjIGAkc3JjZGlyJywgYCRzcmNkaXIvLi4nLCBvciBgJHNyY2Rpci8uLi8uLicuCisjCisjIE9mIGNvdXJzZSwgQXV0b21ha2UgbXVzdCBob25vciB0aGlzIHZhcmlhYmxlIHdoZW5ldmVyIGl0IGNhbGxzIGEKKyMgdG9vbCBmcm9tIHRoZSBhdXhpbGlhcnkgZGlyZWN0b3J5LiAgVGhlIHByb2JsZW0gaXMgdGhhdCAkc3JjZGlyIChhbmQKKyMgdGhlcmVmb3JlICRhY19hdXhfZGlyIGFzIHdlbGwpIGNhbiBiZSBlaXRoZXIgYWJzb2x1dGUgb3IgcmVsYXRpdmUsCisjIGRlcGVuZGluZyBvbiBob3cgY29uZmlndXJlIGlzIHJ1bi4gIFRoaXMgaXMgcHJldHR5IGFubm95aW5nLCBzaW5jZQorIyBpdCBtYWtlcyAkYWNfYXV4X2RpciBxdWl0ZSB1bnVzYWJsZSBpbiBzdWJkaXJlY3RvcmllczogaW4gdGhlIHRvcAorIyBzb3VyY2UgZGlyZWN0b3J5LCBhbnkgZm9ybSB3aWxsIHdvcmsgZmluZSwgYnV0IGluIHN1YmRpcmVjdG9yaWVzIGEKKyMgcmVsYXRpdmUgcGF0aCBuZWVkcyB0byBiZSBhZGp1c3RlZCBmaXJzdC4KKyMKKyMgJGFjX2F1eF9kaXIvbWlzc2luZworIyAgICBmYWlscyB3aGVuIGNhbGxlZCBmcm9tIGEgc3ViZGlyZWN0b3J5IGlmICRhY19hdXhfZGlyIGlzIHJlbGF0aXZlCisjICR0b3Bfc3JjZGlyLyRhY19hdXhfZGlyL21pc3NpbmcKKyMgICAgZmFpbHMgaWYgJGFjX2F1eF9kaXIgaXMgYWJzb2x1dGUsCisjICAgIGZhaWxzIHdoZW4gY2FsbGVkIGZyb20gYSBzdWJkaXJlY3RvcnkgaW4gYSBWUEFUSCBidWlsZCB3aXRoCisjICAgICAgICAgIGEgcmVsYXRpdmUgJGFjX2F1eF9kaXIKKyMKKyMgVGhlIHJlYXNvbiBvZiB0aGUgbGF0dGVyIGZhaWx1cmUgaXMgdGhhdCAkdG9wX3NyY2RpciBhbmQgJGFjX2F1eF9kaXIKKyMgYXJlIGJvdGggcHJlZml4ZWQgYnkgJHNyY2Rpci4gIEluIGFuIGluLXNvdXJjZSBidWlsZCB0aGlzIGlzIHVzdWFsbHkKKyMgaGFybWxlc3MgYmVjYXVzZSAkc3JjZGlyIGlzIGAuJywgYnV0IHRoaW5ncyB3aWxsIGJyb2tlIHdoZW4geW91CisjIHN0YXJ0IGEgVlBBVEggYnVpbGQgb3IgdXNlIGFuIGFic29sdXRlICRzcmNkaXIuCisjCisjIFNvIHdlIGNvdWxkIHVzZSBzb21ldGhpbmcgc2ltaWxhciB0byAkdG9wX3NyY2Rpci8kYWNfYXV4X2Rpci9taXNzaW5nLAorIyBpZmYgd2Ugc3RyaXAgdGhlIGxlYWRpbmcgJHNyY2RpciBmcm9tICRhY19hdXhfZGlyLiAgVGhhdCB3b3VsZCBiZToKKyMgICBhbV9hdXhfZGlyPSdcJCh0b3Bfc3JjZGlyKS8nYGV4cHIgIiRhY19hdXhfZGlyIiA6ICIkc3JjZGlyLy8qXCguKlwpImAKKyMgYW5kIHRoZW4gd2Ugd291bGQgZGVmaW5lICRNSVNTSU5HIGFzCisjICAgTUlTU0lORz0iXCR7U0hFTEx9ICRhbV9hdXhfZGlyL21pc3NpbmciCisjIFRoaXMgd2lsbCB3b3JrIGFzIGxvbmcgYXMgTUlTU0lORyBpcyBub3QgY2FsbGVkIGZyb20gY29uZmlndXJlLCBiZWNhdXNlCisjIHVuZm9ydHVuYXRlbHkgJCh0b3Bfc3JjZGlyKSBoYXMgbm8gbWVhbmluZyBpbiBjb25maWd1cmUuCisjIEhvd2V2ZXIgdGhlcmUgYXJlIG90aGVyIHZhcmlhYmxlcywgbGlrZSBDQywgd2hpY2ggYXJlIG9mdGVuIHVzZWQgaW4KKyMgY29uZmlndXJlLCBhbmQgY291bGQgdGhlcmVmb3JlIG5vdCB1c2UgdGhpcyAiZml4ZWQiICRhY19hdXhfZGlyLgorIworIyBBbm90aGVyIHNvbHV0aW9uLCB1c2VkIGhlcmUsIGlzIHRvIGFsd2F5cyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4KKyMgYWJzb2x1dGUgUEFUSC4gIFRoZSBkcmF3YmFjayBpcyB0aGF0IHVzaW5nIGFic29sdXRlIHBhdGhzIHByZXZlbnQgYQorIyBjb25maWd1cmVkIHRyZWUgdG8gYmUgbW92ZWQgd2l0aG91dCByZWNvbmZpZ3VyYXRpb24uCisKK0FDX0RFRlVOKFtBTV9BVVhfRElSX0VYUEFORF0sCitbZG5sIFJlbHkgb24gYXV0b2NvbmYgdG8gc2V0IHVwIENEUEFUSCBwcm9wZXJseS4KK0FDX1BSRVJFUShbMi41MF0pZG5sCisjIGV4cGFuZCAkYWNfYXV4X2RpciB0byBhbiBhYnNvbHV0ZSBwYXRoCithbV9hdXhfZGlyPWBjZCAkYWNfYXV4X2RpciAmJiBwd2RgCitdKQorCisjIEFNX0NPTkRJVElPTkFMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKi0gQXV0b2NvbmYgLSotCisKKyMgQ29weXJpZ2h0IChDKSAxOTk3LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDcKKworIyBBTV9DT05ESVRJT05BTChOQU1FLCBTSEVMTC1DT05ESVRJT04pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIGEgY29uZGl0aW9uYWwuCitBQ19ERUZVTihbQU1fQ09ORElUSU9OQUxdLAorW0FDX1BSRVJFUSgyLjUyKWRubAorIGlmZWxzZShbJDFdLCBbVFJVRV0sICBbQUNfRkFUQUwoWyQwOiBpbnZhbGlkIGNvbmRpdGlvbjogJDFdKV0sCisJWyQxXSwgW0ZBTFNFXSwgW0FDX0ZBVEFMKFskMDogaW52YWxpZCBjb25kaXRpb246ICQxXSldKWRubAorQUNfU1VCU1QoWyQxX1RSVUVdKQorQUNfU1VCU1QoWyQxX0ZBTFNFXSkKK2lmICQyOyB0aGVuCisgICQxX1RSVUU9CisgICQxX0ZBTFNFPScjJworZWxzZQorICAkMV9UUlVFPScjJworICAkMV9GQUxTRT0KK2ZpCitBQ19DT05GSUdfQ09NTUFORFNfUFJFKAorW2lmIHRlc3QgLXogIiR7JDFfVFJVRX0iICYmIHRlc3QgLXogIiR7JDFfRkFMU0V9IjsgdGhlbgorICBBQ19NU0dfRVJST1IoW1tjb25kaXRpb25hbCAiJDEiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuXV0pCitmaV0pXSkKKworCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA4CisKKyMgVGhlcmUgYXJlIGEgZmV3IGRpcnR5IGhhY2tzIGJlbG93IHRvIGF2b2lkIGxldHRpbmcgYEFDX1BST0dfQ0MnIGJlCisjIHdyaXR0ZW4gaW4gY2xlYXIsIGluIHdoaWNoIGNhc2UgYXV0b21ha2UsIHdoZW4gcmVhZGluZyBhY2xvY2FsLm00LAorIyB3aWxsIHRoaW5rIGl0IHNlZXMgYSAqdXNlKiwgYW5kIHRoZXJlZm9yZSB3aWxsIHRyaWdnZXIgYWxsIGl0J3MKKyMgQyBzdXBwb3J0IG1hY2hpbmVyeS4gIEFsc28gbm90ZSB0aGF0IGl0IG1lYW5zIHRoYXQgYXV0b3NjYW4sIHNlZWluZworIyBDQyBldGMuIGluIHRoZSBNYWtlZmlsZSwgd2lsbCBhc2sgZm9yIGFuIEFDX1BST0dfQ0MgdXNlLi4uCisKKworIyBfQU1fREVQRU5ERU5DSUVTKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VlIGhvdyB0aGUgY29tcGlsZXIgaW1wbGVtZW50cyBkZXBlbmRlbmN5IGNoZWNraW5nLgorIyBOQU1FIGlzICJDQyIsICJDWFgiLCAiR0NKIiwgb3IgIk9CSkMiLgorIyBXZSB0cnkgYSBmZXcgdGVjaG5pcXVlcyBhbmQgdXNlIHRoYXQgdG8gc2V0IGEgc2luZ2xlIGNhY2hlIHZhcmlhYmxlLgorIworIyBXZSBkb24ndCBBQ19SRVFVSVJFIHRoZSBjb3JyZXNwb25kaW5nIEFDX1BST0dfQ0Mgc2luY2UgdGhlIGxhdHRlciB3YXMKKyMgbW9kaWZpZWQgdG8gaW52b2tlIF9BTV9ERVBFTkRFTkNJRVMoQ0MpOyB3ZSB3b3VsZCBoYXZlIGEgY2lyY3VsYXIKKyMgZGVwZW5kZW5jeSwgYW5kIGdpdmVuIHRoYXQgdGhlIHVzZXIgaXMgbm90IGV4cGVjdGVkIHRvIHJ1biB0aGlzIG1hY3JvLAorIyBqdXN0IHJlbHkgb24gQUNfUFJPR19DQy4KK0FDX0RFRlVOKFtfQU1fREVQRU5ERU5DSUVTXSwKK1tBQ19SRVFVSVJFKFtBTV9TRVRfREVQRElSXSlkbmwKK0FDX1JFUVVJUkUoW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSlkbmwKK0FDX1JFUVVJUkUoW0FNX01BS0VfSU5DTFVERV0pZG5sCitBQ19SRVFVSVJFKFtBTV9ERVBfVFJBQ0tdKWRubAorCitpZmVsc2UoWyQxXSwgQ0MsICAgW2RlcGNjPSIkQ0MiICAgYW1fY29tcGlsZXJfbGlzdD1dLAorICAgICAgIFskMV0sIENYWCwgIFtkZXBjYz0iJENYWCIgIGFtX2NvbXBpbGVyX2xpc3Q9XSwKKyAgICAgICBbJDFdLCBPQkpDLCBbZGVwY2M9IiRPQkpDIiBhbV9jb21waWxlcl9saXN0PSdnY2MzIGdjYyddLAorICAgICAgIFskMV0sIEdDSiwgIFtkZXBjYz0iJEdDSiIgIGFtX2NvbXBpbGVyX2xpc3Q9J2djYzMgZ2NjJ10sCisgICAgICAgICAgICAgICAgICAgW2RlcGNjPSIkJDEiICAgYW1fY29tcGlsZXJfbGlzdD1dKQorCitBQ19DQUNIRV9DSEVDSyhbZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2NdLAorICAgICAgICAgICAgICAgW2FtX2N2XyQxX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlXSwKK1tpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiBbJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnXSA8IC4vZGVwY29tcGAKKyAgZmkKKyAgZm9yIGRlcG1vZGUgaW4gJGFtX2NvbXBpbGVyX2xpc3Q7IGRvCisgICAgIyBTZXR1cCBhIHNvdXJjZSB3aXRoIG1hbnkgZGVwZW5kZW5jaWVzLCBiZWNhdXNlIHNvbWUgY29tcGlsZXJzCisgICAgIyBsaWtlIHRvIHdyYXAgbGFyZ2UgZGVwZW5kZW5jeSBsaXN0cyBvbiBjb2x1bW4gODAgKHdpdGggXCksIGFuZAorICAgICMgd2Ugc2hvdWxkIG5vdCBjaG9vc2UgYSBkZXBjb21wIG1vZGUgd2hpY2ggaXMgY29uZnVzZWQgYnkgdGhpcy4KKyAgICAjCisgICAgIyBXZSBuZWVkIHRvIHJlY3JlYXRlIHRoZXNlIGZpbGVzIGZvciBlYWNoIHRlc3QsIGFzIHRoZSBjb21waWxlciBtYXkKKyAgICAjIG92ZXJ3cml0ZSBzb21lIG9mIHRoZW0gd2hlbiB0ZXN0aW5nIHdpdGggb2JzY3VyZSBjb21tYW5kIGxpbmVzLgorICAgICMgVGhpcyBoYXBwZW5zIGF0IGxlYXN0IHdpdGggdGhlIEFJWCBDIGNvbXBpbGVyLgorICAgIDogPiBzdWIvY29uZnRlc3QuYworICAgIGZvciBpIGluIDEgMiAzIDQgNSA2OyBkbworICAgICAgZWNobyAnI2luY2x1ZGUgImNvbmZ0c3QnJGknLmgiJyA+PiBzdWIvY29uZnRlc3QuYworICAgICAgIyBVc2luZyBgOiA+IHN1Yi9jb25mdHN0JGkuaCcgY3JlYXRlcyBvbmx5IHN1Yi9jb25mdHN0MS5oIHdpdGgKKyAgICAgICMgU29sYXJpcyA4J3Mgey91c3IsfS9iaW4vc2guCisgICAgICB0b3VjaCBzdWIvY29uZnRzdCRpLmgKKyAgICBkb25lCisgICAgZWNobyAiJHthbV9faW5jbHVkZX0gJHthbV9fcXVvdGV9c3ViL2NvbmZ0ZXN0LlBvJHthbV9fcXVvdGV9IiA+IGNvbmZtZgorCisgICAgY2FzZSAkZGVwbW9kZSBpbgorICAgIG5vc2lkZWVmZmVjdCkKKyAgICAgICMgYWZ0ZXIgdGhpcyB0YWcsIG1lY2hhbmlzbXMgYXJlIG5vdCBieSBzaWRlLWVmZmVjdCwgc28gdGhleSdsbAorICAgICAgIyBvbmx5IGJlIHVzZWQgd2hlbiBleHBsaWNpdGx5IHJlcXVlc3RlZAorICAgICAgaWYgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgPSB4eWVzOyB0aGVuCisJY29udGludWUKKyAgICAgIGVsc2UKKwlicmVhaworICAgICAgZmkKKyAgICAgIDs7CisgICAgbm9uZSkgYnJlYWsgOzsKKyAgICBlc2FjCisgICAgIyBXZSBjaGVjayB3aXRoIGAtYycgYW5kIGAtbycgZm9yIHRoZSBzYWtlIG9mIHRoZSAiZGFzaG1zdGRvdXQiCisgICAgIyBtb2RlLiAgSXQgdHVybnMgb3V0IHRoYXQgdGhlIFN1blBybyBDKysgY29tcGlsZXIgZG9lcyBub3QgcHJvcGVybHkKKyAgICAjIGhhbmRsZSBgLU0gLW8nLCBhbmQgd2UgbmVlZCB0byBkZXRlY3QgdGhpcy4KKyAgICBpZiBkZXBtb2RlPSRkZXBtb2RlIFwKKyAgICAgICBzb3VyY2U9c3ViL2NvbmZ0ZXN0LmMgb2JqZWN0PXN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBcCisgICAgICAgZGVwZmlsZT1zdWIvY29uZnRlc3QuUG8gdG1wZGVwZmlsZT1zdWIvY29uZnRlc3QuVFBvIFwKKyAgICAgICAkU0hFTEwgLi9kZXBjb21wICRkZXBjYyAtYyAtbyBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LmMgXAorICAgICAgICAgPi9kZXYvbnVsbCAyPmNvbmZ0ZXN0LmVyciAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0c3Q2Lmggc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgICR7TUFLRS1tYWtlfSAtcyAtZiBjb25mbWYgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgIyBpY2MgZG9lc24ndCBjaG9rZSBvbiB1bmtub3duIG9wdGlvbnMsIGl0IHdpbGwganVzdCBpc3N1ZSB3YXJuaW5ncworICAgICAgIyBvciByZW1hcmtzIChldmVuIHdpdGggLVdlcnJvcikuICBTbyB3ZSBncmVwIHN0ZGVyciBmb3IgYW55IG1lc3NhZ2UKKyAgICAgICMgdGhhdCBzYXlzIGFuIG9wdGlvbiB3YXMgaWdub3JlZCBvciBub3Qgc3VwcG9ydGVkLgorICAgICAgIyBXaGVuIGdpdmVuIC1NUCwgaWNjIDcuMCBhbmQgNy4xIGNvbXBsYWluIHRodXNseToKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSB3YXJuaW5nOiBpZ25vcmluZyBvcHRpb24gJy1NJzsgbm8gYXJndW1lbnQgcmVxdWlyZWQKKyAgICAgICMgVGhlIGRpYWdub3NpcyBjaGFuZ2VkIGluIGljYyA4LjA6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgcmVtYXJrOiBvcHRpb24gJy1NUCcgbm90IHN1cHBvcnRlZAorICAgICAgaWYgKGdyZXAgJ2lnbm9yaW5nIG9wdGlvbicgY29uZnRlc3QuZXJyIHx8CisgICAgICAgICAgZ3JlcCAnbm90IHN1cHBvcnRlZCcgY29uZnRlc3QuZXJyKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICAgICAgICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCitmaQorXSkKK0FDX1NVQlNUKFskMURFUE1PREVdLCBbZGVwbW9kZT0kYW1fY3ZfJDFfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGVdKQorQU1fQ09ORElUSU9OQUwoW2FtX19mYXN0ZGVwJDFdLCBbCisgIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubyBcCisgICYmIHRlc3QgIiRhbV9jdl8kMV9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzXSkKK10pCisKKworIyBBTV9TRVRfREVQRElSCisjIC0tLS0tLS0tLS0tLS0KKyMgQ2hvb3NlIGEgZGlyZWN0b3J5IG5hbWUgZm9yIGRlcGVuZGVuY3kgZmlsZXMuCisjIFRoaXMgbWFjcm8gaXMgQUNfUkVRVUlSRWQgaW4gX0FNX0RFUEVOREVOQ0lFUworQUNfREVGVU4oW0FNX1NFVF9ERVBESVJdLAorW0FDX1JFUVVJUkUoW0FNX1NFVF9MRUFESU5HX0RPVF0pZG5sCitBQ19TVUJTVChbREVQRElSXSwgWyIke2FtX19sZWFkaW5nX2RvdH1kZXBzIl0pZG5sCitdKQorCisKKyMgQU1fREVQX1RSQUNLCisjIC0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX0RFUF9UUkFDS10sCitbQUNfQVJHX0VOQUJMRShkZXBlbmRlbmN5LXRyYWNraW5nLAorWyAgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgIHNwZWVkcyB1cCBvbmUtdGltZSBidWlsZAorICAtLWVuYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICAgZG8gbm90IHJlamVjdCBzbG93IGRlcGVuZGVuY3kgZXh0cmFjdG9yc10pCitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorQU1fQ09ORElUSU9OQUwoW0FNREVQXSwgW3Rlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhub10pCitBQ19TVUJTVChbQU1ERVBCQUNLU0xBU0hdKQorXSkKKworIyBHZW5lcmF0ZSBjb2RlIHRvIHNldCB1cCBkZXBlbmRlbmN5IHRyYWNraW5nLiAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjc2VyaWFsIDMKKworIyBfQU1fT1VUUFVUX0RFUEVOREVOQ1lfQ09NTUFORFMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgIyBTbyBsZXQncyBncmVwIHdob2xlIGZpbGUuCisgIGlmIGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnICRtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgZGlycGFydD1gQVNfRElSTkFNRSgiJG1mIilgCisgIGVsc2UKKyAgICBjb250aW51ZQorICBmaQorICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAjIGV4cGFuc2lvbi4KKyAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisgICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgZmRpcj1gQVNfRElSTkFNRShbIiRmaWxlIl0pYAorICAgIEFTX01LRElSX1AoWyRkaXJwYXJ0LyRmZGlyXSkKKyAgICAjIGVjaG8gImNyZWF0aW5nICRkaXJwYXJ0LyRmaWxlIgorICAgIGVjaG8gJyMgZHVtbXknID4gIiRkaXJwYXJ0LyRmaWxlIgorICBkb25lCitkb25lCitdKSMgX0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTCisKKworIyBBTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUaGlzIG1hY3JvIHNob3VsZCBvbmx5IGJlIGludm9rZWQgb25jZSAtLSB1c2UgdmlhIEFDX1JFUVVJUkUuCisjCisjIFRoaXMgY29kZSBpcyBvbmx5IHJlcXVpcmVkIHdoZW4gYXV0b21hdGljIGRlcGVuZGVuY3kgdHJhY2tpbmcKKyMgaXMgZW5hYmxlZC4gIEZJWE1FLiAgVGhpcyBjcmVhdGVzIGVhY2ggYC5QJyBmaWxlIHRoYXQgd2Ugd2lsbAorIyBuZWVkIGluIG9yZGVyIHRvIGJvb3RzdHJhcCB0aGUgZGVwZW5kZW5jeSBoYW5kbGluZyBjb2RlLgorQUNfREVGVU4oW0FNX09VVFBVVF9ERVBFTkRFTkNZX0NPTU1BTkRTXSwKK1tBQ19DT05GSUdfQ09NTUFORFMoW2RlcGZpbGVzXSwKKyAgICAgW3Rlc3QgeCIkQU1ERVBfVFJVRSIgIT0geCIiIHx8IF9BTV9PVVRQVVRfREVQRU5ERU5DWV9DT01NQU5EU10sCisgICAgIFtBTURFUF9UUlVFPSIkQU1ERVBfVFJVRSIgYWNfYXV4X2Rpcj0iJGFjX2F1eF9kaXIiXSkKK10pCisKKyMgRG8gYWxsIHRoZSB3b3JrIGZvciBBdXRvbWFrZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMTIKKworIyBUaGlzIG1hY3JvIGFjdHVhbGx5IGRvZXMgdG9vIG11Y2guICBTb21lIGNoZWNrcyBhcmUgb25seSBuZWVkZWQgaWYKKyMgeW91ciBwYWNrYWdlIGRvZXMgY2VydGFpbiB0aGluZ3MuICBCdXQgdGhpcyBpc24ndCByZWFsbHkgYSBiaWcgZGVhbC4KKworIyBBTV9JTklUX0FVVE9NQUtFKFBBQ0tBR0UsIFZFUlNJT04sIFtOTy1ERUZJTkVdKQorIyBBTV9JTklUX0FVVE9NQUtFKFtPUFRJT05TXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGhlIGNhbGwgd2l0aCBQQUNLQUdFIGFuZCBWRVJTSU9OIGFyZ3VtZW50cyBpcyB0aGUgb2xkIHN0eWxlCisjIGNhbGwgKHByZSBhdXRvY29uZi0yLjUwKSwgd2hpY2ggaXMgYmVpbmcgcGhhc2VkIG91dC4gIFBBQ0tBR0UKKyMgYW5kIFZFUlNJT04gc2hvdWxkIG5vdyBiZSBwYXNzZWQgdG8gQUNfSU5JVCBhbmQgcmVtb3ZlZCBmcm9tCisjIHRoZSBjYWxsIHRvIEFNX0lOSVRfQVVUT01BS0UuCisjIFdlIHN1cHBvcnQgYm90aCBjYWxsIHN0eWxlcyBmb3IgdGhlIHRyYW5zaXRpb24uICBBZnRlcgorIyB0aGUgbmV4dCBBdXRvbWFrZSByZWxlYXNlLCBBdXRvY29uZiBjYW4gbWFrZSB0aGUgQUNfSU5JVAorIyBhcmd1bWVudHMgbWFuZGF0b3J5LCBhbmQgdGhlbiB3ZSBjYW4gZGVwZW5kIG9uIGEgbmV3IEF1dG9jb25mCisjIHJlbGVhc2UgYW5kIGRyb3AgdGhlIG9sZCBjYWxsIHN1cHBvcnQuCitBQ19ERUZVTihbQU1fSU5JVF9BVVRPTUFLRV0sCitbQUNfUFJFUkVRKFsyLjU4XSlkbmwKK2RubCBBdXRvY29uZiB3YW50cyB0byBkaXNhbGxvdyBBTV8gbmFtZXMuICBXZSBleHBsaWNpdGx5IGFsbG93CitkbmwgdGhlIG9uZXMgd2UgY2FyZSBhYm91dC4KK200X3BhdHRlcm5fYWxsb3coW15BTV9bQS1aXStGTEFHUyRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0NVUlJFTlRfQVVUT01BS0VfVkVSU0lPTl0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0lOU1RBTExdKWRubAorIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiICYmCisgICB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICBBQ19NU0dfRVJST1IoW3NvdXJjZSBkaXJlY3RvcnkgYWxyZWFkeSBjb25maWd1cmVkOyBydW4gIm1ha2UgZGlzdGNsZWFuIiB0aGVyZSBmaXJzdF0pCitmaQorCisjIHRlc3Qgd2hldGhlciB3ZSBoYXZlIGN5Z3BhdGgKK2lmIHRlc3QgLXogIiRDWUdQQVRIX1ciOyB0aGVuCisgIGlmIChjeWdwYXRoIC0tdmVyc2lvbikgPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorICAgIENZR1BBVEhfVz0nY3lncGF0aCAtdycKKyAgZWxzZQorICAgIENZR1BBVEhfVz1lY2hvCisgIGZpCitmaQorQUNfU1VCU1QoW0NZR1BBVEhfV10pCisKKyMgRGVmaW5lIHRoZSBpZGVudGl0eSBvZiB0aGUgcGFja2FnZS4KK2RubCBEaXN0aW5ndWlzaCBiZXR3ZWVuIG9sZC1zdHlsZSBhbmQgbmV3LXN0eWxlIGNhbGxzLgorbTRfaWZ2YWwoWyQyXSwKK1ttNF9pZnZhbChbJDNdLCBbX0FNX1NFVF9PUFRJT04oW25vLWRlZmluZV0pXSlkbmwKKyBBQ19TVUJTVChbUEFDS0FHRV0sIFskMV0pZG5sCisgQUNfU1VCU1QoW1ZFUlNJT05dLCBbJDJdKV0sCitbX0FNX1NFVF9PUFRJT05TKFskMV0pZG5sCisgQUNfU1VCU1QoW1BBQ0tBR0VdLCBbJ0FDX1BBQ0tBR0VfVEFSTkFNRSddKWRubAorIEFDX1NVQlNUKFtWRVJTSU9OXSwgWydBQ19QQUNLQUdFX1ZFUlNJT04nXSldKWRubAorCitfQU1fSUZfT1BUSU9OKFtuby1kZWZpbmVdLCwKK1tBQ19ERUZJTkVfVU5RVU9URUQoUEFDS0FHRSwgIiRQQUNLQUdFIiwgW05hbWUgb2YgcGFja2FnZV0pCisgQUNfREVGSU5FX1VOUVVPVEVEKFZFUlNJT04sICIkVkVSU0lPTiIsIFtWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlXSldKWRubAorCisjIFNvbWUgdG9vbHMgQXV0b21ha2UgbmVlZHMuCitBQ19SRVFVSVJFKFtBTV9TQU5JVFlfQ0hFQ0tdKWRubAorQUNfUkVRVUlSRShbQUNfQVJHX1BST0dSQU1dKWRubAorQU1fTUlTU0lOR19QUk9HKEFDTE9DQUwsIGFjbG9jYWwtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9DT05GLCBhdXRvY29uZikKK0FNX01JU1NJTkdfUFJPRyhBVVRPTUFLRSwgYXV0b21ha2UtJHthbV9fYXBpX3ZlcnNpb259KQorQU1fTUlTU0lOR19QUk9HKEFVVE9IRUFERVIsIGF1dG9oZWFkZXIpCitBTV9NSVNTSU5HX1BST0coTUFLRUlORk8sIG1ha2VpbmZvKQorQU1fUFJPR19JTlNUQUxMX1NICitBTV9QUk9HX0lOU1RBTExfU1RSSVAKK0FDX1JFUVVJUkUoW0FNX1BST0dfTUtESVJfUF0pZG5sCisjIFdlIG5lZWQgYXdrIGZvciB0aGUgImNoZWNrIiB0YXJnZXQuICBUaGUgc3lzdGVtICJhd2siIGlzIGJhZCBvbgorIyBzb21lIHBsYXRmb3Jtcy4KK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTUFLRV9TRVRdKWRubAorQUNfUkVRVUlSRShbQU1fU0VUX0xFQURJTkdfRE9UXSlkbmwKK19BTV9JRl9PUFRJT04oW3Rhci11c3Rhcl0sIFtfQU1fUFJPR19UQVIoW3VzdGFyXSldLAorICAgICAgICAgICAgICBbX0FNX0lGX09QVElPTihbdGFyLXBheF0sIFtfQU1fUFJPR19UQVIoW3BheF0pXSwKKwkgICAgICAJCSAgICAgW19BTV9QUk9HX1RBUihbdjddKV0pXSkKK19BTV9JRl9PUFRJT04oW25vLWRlcGVuZGVuY2llc10sLAorW0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENDKV0sCisgICAgICAgICAgICAgICAgICBbZGVmaW5lKFtBQ19QUk9HX0NDXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmbihbQUNfUFJPR19DQ10pW19BTV9ERVBFTkRFTkNJRVMoQ0MpXSldKWRubAorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgICAgICAgICAgICAgICAgIFtfQU1fREVQRU5ERU5DSUVTKENYWCldLAorICAgICAgICAgICAgICAgICAgW2RlZmluZShbQUNfUFJPR19DWFhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZuKFtBQ19QUk9HX0NYWF0pW19BTV9ERVBFTkRFTkNJRVMoQ1hYKV0pXSlkbmwKK10pCitdKQorCisKKyMgV2hlbiBjb25maWcuc3RhdHVzIGdlbmVyYXRlcyBhIGhlYWRlciwgd2UgbXVzdCB1cGRhdGUgdGhlIHN0YW1wLWggZmlsZS4KKyMgVGhpcyBmaWxlIHJlc2lkZXMgaW4gdGhlIHNhbWUgZGlyZWN0b3J5IGFzIHRoZSBjb25maWcgaGVhZGVyCisjIHRoYXQgaXMgZ2VuZXJhdGVkLiAgVGhlIHN0YW1wIGZpbGVzIGFyZSBudW1iZXJlZCB0byBoYXZlIGRpZmZlcmVudCBuYW1lcy4KKworIyBBdXRvY29uZiBjYWxscyBfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LICh3aGVuIGRlZmluZWQpIGluIHRoZQorIyBsb29wIHdoZXJlIGNvbmZpZy5zdGF0dXMgY3JlYXRlcyB0aGUgaGVhZGVycywgc28gd2UgY2FuIGdlbmVyYXRlCisjIG91ciBzdGFtcCBmaWxlcyB0aGVyZS4KK0FDX0RFRlVOKFtfQUNfQU1fQ09ORklHX0hFQURFUl9IT09LXSwKK1sjIENvbXB1dGUgJDEncyBpbmRleCBpbiAkY29uZmlnX2hlYWRlcnMuCitfYW1fc3RhbXBfY291bnQ9MQorZm9yIF9hbV9oZWFkZXIgaW4gJGNvbmZpZ19oZWFkZXJzIDo7IGRvCisgIGNhc2UgJF9hbV9oZWFkZXIgaW4KKyAgICAkMSB8ICQxOiogKQorICAgICAgYnJlYWsgOzsKKyAgICAqICkKKyAgICAgIF9hbV9zdGFtcF9jb3VudD1gZXhwciAkX2FtX3N0YW1wX2NvdW50ICsgMWAgOzsKKyAgZXNhYworZG9uZQorZWNobyAidGltZXN0YW1wIGZvciAkMSIgPmBBU19ESVJOQU1FKFskMV0pYC9zdGFtcC1oW10kX2FtX3N0YW1wX2NvdW50XSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NICisjIC0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgJGluc3RhbGxfc2guCitBQ19ERUZVTihbQU1fUFJPR19JTlNUQUxMX1NIXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCitpbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CitBQ19TVUJTVChpbnN0YWxsX3NoKV0pCisKKyMgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCAyCisKKyMgQ2hlY2sgd2hldGhlciB0aGUgdW5kZXJseWluZyBmaWxlLXN5c3RlbSBzdXBwb3J0cyBmaWxlbmFtZXMKKyMgd2l0aCBhIGxlYWRpbmcgZG90LiAgRm9yIGluc3RhbmNlIE1TLURPUyBkb2Vzbid0LgorQUNfREVGVU4oW0FNX1NFVF9MRUFESU5HX0RPVF0sCitbcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKK0FDX1NVQlNUKFthbV9fbGVhZGluZ19kb3RdKV0pCisKKyMgQWRkIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvcHRpb24gdG8gY29uZmlndXJlLiAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKyMgRnJvbSBKaW0gTWV5ZXJpbmcKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTgsIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUKKyMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNAorCitBQ19ERUZVTihbQU1fTUFJTlRBSU5FUl9NT0RFXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzXSkKKyAgZG5sIG1haW50YWluZXItbW9kZSBpcyBkaXNhYmxlZCBieSBkZWZhdWx0CisgIEFDX0FSR19FTkFCTEUobWFpbnRhaW5lci1tb2RlLAorWyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKwkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcl0sCisgICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwsCisgICAgICBVU0VfTUFJTlRBSU5FUl9NT0RFPW5vKQorICBBQ19NU0dfUkVTVUxUKFskVVNFX01BSU5UQUlORVJfTU9ERV0pCisgIEFNX0NPTkRJVElPTkFMKE1BSU5UQUlORVJfTU9ERSwgW3Rlc3QgJFVTRV9NQUlOVEFJTkVSX01PREUgPSB5ZXNdKQorICBNQUlOVD0kTUFJTlRBSU5FUl9NT0RFX1RSVUUKKyAgQUNfU1VCU1QoTUFJTlQpZG5sCitdCispCisKK0FVX0RFRlVOKFtqbV9NQUlOVEFJTkVSX01PREVdLCBbQU1fTUFJTlRBSU5FUl9NT0RFXSkKKworIyBDaGVjayB0byBzZWUgaG93ICdtYWtlJyB0cmVhdHMgaW5jbHVkZXMuCSAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworIyBBTV9NQUtFX0lOQ0xVREUoKQorIyAtLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB0byBzZWUgaG93IG1ha2UgdHJlYXRzIGluY2x1ZGVzLgorQUNfREVGVU4oW0FNX01BS0VfSU5DTFVERV0sCitbYW1fbWFrZT0ke01BS0UtbWFrZX0KK2NhdCA+IGNvbmZpbmMgPDwgJ0VORCcKK2FtX19kb2l0OgorCUBlY2hvIGRvbmUKKy5QSE9OWTogYW1fX2RvaXQKK0VORAorIyBJZiB3ZSBkb24ndCBmaW5kIGFuIGluY2x1ZGUgZGlyZWN0aXZlLCBqdXN0IGNvbW1lbnQgb3V0IHRoZSBjb2RlLgorQUNfTVNHX0NIRUNLSU5HKFtmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlXSkKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JworIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgorIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKKyMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgoraWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCisgICBhbV9faW5jbHVkZT1pbmNsdWRlCisgICBhbV9fcXVvdGU9CisgICBfYW1fcmVzdWx0PUdOVQorZmkKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgorICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgIGFtX19xdW90ZT0iXCIiCisgICAgICBfYW1fcmVzdWx0PUJTRAorICAgZmkKK2ZpCitBQ19TVUJTVChbYW1fX2luY2x1ZGVdKQorQUNfU1VCU1QoW2FtX19xdW90ZV0pCitBQ19NU0dfUkVTVUxUKFskX2FtX3Jlc3VsdF0pCitybSAtZiBjb25maW5jIGNvbmZtZgorXSkKKworIyBGYWtlIHRoZSBleGlzdGVuY2Ugb2YgcHJvZ3JhbXMgdGhhdCBHTlUgbWFpbnRhaW5lcnMgdXNlLiAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NywgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fTUlTU0lOR19QUk9HKE5BTUUsIFBST0dSQU0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX01JU1NJTkdfUFJPR10sCitbQUNfUkVRVUlSRShbQU1fTUlTU0lOR19IQVNfUlVOXSkKKyQxPSR7JDEtIiR7YW1fbWlzc2luZ19ydW59JDIifQorQUNfU1VCU1QoJDEpXSkKKworCisjIEFNX01JU1NJTkdfSEFTX1JVTgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgRGVmaW5lIE1JU1NJTkcgaWYgbm90IGRlZmluZWQgc28gZmFyIGFuZCB0ZXN0IGlmIGl0IHN1cHBvcnRzIC0tcnVuLgorIyBJZiBpdCBkb2VzLCBzZXQgYW1fbWlzc2luZ19ydW4gdG8gdXNlIGl0LCBvdGhlcndpc2UsIHRvIG5vdGhpbmcuCitBQ19ERUZVTihbQU1fTUlTU0lOR19IQVNfUlVOXSwKK1tBQ19SRVFVSVJFKFtBTV9BVVhfRElSX0VYUEFORF0pZG5sCit0ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIEFDX01TR19XQVJOKFtgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZ10pCitmaQorXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19NS0RJUl9QCisjIC0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayB3aGV0aGVyIGBta2RpciAtcCcgaXMgc3VwcG9ydGVkLCBmYWxsYmFjayB0byBta2luc3RhbGxkaXJzIG90aGVyd2lzZS4KKyMKKyMgQXV0b21ha2UgMS44IHVzZWQgYG1rZGlyIC1tIDA3NTUgLXAgLS0nIHRvIGVuc3VyZSB0aGF0IGRpcmVjdG9yaWVzCisjIGNyZWF0ZWQgYnkgYG1ha2UgaW5zdGFsbCcgYXJlIGFsd2F5cyB3b3JsZCByZWFkYWJsZSwgZXZlbiBpZiB0aGUKKyMgaW5zdGFsbGVyIGhhcHBlbnMgdG8gaGF2ZSBhbiBvdmVybHkgcmVzdHJpY3RpdmUgdW1hc2sgKGUuZy4gMDc3KS4KKyMgVGhpcyB3YXMgYSBtaXN0YWtlLiAgVGhlcmUgYXJlIGF0IGxlYXN0IHR3byByZWFzb25zIHdoeSB3ZSBtdXN0IG5vdAorIyB1c2UgYC1tIDA3NTUnOgorIyAgIC0gaXQgY2F1c2VzIHNwZWNpYWwgYml0cyBsaWtlIFNHSUQgdG8gYmUgaWdub3JlZCwKKyMgICAtIGl0IG1heSBiZSB0b28gcmVzdHJpY3RpdmUgKHNvbWUgc2V0dXBzIGV4cGVjdCA3NzUgZGlyZWN0b3JpZXMpLgorIworIyBEbyBub3QgdXNlIC1tIDA3NTUgYW5kIGxldCBwZW9wbGUgY2hvb3NlIHdoYXRldmVyIHRoZXkgZXhwZWN0IGJ5CisjIHNldHRpbmcgdW1hc2suCisjCisjIFdlIGNhbm5vdCBhY2NlcHQgYW55IGltcGxlbWVudGF0aW9uIG9mIGBta2RpcicgdGhhdCByZWNvZ25pemVzIGAtcCcuCisjIFNvbWUgaW1wbGVtZW50YXRpb25zIChzdWNoIGFzIFNvbGFyaXMgOCdzKSBhcmUgbm90IHRocmVhZC1zYWZlOiBpZiBhCisjIHBhcmFsbGVsIG1ha2UgdHJpZXMgdG8gcnVuIGBta2RpciAtcCBhL2InIGFuZCBgbWtkaXIgLXAgYS9jJworIyBjb25jdXJyZW50bHksIGJvdGggdmVyc2lvbiBjYW4gZGV0ZWN0IHRoYXQgYS8gaXMgbWlzc2luZywgYnV0IG9ubHkKKyMgb25lIGNhbiBjcmVhdGUgaXQgYW5kIHRoZSBvdGhlciB3aWxsIGVycm9yIG91dC4gIENvbnNlcXVlbnRseSB3ZQorIyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gR05VIG1ha2UgKHVzaW5nIHRoZSAtLXZlcnNpb24gb3B0aW9uIGVuc3VyZXMKKyMgdGhpcy4pCitBQ19ERUZVTihbQU1fUFJPR19NS0RJUl9QXSwKK1tpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICMgV2UgdXNlZCB0byBrZWVwaW5nIHRoZSBgLicgYXMgZmlyc3QgYXJndW1lbnQsIGluIG9yZGVyIHRvCisgICMgYWxsb3cgJChta2Rpcl9wKSB0byBiZSB1c2VkIHdpdGhvdXQgYXJndW1lbnQuICBBcyBpbgorICAjICAgJChta2Rpcl9wKSAkKHNvbWVkaXIpCisgICMgd2hlcmUgJChzb21lZGlyKSBpcyBjb25kaXRpb25hbGx5IGRlZmluZWQuICBIb3dldmVyIHRoaXMgaXMgd3JvbmcKKyAgIyBmb3IgdHdvIHJlYXNvbnM6CisgICMgIDEuIGlmIHRoZSBwYWNrYWdlIGlzIGluc3RhbGxlZCBieSBhIHVzZXIgd2hvIGNhbm5vdCB3cml0ZSBgLicKKyAgIyAgICAgbWFrZSBpbnN0YWxsIHdpbGwgZmFpbCwKKyAgIyAgMi4gdGhlIGFib3ZlIGNvbW1lbnQgc2hvdWxkIG1vc3QgY2VydGFpbmx5IHJlYWQKKyAgIyAgICAgJChta2Rpcl9wKSAkKERFU1RESVIpJChzb21lZGlyKQorICAjICAgICBzbyBpdCBkb2VzIG5vdCB3b3JrIHdoZW4gJChzb21lZGlyKSBpcyB1bmRlZmluZWQgYW5kCisgICMgICAgICQoREVTVERJUikgaXMgbm90LgorICAjICBUbyBzdXBwb3J0IHRoZSBsYXR0ZXIgY2FzZSwgd2UgaGF2ZSB0byB3cml0ZQorICAjICAgICB0ZXN0IC16ICIkKHNvbWVkaXIpIiB8fCAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpLAorICAjICBzbyB0aGUgYC4nIHRyaWNrIGlzIHBvaW50bGVzcy4KKyAgbWtkaXJfcD0nbWtkaXIgLXAgLS0nCitlbHNlCisgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICMgcmVjb2duaXplIGFueSBvcHRpb24uICBJdCB3aWxsIGludGVycHJldCBhbGwgb3B0aW9ucyBhcworICAjIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZSwgYW5kIHRoZW4gYWJvcnQgYmVjYXVzZSBgLicgYWxyZWFkeQorICAjIGV4aXN0cy4KKyAgZm9yIGQgaW4gLi8tcCAuLy0tdmVyc2lvbjsKKyAgZG8KKyAgICB0ZXN0IC1kICRkICYmIHJtZGlyICRkCisgIGRvbmUKKyAgIyAkKG1raW5zdGFsbGRpcnMpIGlzIGRlZmluZWQgYnkgQXV0b21ha2UgaWYgbWtpbnN0YWxsZGlycyBleGlzdHMuCisgIGlmIHRlc3QgLWYgIiRhY19hdXhfZGlyL21raW5zdGFsbGRpcnMiOyB0aGVuCisgICAgbWtkaXJfcD0nJChta2luc3RhbGxkaXJzKScKKyAgZWxzZQorICAgIG1rZGlyX3A9JyQoaW5zdGFsbF9zaCkgLWQnCisgIGZpCitmaQorQUNfU1VCU1QoW21rZGlyX3BdKV0pCisKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgIC0qLSBBdXRvY29uZiAtKi0KKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDMKKworIyBfQU1fTUFOR0xFX09QVElPTihOQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW19BTV9NQU5HTEVfT1BUSU9OXSwKK1tbX0FNX09QVElPTl9dbTRfYnBhdHN1YnN0KCQxLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisjIF9BTV9TRVRfT1BUSU9OKE5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE5BTUUuICBQcmVzZW50bHkgdGhhdCBvbmx5IG1lYW5zIGRlZmluaW5nIGEgZmxhZyBmb3IgdGhpcyBvcHRpb24uCitBQ19ERUZVTihbX0FNX1NFVF9PUFRJT05dLAorW200X2RlZmluZShfQU1fTUFOR0xFX09QVElPTihbJDFdKSwgMSldKQorCisjIF9BTV9TRVRfT1BUSU9OUyhPUFRJT05TKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTlMgaXMgYSBzcGFjZS1zZXBhcmF0ZWQgbGlzdCBvZiBBdXRvbWFrZSBvcHRpb25zLgorQUNfREVGVU4oW19BTV9TRVRfT1BUSU9OU10sCitbQUNfRk9SRUFDSChbX0FNX09wdGlvbl0sIFskMV0sIFtfQU1fU0VUX09QVElPTihfQU1fT3B0aW9uKV0pXSkKKworIyBfQU1fSUZfT1BUSU9OKE9QVElPTiwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRXhlY3V0ZSBJRi1TRVQgaWYgT1BUSU9OIGlzIHNldCwgSUYtTk9ULVNFVCBvdGhlcndpc2UuCitBQ19ERUZVTihbX0FNX0lGX09QVElPTl0sCitbbTRfaWZzZXQoX0FNX01BTkdMRV9PUFRJT04oWyQxXSksIFskMl0sIFskM10pXSkKKworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhhdCB0aGUgYnVpbGQgZW52aXJvbm1lbnQgaXMgc2FuZS4gICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMjAwMCwgMjAwMSwgMjAwMywgMjAwNQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIHNlcmlhbCA0CisKKyMgQU1fU0FOSVRZX0NIRUNLCisjIC0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0FNX1NBTklUWV9DSEVDS10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmVdKQorIyBKdXN0IGluIGNhc2UKK3NsZWVwIDEKK2VjaG8gdGltZXN0YW1wID4gY29uZnRlc3QuZmlsZQorIyBEbyBgc2V0JyBpbiBhIHN1YnNoZWxsIHNvIHdlIGRvbid0IGNsb2JiZXIgdGhlIGN1cnJlbnQgc2hlbGwncworIyBhcmd1bWVudHMuICBNdXN0IHRyeSAtTCBmaXJzdCBpbiBjYXNlIGNvbmZpZ3VyZSBpcyBhY3R1YWxseSBhCisjIHN5bWxpbms7IHNvbWUgc3lzdGVtcyBwbGF5IHdlaXJkIGdhbWVzIHdpdGggdGhlIG1vZCB0aW1lIG9mIHN5bWxpbmtzCisjIChlZyBGcmVlQlNEIHJldHVybnMgdGhlIG1vZCB0aW1lIG9mIHRoZSBzeW1saW5rJ3MgY29udGFpbmluZworIyBkaXJlY3RvcnkpLgoraWYgKAorICAgc2V0IFggYGxzIC1MdCAkc3JjZGlyL2NvbmZpZ3VyZSBjb25mdGVzdC5maWxlIDI+IC9kZXYvbnVsbGAKKyAgIGlmIHRlc3QgIiRbKl0iID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJFsqXSIgIT0gIlggJHNyY2Rpci9jb25maWd1cmUgY29uZnRlc3QuZmlsZSIgXAorICAgICAgJiYgdGVzdCAiJFsqXSIgIT0gIlggY29uZnRlc3QuZmlsZSAkc3JjZGlyL2NvbmZpZ3VyZSI7IHRoZW4KKworICAgICAgIyBJZiBuZWl0aGVyIG1hdGNoZWQsIHRoZW4gd2UgaGF2ZSBhIGJyb2tlbiBscy4gIFRoaXMgY2FuIGhhcHBlbgorICAgICAgIyBpZiwgZm9yIGluc3RhbmNlLCBDT05GSUdfU0hFTEwgaXMgYmFzaCBhbmQgaXQgaW5oZXJpdHMgYQorICAgICAgIyBicm9rZW4gbHMgYWxpYXMgZnJvbSB0aGUgZW52aXJvbm1lbnQuICBUaGlzIGhhcyBhY3R1YWxseQorICAgICAgIyBoYXBwZW5lZC4gIFN1Y2ggYSBzeXN0ZW0gY291bGQgbm90IGJlIGNvbnNpZGVyZWQgInNhbmUiLgorICAgICAgQUNfTVNHX0VSUk9SKFtscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50XSkKKyAgIGZpCisKKyAgIHRlc3QgIiRbMl0iID0gY29uZnRlc3QuZmlsZQorICAgKQordGhlbgorICAgIyBPay4KKyAgIDoKK2Vsc2UKKyAgIEFDX01TR19FUlJPUihbbmV3bHkgY3JlYXRlZCBmaWxlIGlzIG9sZGVyIHRoYW4gZGlzdHJpYnV0ZWQgZmlsZXMhCitDaGVjayB5b3VyIHN5c3RlbSBjbG9ja10pCitmaQorQUNfTVNHX1JFU1VMVCh5ZXMpXSkKKworIyBDb3B5cmlnaHQgKEMpIDIwMDEsIDIwMDMsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgQU1fUFJPR19JTlNUQUxMX1NUUklQCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPbmUgaXNzdWUgd2l0aCB2ZW5kb3IgYGluc3RhbGwnIChldmVuIEdOVSkgaXMgdGhhdCB5b3UgY2FuJ3QKKyMgc3BlY2lmeSB0aGUgcHJvZ3JhbSB1c2VkIHRvIHN0cmlwIGJpbmFyaWVzLiAgVGhpcyBpcyBlc3BlY2lhbGx5CisjIGFubm95aW5nIGluIGNyb3NzLWNvbXBpbGluZyBlbnZpcm9ubWVudHMsIHdoZXJlIHRoZSBidWlsZCdzIHN0cmlwCisjIGlzIHVubGlrZWx5IHRvIGhhbmRsZSB0aGUgaG9zdCdzIGJpbmFyaWVzLgorIyBGb3J0dW5hdGVseSBpbnN0YWxsLXNoIHdpbGwgaG9ub3IgYSBTVFJJUFBST0cgdmFyaWFibGUsIHNvIHdlCisjIGFsd2F5cyB1c2UgaW5zdGFsbC1zaCBpbiBgbWFrZSBpbnN0YWxsLXN0cmlwJywgYW5kIGluaXRpYWxpemUKKyMgU1RSSVBQUk9HIHdpdGggdGhlIHZhbHVlIG9mIHRoZSBTVFJJUCB2YXJpYWJsZSAoc2V0IGJ5IHRoZSB1c2VyKS4KK0FDX0RFRlVOKFtBTV9QUk9HX0lOU1RBTExfU1RSSVBdLAorW0FDX1JFUVVJUkUoW0FNX1BST0dfSU5TVEFMTF9TSF0pZG5sCisjIEluc3RhbGxlZCBiaW5hcmllcyBhcmUgdXN1YWxseSBzdHJpcHBlZCB1c2luZyBgc3RyaXAnIHdoZW4gdGhlIHVzZXIKKyMgcnVuIGBtYWtlIGluc3RhbGwtc3RyaXAnLiAgSG93ZXZlciBgc3RyaXAnIG1pZ2h0IG5vdCBiZSB0aGUgcmlnaHQKKyMgdG9vbCB0byB1c2UgaW4gY3Jvc3MtY29tcGlsYXRpb24gZW52aXJvbm1lbnRzLCB0aGVyZWZvcmUgQXV0b21ha2UKKyMgd2lsbCBob25vciB0aGUgYFNUUklQJyBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byBvdmVycnVsZSB0aGlzIHByb2dyYW0uCitkbmwgRG9uJ3QgdGVzdCBmb3IgJGNyb3NzX2NvbXBpbGluZyA9IHllcywgYmVjYXVzZSBpdCBtaWdodCBiZSBgbWF5YmUnLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0gbm87IHRoZW4KKyAgQUNfQ0hFQ0tfVE9PTChbU1RSSVBdLCBbc3RyaXBdLCA6KQorZmkKK0lOU1RBTExfU1RSSVBfUFJPR1JBTT0iXCR7U0hFTEx9IFwkKGluc3RhbGxfc2gpIC1jIC1zIgorQUNfU1VCU1QoW0lOU1RBTExfU1RSSVBfUFJPR1JBTV0pXSkKKworIyBDaGVjayBob3cgdG8gY3JlYXRlIGEgdGFyYmFsbC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorCisjIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgMgorCisjIF9BTV9QUk9HX1RBUihGT1JNQVQpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGhvdyB0byBjcmVhdGUgYSB0YXJiYWxsIGluIGZvcm1hdCBGT1JNQVQuCisjIEZPUk1BVCBzaG91bGQgYmUgb25lIG9mIGB2NycsIGB1c3RhcicsIG9yIGBwYXgnLgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdGFyKSB0aGF0IGlzIGEgY29tbWFuZAorIyB3cml0aW5nIHRvIHN0ZG91dCBhIEZPUk1BVC10YXJiYWxsIGNvbnRhaW5pbmcgdGhlIGRpcmVjdG9yeQorIyAkdGFyZGlyLgorIyAgICAgdGFyZGlyPWRpcmVjdG9yeSAmJiAkKGFtX190YXIpID4gcmVzdWx0LnRhcgorIworIyBTdWJzdGl0dXRlIGEgdmFyaWFibGUgJChhbV9fdW50YXIpIHRoYXQgZXh0cmFjdCBzdWNoCisjIGEgdGFyYmFsbCByZWFkIGZyb20gc3RkaW4uCisjICAgICAkKGFtX191bnRhcikgPCByZXN1bHQudGFyCitBQ19ERUZVTihbX0FNX1BST0dfVEFSXSwKK1sjIEFsd2F5cyBkZWZpbmUgQU1UQVIgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkuCitBTV9NSVNTSU5HX1BST0coW0FNVEFSXSwgW3Rhcl0pCittNF9pZihbJDFdLCBbdjddLAorICAgICBbYW1fX3Rhcj0nJHtBTVRBUn0gY2hvZiAtICIkJHRhcmRpciInOyBhbV9fdW50YXI9JyR7QU1UQVJ9IHhmIC0nXSwKKyAgICAgW200X2Nhc2UoWyQxXSwgW3VzdGFyXSwsIFtwYXhdLCwKKyAgICAgICAgICAgICAgW200X2ZhdGFsKFtVbmtub3duIHRhciBmb3JtYXRdKV0pCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjcmVhdGUgYSAkMSB0YXIgYXJjaGl2ZV0pCisjIExvb3Agb3ZlciBhbGwga25vd24gbWV0aG9kcyB0byBjcmVhdGUgYSB0YXIgYXJjaGl2ZSB1bnRpbCBvbmUgd29ya3MuCitfYW1fdG9vbHM9J2dudXRhciBtNF9pZihbJDFdLCBbdXN0YXJdLCBbcGxhaW50YXJdKSBwYXggY3BpbyBub25lJworX2FtX3Rvb2xzPSR7YW1fY3ZfcHJvZ190YXJfJDEtJF9hbV90b29sc30KKyMgRG8gbm90IGZvbGQgdGhlIGFib3ZlIHR3byBsaW5lIGludG8gb25lLCBiZWNhdXNlIFRydTY0IHNoIGFuZAorIyBTb2xhcmlzIHNoIHdpbGwgbm90IGdyb2sgc3BhY2VzIGluIHRoZSByaHMgb2YgYC0nLgorZm9yIF9hbV90b29sIGluICRfYW1fdG9vbHMKK2RvCisgIGNhc2UgJF9hbV90b29sIGluCisgIGdudXRhcikKKyAgICBmb3IgX2FtX3RhciBpbiB0YXIgZ251dGFyIGd0YXI7CisgICAgZG8KKyAgICAgIEFNX1JVTl9MT0coWyRfYW1fdGFyIC0tdmVyc2lvbl0pICYmIGJyZWFrCisgICAgZG9uZQorICAgIGFtX190YXI9IiRfYW1fdGFyIC0tZm9ybWF0PW00X2lmKFskMV0sIFtwYXhdLCBbcG9zaXhdLCBbJDFdKSAtY2hmIC0gIiciJCR0YXJkaXIiJworICAgIGFtX190YXJfPSIkX2FtX3RhciAtLWZvcm1hdD1tNF9pZihbJDFdLCBbcGF4XSwgW3Bvc2l4XSwgWyQxXSkgLWNoZiAtICInIiR0YXJkaXIiJworICAgIGFtX191bnRhcj0iJF9hbV90YXIgLXhmIC0iCisgICAgOzsKKyAgcGxhaW50YXIpCisgICAgIyBNdXN0IHNraXAgR05VIHRhcjogaWYgaXQgZG9lcyBub3Qgc3VwcG9ydCAtLWZvcm1hdD0gaXQgZG9lc24ndCBjcmVhdGUKKyAgICAjIHVzdGFyIHRhcmJhbGwgZWl0aGVyLgorICAgICh0YXIgLS12ZXJzaW9uKSA+L2Rldi9udWxsIDI+JjEgJiYgY29udGludWUKKyAgICBhbV9fdGFyPSd0YXIgY2hmIC0gIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ndGFyIGNoZiAtICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3RhciB4ZiAtJworICAgIDs7CisgIHBheCkKKyAgICBhbV9fdGFyPSdwYXggLUwgLXggJDEgLXcgIiQkdGFyZGlyIicKKyAgICBhbV9fdGFyXz0ncGF4IC1MIC14ICQxIC13ICIkdGFyZGlyIicKKyAgICBhbV9fdW50YXI9J3BheCAtcicKKyAgICA7OworICBjcGlvKQorICAgIGFtX190YXI9J2ZpbmQgIiQkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX190YXJfPSdmaW5kICIkdGFyZGlyIiAtcHJpbnQgfCBjcGlvIC1vIC1IICQxIC1MJworICAgIGFtX191bnRhcj0nY3BpbyAtaSAtSCAkMSAtZCcKKyAgICA7OworICBub25lKQorICAgIGFtX190YXI9ZmFsc2UKKyAgICBhbV9fdGFyXz1mYWxzZQorICAgIGFtX191bnRhcj1mYWxzZQorICAgIDs7CisgIGVzYWMKKworICAjIElmIHRoZSB2YWx1ZSB3YXMgY2FjaGVkLCBzdG9wIG5vdy4gIFdlIGp1c3Qgd2FudGVkIHRvIGhhdmUgYW1fX3RhcgorICAjIGFuZCBhbV9fdW50YXIgc2V0LgorICB0ZXN0IC1uICIke2FtX2N2X3Byb2dfdGFyXyQxfSIgJiYgYnJlYWsKKworICAjIHRhci91bnRhciBhIGR1bW15IGRpcmVjdG9yeSwgYW5kIHN0b3AgaWYgdGhlIGNvbW1hbmQgd29ya3MKKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgZWNobyBHcmVwTWUgPiBjb25mdGVzdC5kaXIvZmlsZQorICBBTV9SVU5fTE9HKFt0YXJkaXI9Y29uZnRlc3QuZGlyICYmIGV2YWwgJGFtX190YXJfID5jb25mdGVzdC50YXJdKQorICBybSAtcmYgY29uZnRlc3QuZGlyCisgIGlmIHRlc3QgLXMgY29uZnRlc3QudGFyOyB0aGVuCisgICAgQU1fUlVOX0xPRyhbJGFtX191bnRhciA8Y29uZnRlc3QudGFyXSkKKyAgICBncmVwIEdyZXBNZSBjb25mdGVzdC5kaXIvZmlsZSA+L2Rldi9udWxsIDI+JjEgJiYgYnJlYWsKKyAgZmkKK2RvbmUKK3JtIC1yZiBjb25mdGVzdC5kaXIKKworQUNfQ0FDSEVfVkFMKFthbV9jdl9wcm9nX3Rhcl8kMV0sIFthbV9jdl9wcm9nX3Rhcl8kMT0kX2FtX3Rvb2xdKQorQUNfTVNHX1JFU1VMVChbJGFtX2N2X3Byb2dfdGFyXyQxXSldKQorQUNfU1VCU1QoW2FtX190YXJdKQorQUNfU1VCU1QoW2FtX191bnRhcl0pCitdKSAjIF9BTV9QUk9HX1RBUgorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni8wMFJFQURNRS5UWFQgYi9sem8tMi4wMy9hc20vaTM4Ni8wMFJFQURNRS5UWFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQzZGNmOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2LzAwUkVBRE1FLlRYVApAQCAtMCwwICsxLDQ1IEBACisKK0RpcmVjdG9yeSBvdmVydmlldzoKKz09PT09PT09PT09PT09PT09PT0KKworQXMgd3JpdGluZyBwb3J0YWJsZSBhc3NlbWJsZXIgc291cmNlcyBzdXBwb3J0aW5nIGRpZmZlcmVudCBvcGVyYXRpbmcKK3N5c3RlbXMsIGNvbXBpbGVycyBhbmQgYXNzZW1ibGVycyBoYXMgcHJvdmVuIHRvIGJlIGV4dHJlbWVseSBwYWluZnVsLAordGhlIGFzc2VtYmxlciBzb3VyY2VzIGhhdmUgYmVlbiBjb252ZXJ0ZWQgaW50byBhIG1vcmUgcG9ydGFibGUgYGRiJworZm9ybWF0LiBVc2UgdGhlc2Ugd2hlbmV2ZXIgcG9zc2libGUuCisKKyAgc3JjX2dhcyAgICAgICBzb3VyY2VzIGNvbnZlcnRlZCBmb3IgcG9ydGFibGUgZ2NjL2dhcyBzeW50YXgKKyAgc3JjX21hc20gICAgICBzb3VyY2VzIGNvbnZlcnRlZCBmb3IgcG9ydGFibGUgbWFzbS90YXNtL3dhc20gc3ludGF4CisgIHNyY19uYXNtICAgICAgc291cmNlcyBjb252ZXJ0ZWQgZm9yIHBvcnRhYmxlIG5hc20gc3ludGF4CisKKyAgc3JjICAgICAgICAgICBhc3NlbWJsZXIgc291cmNlcyAoeW91IG5lZWQgdGhlIE9wZW5Tb3VyY2UgbmFzbSBhc3NlbWJsZXIpCisKKyAgb2JqICAgICAgICAgICBwcmUtYXNzZW1ibGVkIG9iamVjdCBmaWxlcworCitBbHNvIGxvb2sgYHNyY19YWFgvYWxsL2FzbV9hbGwuYXNtJyB3aGljaCBjb250YWlucyBhbGwgYXNzZW1ibGVyCitmdW5jdGlvbnMgY29udmVuaWVudGx5IGFycmFuZ2VkIGludG8gYSBzaW5nbGUgZmlsZS4KKworCitOb3RlczoKKz09PT09PQorCistIFRoZSBhc3NlbWJsZXIgc291cmNlcyBhcmUgZGVzaWduZWQgZm9yIGEgZmxhdCAzMi1iaXQgbWVtb3J5IG1vZGVsCisgIHJ1bm5pbmcgaW4gcHJvdGVjdGVkIG1vZGUgLSB0aGV5IHNob3VsZCB3b3JrIHdpdGggYWxsIGkzODYKKyAgMzItYml0IGNvbXBpbGVycyBhcm91bmQuCisKKy0gQWxsIGZ1bmN0aW9ucyBleHBlY3QgYSBgY2RlY2wnIChDIHN0YWNrIGJhc2VkKSBjYWxsaW5nIGNvbnZlbnRpb24uCisgIFRoZSBmdW5jdGlvbiByZXR1cm4gdmFsdWUgd2lsbCBiZSBwbGFjZWQgaW50byBgZWF4Jy4KKyAgQWxsIG90aGVyIHJlZ2lzdGVycyBhcmUgcHJlc2VydmVkLgorCistIFByb3RvdHlwZXMgZm9yIHRoZSBhc3NlbWJsZXIgZnVuY3Rpb25zIGNhbiBiZSBmb3VuZCBpbiA8bHpvL2x6b19hc20uaD4uCisKKy0gRm9yIHJlYXNvbnMgb2Ygc3BlZWQgYWxsIGZhc3QgYXNzZW1ibGVyIGRlY29tcHJlc3NvcnMgKGhhdmluZyBgX2Zhc3QnCisgIGluIHRoZWlyIG5hbWUpIGNhbiBhY2Nlc3MgKHdyaXRlIHRvKSB1cCB0byAzIGJ5dGVzIHBhc3QgdGhlIGVuZCBvZgorICB0aGUgZGVjb21wcmVzc2VkIChvdXRwdXQpIGJsb2NrLiBEYXRhIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZAorICAoaW5wdXQpIGJsb2NrIGlzIG5ldmVyIGFjY2Vzc2VkIChyZWFkIGZyb20pLgorICBbIHRlY2huaWNhbCBub3RlOiBiZWNhdXNlIGRhdGEgaXMgdHJhbnNmZXJyZWQgaW4gMzItYml0IHVuaXRzIF0KKworLSBGaW5hbGx5IHlvdSBzaG91bGQgdGVzdCBpZiB0aGUgYXNzZW1ibGVyIHZlcnNpb25zIGFyZSBhY3R1YWxseSBmYXN0ZXIKKyAgdGhhbiB0aGUgQyB2ZXJzaW9uIG9uIHlvdXIgbWFjaGluZSAtIHNvbWUgY29tcGlsZXJzIGNhbiBkbyBhIHZlcnkgZ29vZAorICBvcHRpbWl6YXRpb24gam9iLCBhbmQgdGhleSBhbHNvIGNhbiBvcHRpbWl6ZSB0aGUgY29kZSBmb3IgYSBzcGVjaWZpYworICBwcm9jZXNzb3IgdHlwZS4KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xY19zMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xY19zMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYjRiZGYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzFjX3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xY19zMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xY19zMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZjEwMzgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzFjX3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xZl9mMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xZl9mMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0NzNiOWYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzFmX2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xZl9mMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xZl9mMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNWI5NjMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzFmX2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9mMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9mMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4N2VmMDEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF4X2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9mMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9mMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmMzliOTQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF4X2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9zMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9zMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxMDcyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF4X3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9zMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeF9zMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiM2YxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF4X3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9mMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9mMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NTYwZDAKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF5X2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9mMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9mMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxNWU3MGMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF5X2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9zMS5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9zMS5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljYjA2ZDIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF5X3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9zMi5vIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2NvZmYzMi9sem8xeV9zMi5vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYTEwZmYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovY29mZjMyL2x6bzF5X3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFjX3MxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMWNfczEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTNjZTMzCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFjX3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFjX3MyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMWNfczIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDM1NzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFjX3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFmX2YxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMWZfZjEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjNiZDYyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFmX2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFmX2YyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMWZfZjIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTcwYjJiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzFmX2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X2YxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXhfZjEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M4ZGUwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X2YyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXhfZjIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOWNlNzlhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X3MxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXhfczEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTA3NjlhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X3MyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXhfczIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWVmMTlmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF4X3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X2YxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXlfZjEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjhlMDBhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X2YxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X2YyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXlfZjIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I2MGVlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X2YyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X3MxLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXlfczEubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ1YzU2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X3MxLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X3MyLm8gYi9sem8tMi4wMy9hc20vaTM4Ni9vYmovZWxmMzIvbHpvMXlfczIubwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWMwZGJmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvb2JqL2VsZjMyL2x6bzF5X3MyLm8KQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzFjX3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xY19zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdiYzFkNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xY19zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzFjX3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xY19zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcxMTg5OAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xY19zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzFmX2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xZl9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIwOGM5NwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xZl9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzFmX2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xZl9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2QxMTc5OAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xZl9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF4X2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTcyMGVjYgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF4X2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjNmNjM2NAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF4X3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjhkNmMxNQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF4X3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFmNzcyNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeF9zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF5X2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUxMDJjZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF5X2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkZTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF5X3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4NTljMgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL29tZjMyL2x6bzF5X3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVmNmI4MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai9vbWYzMi9sem8xeV9zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzFjX3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xY19zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NWI1MwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xY19zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzFjX3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xY19zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU0NTc5OAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xY19zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzFmX2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xZl9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFiMGNmOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xZl9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzFmX2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xZl9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2VhOWQzNgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xZl9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF4X2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc2MGNhNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF4X2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWNkNGI1ZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF4X3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTkzOWQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF4X3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNkZTk1ZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeF9zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF5X2YxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9mMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQzZjZjZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9mMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF5X2YyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9mMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI3MWJiMAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9mMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF5X3MxLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9zMS5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2MzlmNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9zMS5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvb2JqL3dpbjMyL2x6bzF5X3MyLm9iaiBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9zMi5vYmoKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI0NDRmZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L29iai93aW4zMi9sem8xeV9zMi5vYmoKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2VudGVyLmFzaCBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9lbnRlci5hc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDljNDU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9lbnRlci5hc2gKQEAgLTAsMCArMSw4OSBAQAorLyogZW50ZXIuYXNoIC0tIExaTyBhc3NlbWJsZXIgc3R1ZmYKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgICAgIHB1c2hsICAgJWVicAorICAgICAgICBwdXNobCAgICVlZGkKKyAgICAgICAgcHVzaGwgICAlZXNpCisgICAgICAgIHB1c2hsICAgJWVieAorICAgICAgICBwdXNobCAgICVlY3gKKyAgICAgICAgcHVzaGwgICAlZWR4CisgICAgICAgIHN1YmwgICAgJDEyLCVlc3AKKworICAgICAgICBjbGQKKworICAgICAgICBtb3ZsICAgIElOUCwlZXNpCisgICAgICAgIG1vdmwgICAgT1VUUCwlZWRpCisjaWYgZGVmaW5lZChOXzNfRUJQKQorICAgICAgICBtb3ZsICAgICQzLCVlYnAKKyNlbmRpZgorI2lmIGRlZmluZWQoTl8yNTVfRUJQKQorICAgICAgICBtb3ZsICAgICQyNTUsJWVicAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9JTlBVVCkKKyNpZiBkZWZpbmVkKElOSVRfT1ZFUlJVTikKKyAgICAgICAgSU5JVF9PVkVSUlVOCisjIHVuZGVmIElOSVRfT1ZFUlJVTgorI2VuZGlmCisgICAgICAgIGxlYWwgICAgLTMoJWVzaSksJWVheCAgICAgICAvKiAzID09IGxlbmd0aCBvZiBFT0YgY29kZSAqLworICAgICAgICBhZGRsICAgIElOUywlZWF4CisgICAgICAgIG1vdmwgICAgJWVheCxJTkVORAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9PVVRQVVQpCisjaWYgZGVmaW5lZChJTklUX09WRVJSVU4pCisgICAgICAgIElOSVRfT1ZFUlJVTgorIyB1bmRlZiBJTklUX09WRVJSVU4KKyNlbmRpZgorICAgICAgICBtb3ZsICAgICVlZGksJWVheAorICAgICAgICBtb3ZsICAgIE9VVFMsJWVkeAorICAgICAgICBhZGRsICAgICglZWR4KSwlZWF4CisgICAgICAgIG1vdmwgICAgJWVheCxPVVRFTkQKKyNlbmRpZgorCisKKy8qCit2aTp0cz00CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbGVhdmUuYXNoIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2xlYXZlLmFzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTUwYjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2xlYXZlLmFzaApAQCAtMCwwICsxLDExNCBAQAorLyogbGVhdmUuYXNoIC0tIExaTyBhc3NlbWJsZXIgc3R1ZmYKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjaGVjayB1bmNvbXByZXNzZWQgc2l6ZSAqLworI2lmIGRlZmluZWQoTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX09VVFBVVCkKKyAgICAgICAgY21wbCAgICBPVVRFTkQsJWVkaQorICAgICAgICBqYSAgICAgIC5MX291dHB1dF9vdmVycnVuCisjZW5kaWYKKworLyogY2hlY2sgY29tcHJlc3NlZCBzaXplICovCisgICAgICAgIG1vdmwgICAgSU5QLCVlZHgKKyAgICAgICAgYWRkbCAgICBJTlMsJWVkeAorICAgICAgICBjbXBsICAgICVlZHgsJWVzaSAgICAgICAvKiBjaGVjayBjb21wcmVzc2VkIHNpemUgKi8KKyAgICAgICAgamEgICAgICAuTF9pbnB1dF9vdmVycnVuCisgICAgICAgIGpiICAgICAgLkxfaW5wdXRfbm90X2NvbnN1bWVkCisKKy5MX2xlYXZlOgorICAgICAgICBzdWJsICAgIE9VVFAsJWVkaSAgICAgICAvKiB3cml0ZSBiYWNrIHRoZSB1bmNvbXByZXNzZWQgc2l6ZSAqLworICAgICAgICBtb3ZsICAgIE9VVFMsJWVkeAorICAgICAgICBtb3ZsICAgICVlZGksKCVlZHgpCisKKyAgICAgICAgbmVnbCAgICAlZWF4CisgICAgICAgIGFkZGwgICAgJDEyLCVlc3AKKyAgICAgICAgcG9wbCAgICAlZWR4CisgICAgICAgIHBvcGwgICAgJWVjeAorICAgICAgICBwb3BsICAgICVlYngKKyAgICAgICAgcG9wbCAgICAlZXNpCisgICAgICAgIHBvcGwgICAgJWVkaQorICAgICAgICBwb3BsICAgICVlYnAKKyNpZiAxCisgICAgICAgIHJldAorI2Vsc2UKKyAgICAgICAgam1wICAgICAuTF9lbmQKKyNlbmRpZgorCisKKy5MX2Vycm9yOgorICAgICAgICBtb3ZsICAgICQxLCVlYXggICAgICAgICAvKiBMWk9fRV9FUlJPUiAqLworICAgICAgICBqbXAgICAgIC5MX2xlYXZlCisKKy5MX2lucHV0X25vdF9jb25zdW1lZDoKKyAgICAgICAgbW92bCAgICAkOCwlZWF4ICAgICAgICAgLyogTFpPX0VfSU5QVVRfTk9UX0NPTlNVTUVEICovCisgICAgICAgIGptcCAgICAgLkxfbGVhdmUKKworLkxfaW5wdXRfb3ZlcnJ1bjoKKyAgICAgICAgbW92bCAgICAkNCwlZWF4ICAgICAgICAgLyogTFpPX0VfSU5QVVRfT1ZFUlJVTiAqLworICAgICAgICBqbXAgICAgIC5MX2xlYXZlCisKKyNpZiBkZWZpbmVkKExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9PVVRQVVQpCisuTF9vdXRwdXRfb3ZlcnJ1bjoKKyAgICAgICAgbW92bCAgICAkNSwlZWF4ICAgICAgICAgLyogTFpPX0VfT1VUUFVUX09WRVJSVU4gKi8KKyAgICAgICAgam1wICAgICAuTF9sZWF2ZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9MT09LQkVISU5EKQorLkxfbG9va2JlaGluZF9vdmVycnVuOgorICAgICAgICBtb3ZsICAgICQ2LCVlYXggICAgICAgICAvKiBMWk9fRV9MT09LQkVISU5EX09WRVJSVU4gKi8KKyAgICAgICAgam1wICAgICAuTF9sZWF2ZQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19ERUJVRykKKy5MX2Fzc2VydF9mYWlsOgorICAgICAgICBtb3ZsICAgICQ5OSwlZWF4CisgICAgICAgIGptcCAgICAgLkxfbGVhdmUKKyNlbmRpZgorCisuTF9lbmQ6CisKKworLyoKK3ZpOnRzPTQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xY19kLmFzaCBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xY19kLmFzaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTY5Yzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzFjX2QuYXNoCkBAIC0wLDAgKzEsMTg0IEBACisvKiBsem8xY19kLmFzaCAtLSBhc3NlbWJsZXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIExaTzFDIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgICAgICBBTElHTjMKKy5MMToKKyAgICAgICAgeG9ybCAgICAlZWF4LCVlYXgKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWFsCisgICAgICAgIGluY2wgICAgJWVzaQorICAgICAgICBjbXBiICAgICQzMiwlYWwKKyAgICAgICAgam5iICAgICAuTE1BVENICisKKyAgICAgICAgb3JiICAgICAlYWwsJWFsCisgICAgICAgIGp6ICAgICAgLkwxMgorICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorLkxJVDoKKyAgICAgICAgVEVTVF9PUCgoJWVkaSwlZWN4KSwlZWJ4KQorICAgICAgICBURVNUX0lQKCglZXNpLCVlY3gpLCVlYngpCisgICAgICAgIHJlcAorICAgICAgICBtb3ZzYgorLkxNMToKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWFsCisgICAgICAgIGluY2wgICAgJWVzaQorCisgICAgICAgIGNtcGIgICAgJDMyLCVhbAorICAgICAgICBqYiAgICAgIC5MTTIKKy5MTUFUQ0g6CisgICAgICAgIGNtcGIgICAgJDY0LCVhbAorICAgICAgICBqYiAgICAgIC5MTjMKKworICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorICAgICAgICBhbmRiICAgICQzMSwlYWwKKyAgICAgICAgbGVhbCAgICAtMSglZWRpKSwlZWR4CisgICAgICAgIHNocmwgICAgJDUsJWVjeAorICAgICAgICBzdWJsICAgICVlYXgsJWVkeAorICAgICAgICBtb3ZiICAgICglZXNpKSwlYWwKKyAgICAgICAgaW5jbCAgICAlZXNpCisKKyAgICAgICAgc2hsbCAgICAkNSwlZWF4CisgICAgICAgIHN1YmwgICAgJWVheCwlZWR4CisgICAgICAgIGluY2wgICAgJWVjeAorICAgICAgICB4Y2hnbCAgICVlc2ksJWVkeAorICAgICAgICBURVNUX0xPT0tCRUhJTkQoJWVzaSkKKyAgICAgICAgVEVTVF9PUCgoJWVkaSwlZWN4KSwlZWJ4KQorICAgICAgICByZXAKKyAgICAgICAgbW92c2IKKyAgICAgICAgbW92bCAgICAlZWR4LCVlc2kKKyAgICAgICAgam1wICAgICAuTDEKKworICAgICAgICBBTElHTjMKKy5MMTI6CisgICAgICAgIExPRFNCCisgICAgICAgIGxlYWwgICAgMzIoJWVheCksJWVjeAorICAgICAgICBjbXBiICAgICQyNDgsJWFsCisgICAgICAgIGpiICAgICAgLkxJVAorCisgICAgICAgIG1vdmwgICAgJDI4MCwlZWN4CisgICAgICAgIHN1YmIgICAgJDI0OCwlYWwKKyAgICAgICAganogICAgICAuTDExCisgICAgICAgIHhjaGdsICAgJWVheCwlZWN4CisgICAgICAgIHhvcmIgICAgJWFsLCVhbAorICAgICAgICBzaGxsICAgICVjbCwlZWF4CisgICAgICAgIHhjaGdsICAgJWVheCwlZWN4CisuTDExOgorICAgICAgICBURVNUX09QKCglZWRpLCVlY3gpLCVlYngpCisgICAgICAgIFRFU1RfSVAoKCVlc2ksJWVjeCksJWVieCkKKyAgICAgICAgcmVwCisgICAgICAgIG1vdnNiCisgICAgICAgIGptcCAgICAgLkwxCisKKyAgICAgICAgQUxJR04zCisuTE0yOgorICAgICAgICBsZWFsICAgIC0xKCVlZGkpLCVlZHgKKyAgICAgICAgc3VibCAgICAlZWF4LCVlZHgKKyAgICAgICAgTE9EU0IKKyAgICAgICAgc2hsbCAgICAkNSwlZWF4CisgICAgICAgIHN1YmwgICAgJWVheCwlZWR4CisgICAgICAgIHhjaGdsICAgJWVzaSwlZWR4CisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZXNpKQorICAgICAgICBURVNUX09QKDQoJWVkaSksJWVieCkKKyAgICAgICAgbW92c2IKKyAgICAgICAgbW92c2IKKyAgICAgICAgbW92c2IKKyAgICAgICAgbW92bCAgICAlZWR4LCVlc2kKKyAgICAgICAgbW92c2IKKyAgICAgICAgeG9ybCAgICAlZWF4LCVlYXgKKyAgICAgICAgam1wICAgICAuTE0xCisuTE4zOgorICAgICAgICBhbmRiICAgICQzMSwlYWwKKyAgICAgICAgbW92bCAgICAlZWF4LCVlY3gKKyAgICAgICAgam56ICAgICAuTE42CisgICAgICAgIG1vdmIgICAgJDMxLCVjbAorLkxONDoKKyAgICAgICAgTE9EU0IKKyAgICAgICAgb3JiICAgICAlYWwsJWFsCisgICAgICAgIGpueiAgICAgLkxONQorICAgICAgICBhZGRsICAgIE5fMjU1LCVlY3gKKyAgICAgICAgam1wICAgICAuTE40CisKKyAgICAgICAgQUxJR04zCisuTE41OgorICAgICAgICBhZGRsICAgICVlYXgsJWVjeAorLkxONjoKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWFsCisgICAgICAgIGluY2wgICAgJWVzaQorCisgICAgICAgIG1vdmwgICAgJWVheCwlZWJ4CisgICAgICAgIGFuZGIgICAgJDYzLCVhbAorICAgICAgICBtb3ZsICAgICVlZGksJWVkeAorICAgICAgICBzdWJsICAgICVlYXgsJWVkeAorCisgICAgICAgIG1vdmIgICAgKCVlc2kpLCVhbAorICAgICAgICBpbmNsICAgICVlc2kKKworICAgICAgICBzaGxsICAgICQ2LCVlYXgKKyAgICAgICAgc3VibCAgICAlZWF4LCVlZHgKKyAgICAgICAgY21wbCAgICAlZWRpLCVlZHgKKyAgICAgICAganogICAgICAuTEVPRgorCisgICAgICAgIHhjaGdsICAgJWVkeCwlZXNpCisgICAgICAgIGxlYWwgICAgMyglZWN4KSwlZWN4CisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZXNpKQorICAgICAgICBURVNUX09QKCglZWRpLCVlY3gpLCVlYXgpCisgICAgICAgIHJlcAorICAgICAgICBtb3ZzYgorCisgICAgICAgIG1vdmwgICAgJWVkeCwlZXNpCisgICAgICAgIHhvcmwgICAgJWVheCwlZWF4CisgICAgICAgIHNocmwgICAgJDYsJWVieAorICAgICAgICBtb3ZsICAgICVlYngsJWVjeAorICAgICAgICBqbnogICAgIC5MSVQKKyAgICAgICAgam1wICAgICAuTDEKKworLkxFT0Y6CisvKioqKiAgIHhvcmwgICAgJWVheCwlZWF4ICAgICAgICAgIGVheD0wIGZyb20gYWJvdmUgKi8KKworICAgICAgICBjbXBsICAgICQxLCVlY3ggICAgICAgICAvKiBlY3ggbXVzdCBiZSAxICovCisgICAgICAgIHNldG56ICAgJWFsCisKKworLyoKK3ZpOnRzPTQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xY19zMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzFjX3MxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlhNzQ0MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xY19zMS5TCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGx6bzFjX3MxLlMgLS0gTFpPMUMgZGVjb21wcmVzc2lvbiBpbiBhc3NlbWJsZXIgKGkzODYgKyBnY2MpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImx6b19hc20uaCIKKworICAgIC50ZXh0CisKKyAgICBMWk9fUFVCTElDKGx6bzFjX2RlY29tcHJlc3NfYXNtKQorCisjaW5jbHVkZSAiZW50ZXIuYXNoIgorI2luY2x1ZGUgImx6bzFjX2QuYXNoIgorI2luY2x1ZGUgImxlYXZlLmFzaCIKKworICAgIExaT19QVUJMSUNfRU5EKGx6bzFjX2RlY29tcHJlc3NfYXNtKQorCisKKy8qCit2aTp0cz00CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMWNfczIuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xY19zMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3NGQzZjkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMWNfczIuUwpAQCAtMCwwICsxLDY1IEBACisvKiBsem8xY19zMi5TIC0tIExaTzFDIGRlY29tcHJlc3Npb24gaW4gYXNzZW1ibGVyIChpMzg2ICsgZ2NjKQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX0lOUFVUCisjZGVmaW5lIExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9PVVRQVVQKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX0xPT0tCRUhJTkQKKworI2luY2x1ZGUgImx6b19hc20uaCIKKworICAgIC50ZXh0CisKKyAgICBMWk9fUFVCTElDKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpCisKKyNpbmNsdWRlICJlbnRlci5hc2giCisjaW5jbHVkZSAibHpvMWNfZC5hc2giCisjaW5jbHVkZSAibGVhdmUuYXNoIgorCisgICAgTFpPX1BVQkxJQ19FTkQobHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzFmX2QuYXNoIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzFmX2QuYXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOTI3OWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMWZfZC5hc2gKQEAgLTAsMCArMSwxNzYgQEAKKy8qIGx6bzFmX2QuYXNoIC0tIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUYgZGVjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgICAgIEFMSUdOMworLkwwOgorICAgICAgICB4b3JsICAgICVlYXgsJWVheAorICAgICAgICBtb3ZiICAgICglZXNpKSwlYWwKKyAgICAgICAgaW5jbCAgICAlZXNpCisgICAgICAgIGNtcGIgICAgJDMxLCVhbAorICAgICAgICBqYSAgICAgIC5MTTIKKworICAgICAgICBvcmIgICAgICVhbCwlYWwKKyAgICAgICAgbW92bCAgICAlZWF4LCVlY3gKKyAgICAgICAgam56ICAgICAuTDIKKzE6CisgICAgICAgIExPRFNCCisgICAgICAgIG9yYiAgICAgJWFsLCVhbAorICAgICAgICBqbnogICAgIDJmCisgICAgICAgIGFkZGwgICAgTl8yNTUsJWVjeAorICAgICAgICBqbXAgICAgIDFiCisyOgorICAgICAgICBsZWEgICAgIDMxKCVlYXgsJWVjeCksJWVjeAorLkwyOgorICAgICAgICBURVNUX09QKCglZWRpLCVlY3gpLCVlYngpCisgICAgICAgIFRFU1RfSVAoKCVlc2ksJWVjeCksJWVieCkKKyAgICAgICAgbW92YiAgICAlY2wsJWFsCisgICAgICAgIHNocmwgICAgJDIsJWVjeAorICAgICAgICByZXAKKyAgICAgICAgbW92c2wKKyAgICAgICAgYW5kYiAgICAkMywlYWwKKyAgICAgICAganogICAgICAxZgorICAgICAgICBtb3ZsICAgICglZXNpKSwlZWJ4CisgICAgICAgIGFkZGwgICAgJWVheCwlZXNpCisgICAgICAgIG1vdmwgICAgJWVieCwoJWVkaSkKKyAgICAgICAgYWRkbCAgICAlZWF4LCVlZGkKKzE6CisgICAgICAgIG1vdmIgICAgKCVlc2kpLCVhbAorICAgICAgICBpbmNsICAgICVlc2kKKy5MTTE6CisgICAgICAgIGNtcGIgICAgJDMxLCVhbAorICAgICAgICBqYmUgICAgIC5MTTIxCisKKy5MTTI6CisgICAgICAgIGNtcGIgICAgJDIyMywlYWwKKyAgICAgICAgamEgICAgICAuTE0zCisKKyAgICAgICAgbW92bCAgICAlZWF4LCVlY3gKKyAgICAgICAgc2hybCAgICAkMiwlZWF4CisgICAgICAgIGxlYSAgICAgLTEoJWVkaSksJWVkeAorICAgICAgICBhbmRiICAgICQ3LCVhbAorICAgICAgICBzaHJsICAgICQ1LCVlY3gKKyAgICAgICAgbW92bCAgICAlZWF4LCVlYngKKworICAgICAgICBtb3ZiICAgICglZXNpKSwlYWwKKyAgICAgICAgbGVhbCAgICAoJWVieCwlZWF4LDgpLCVlYXgKKyAgICAgICAgaW5jbCAgICAlZXNpCisuTE01OgorICAgICAgICBzdWJsICAgICVlYXgsJWVkeAorICAgICAgICBhZGRsICAgICQyLCVlY3gKKyAgICAgICAgeGNoZ2wgICAlZWR4LCVlc2kKKyAgICAgICAgVEVTVF9MT09LQkVISU5EKCVlc2kpCisgICAgICAgIFRFU1RfT1AoKCVlZGksJWVjeCksJWVieCkKKyAgICAgICAgY21wbCAgICAkNiwlZWN4CisgICAgICAgIGpiICAgICAgMWYKKyAgICAgICAgY21wbCAgICAkNCwlZWF4CisgICAgICAgIGpiICAgICAgMWYKKyAgICAgICAgbW92YiAgICAlY2wsJWFsCisgICAgICAgIHNocmwgICAgJDIsJWVjeAorICAgICAgICByZXAKKyAgICAgICAgbW92c2wKKyAgICAgICAgYW5kYiAgICAkMywlYWwKKyAgICAgICAgbW92YiAgICAlYWwsJWNsCisxOgorICAgICAgICByZXAKKyAgICAgICAgbW92c2IKKyAgICAgICAgbW92bCAgICAlZWR4LCVlc2kKKy5MTjE6CisgICAgICAgIG1vdmIgICAgLTIoJWVzaSksJWNsCisgICAgICAgIGFuZGwgICAgJDMsJWVjeAorICAgICAgICBqeiAgICAgIC5MMAorICAgICAgICBtb3ZsICAgICglZXNpKSwlZWF4CisgICAgICAgIGFkZGwgICAgJWVjeCwlZXNpCisgICAgICAgIG1vdmwgICAgJWVheCwoJWVkaSkKKyAgICAgICAgYWRkbCAgICAlZWN4LCVlZGkKKyAgICAgICAgeG9ybCAgICAlZWF4LCVlYXgKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWFsCisgICAgICAgIGluY2wgICAgJWVzaQorICAgICAgICBqbXAgICAgIC5MTTEKKy5MTTIxOgorICAgICAgICBURVNUX09QKDMoJWVkaSksJWVkeCkKKyAgICAgICAgc2hybCAgICAkMiwlZWF4CisgICAgICAgIGxlYWwgICAgLTB4ODAxKCVlZGkpLCVlZHgKKyAgICAgICAgbW92bCAgICAlZWF4LCVlY3gKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWFsCisgICAgICAgIGluY2wgICAgJWVzaQorICAgICAgICBsZWFsICAgICglZWN4LCVlYXgsOCksJWVheAorICAgICAgICBzdWJsICAgICVlYXgsJWVkeAorICAgICAgICBURVNUX0xPT0tCRUhJTkQoJWVkeCkKKyAgICAgICAgbW92bCAgICAoJWVkeCksJWVheAorICAgICAgICBtb3ZsICAgICVlYXgsKCVlZGkpCisgICAgICAgIGFkZGwgICAgJDMsJWVkaQorICAgICAgICBqbXAgICAgIC5MTjEKKzE6CisgICAgICAgIExPRFNCCisgICAgICAgIG9yYiAgICAgJWFsLCVhbAorICAgICAgICBqbnogICAgIDJmCisgICAgICAgIGFkZGwgICAgTl8yNTUsJWVjeAorICAgICAgICBqbXAgICAgIDFiCisyOgorICAgICAgICBsZWEgICAgIDMxKCVlYXgsJWVjeCksJWVjeAorICAgICAgICBqbXAgICAgIC5MTTQKKworICAgICAgICBBTElHTjMKKy5MTTM6CisgICAgICAgIGFuZGIgICAgJDMxLCVhbAorICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorICAgICAgICBqeiAgICAgIDFiCisuTE00OgorICAgICAgICBtb3ZsICAgICVlZGksJWVkeAorICAgICAgICBtb3Z3ICAgICglZXNpKSwlYXgKKyAgICAgICAgYWRkbCAgICAkMiwlZXNpCisgICAgICAgIHNocmwgICAgJDIsJWVheAorICAgICAgICBqbnogICAgIC5MTTUKKworLkxFT0Y6CisvKioqKiAgIHhvcmwgICAgJWVheCwlZWF4ICAgICAgICAgIGVheD0wIGZyb20gYWJvdmUgKi8KKworICAgICAgICBjbXBsICAgICQxLCVlY3ggICAgICAgICAvKiBlY3ggbXVzdCBiZSAxICovCisgICAgICAgIHNldG56ICAgJWFsCisKKworLyoKK3ZpOnRzPTQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xZl9mMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzFmX2YxLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0YzJmOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xZl9mMS5TCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGx6bzFmX2YxLlMgLS0gZmFzdCBMWk8xRiBkZWNvbXByZXNzaW9uIGluIGFzc2VtYmxlciAoaTM4NiArIGdjYykKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkKKworI2luY2x1ZGUgImVudGVyLmFzaCIKKyNpbmNsdWRlICJsem8xZl9kLmFzaCIKKyNpbmNsdWRlICJsZWF2ZS5hc2giCisKKyAgICBMWk9fUFVCTElDX0VORChsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KQorCisKKy8qCit2aTp0cz00CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMWZfZjIuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xZl9mMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3Njc2OWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMWZfZjIuUwpAQCAtMCwwICsxLDY1IEBACisvKiBsem8xZl9mMi5TIC0tIGZhc3QgTFpPMUYgZGVjb21wcmVzc2lvbiBpbiBhc3NlbWJsZXIgKGkzODYgKyBnY2MpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fSU5QVVQKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX09VVFBVVAorI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fTE9PS0JFSElORAorCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorCisjaW5jbHVkZSAiZW50ZXIuYXNoIgorI2luY2x1ZGUgImx6bzFmX2QuYXNoIgorI2luY2x1ZGUgImxlYXZlLmFzaCIKKworICAgIExaT19QVUJMSUNfRU5EKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2QuYXNoIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2QuYXNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhMTM4MzUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXhfZC5hc2gKQEAgLTAsMCArMSw0MDEgQEAKKy8qIGx6bzF4X2QuYXNoIC0tIGFzc2VtYmxlciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMVggZGVjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2lmICFkZWZpbmVkKExaTzFYKSAmJiAhZGVmaW5lZChMWk8xWSkKKyMgIGRlZmluZSBMWk8xWAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19GQVNUKQorIyAgZGVmaW5lIE5OICAgIDMKKyNlbHNlCisjICBkZWZpbmUgTk4gICAgMAorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBpbml0CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAgICAgeG9ybCAgICAlZWF4LCVlYXgKKyAgICAgICAgeG9ybCAgICAlZWJ4LCVlYnggICAgICAgLyogaGlnaCBiaXRzIDktMzIgc3RheSAwICovCisgICAgICAgIGxvZHNiCisgICAgICAgIGNtcGIgICAgJDE3LCVhbAorICAgICAgICBqYmUgICAgIC5MMDEKKyAgICAgICAgc3ViYiAgICAkMTctTk4sJWFsCisjaWYgZGVmaW5lZChMWk9fRkFTVCkKKyAgICAgICAgam1wICAgICAuTEZMUgorI2Vsc2UKKyAgICAgICAgY21wYiAgICAkNCwlYWwKKyAgICAgICAgamFlICAgICAuTEZMUgorI2lmIDEKKyAgICAgICAgVEVTVF9PUCgoJWVkaSwlZWF4KSwlZWR4KQorICAgICAgICBURVNUX0lQKCglZXNpLCVlYXgpLCVlZHgpCisgICAgICAgIG1vdmwgICAgJWVheCwlZWN4CisgICAgICAgIGptcCAgICAgLkxGTFIyCisjZWxzZQorICAgICAgICBqbXAgICAgIC5MRkxSMworI2VuZGlmCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGxpdGVyYWwgcnVuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKzA6ICAgICAgYWRkbCAgICBOXzI1NSwlZWF4CisgICAgICAgIFRFU1RfSVAoMTgoJWVzaSwlZWF4KSwlZWR4KSAgICAgLyogbWluaW11bSAqLworMTogICAgICBtb3ZiICAgICglZXNpKSwlYmwKKyAgICAgICAgaW5jbCAgICAlZXNpCisgICAgICAgIG9yYiAgICAgJWJsLCVibAorICAgICAgICBqeiAgICAgIDBiCisgICAgICAgIGxlYWwgICAgMTgrTk4oJWVheCwlZWJ4KSwlZWF4CisgICAgICAgIGptcCAgICAgM2YKKworCisgICAgICAgIEFMSUdOMworLkwwMDoKKyNpZmRlZiBMWk9fREVCVUcKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYXggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYnggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICB4b3JsICVlYXgsJWVheCA7IHhvcmwgJWVieCwlZWJ4CisgICAgeG9ybCAlZWN4LCVlY3ggOyB4b3JsICVlZHgsJWVkeAorI2VuZGlmCisgICAgICAgIFRFU1RfSVBfUiglZXNpKQorICAgICAgICBMT0RTQgorLkwwMToKKyAgICAgICAgY21wYiAgICAkMTYsJWFsCisgICAgICAgIGphZSAgICAgLkxNQVRDSAorCisvKiBhIGxpdGVyYWwgcnVuICovCisgICAgICAgIG9yYiAgICAgJWFsLCVhbAorICAgICAgICBqeiAgICAgIDFiCisgICAgICAgIGFkZGwgICAgJDMrTk4sJWVheAorMzoKKy5MRkxSOgorICAgICAgICBURVNUX09QKC1OTiglZWRpLCVlYXgpLCVlZHgpCisgICAgICAgIFRFU1RfSVAoLU5OKCVlc2ksJWVheCksJWVkeCkKKyNpZiBkZWZpbmVkKExaT19GQVNUKQorICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorICAgICAgICBOT1RMXzMoJWVheCkKKyAgICAgICAgc2hybCAgICAkMiwlZWN4CisgICAgICAgIGFuZGwgICAgTl8zLCVlYXgKKyAgICAgICAgQ09QWUwoJWVzaSwlZWRpLCVlZHgpCisgICAgICAgIHN1YmwgICAgJWVheCwlZXNpCisgICAgICAgIHN1YmwgICAgJWVheCwlZWRpCisjZWxzZQorICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorICAgICAgICBzaHJsICAgICQyLCVlYXgKKyAgICAgICAgYW5kbCAgICBOXzMsJWVjeAorICAgICAgICBDT1BZTF9DKCVlc2ksJWVkaSwlZWR4LCVlYXgpCisuTEZMUjI6CisgICAgICAgIHJlcAorICAgICAgICBtb3ZzYgorI2VuZGlmCisKKyNpZmRlZiBMWk9fREVCVUcKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYXggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYnggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICB4b3JsICVlYXgsJWVheCA7IHhvcmwgJWVieCwlZWJ4CisgICAgeG9ybCAlZWN4LCVlY3ggOyB4b3JsICVlZHgsJWVkeAorI2VuZGlmCisgICAgICAgIExPRFNCCisgICAgICAgIGNtcGIgICAgJDE2LCVhbAorICAgICAgICBqYWUgICAgIC5MTUFUQ0gKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFIxCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAgICAgVEVTVF9PUCgzKCVlZGkpLCVlZHgpCisgICAgICAgIHNocmwgICAgJDIsJWVheAorICAgICAgICBtb3ZiICAgICglZXNpKSwlYmwKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICBsZWFsICAgIC0weDgwMSglZWRpKSwlZWR4CisjZWxpZiBkZWZpbmVkKExaTzFZKQorICAgICAgICBsZWFsICAgIC0weDQwMSglZWRpKSwlZWR4CisjZW5kaWYKKyAgICAgICAgbGVhbCAgICAoJWVheCwlZWJ4LDQpLCVlYXgKKyAgICAgICAgaW5jbCAgICAlZXNpCisgICAgICAgIHN1YmwgICAgJWVheCwlZWR4CisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZWR4KQorI2lmIGRlZmluZWQoTFpPX0ZBU1QpCisgICAgICAgIG1vdmwgICAgKCVlZHgpLCVlY3gKKyAgICAgICAgbW92bCAgICAlZWN4LCglZWRpKQorI2Vsc2UKKyAgICAgICAgbW92YiAgICAoJWVkeCksJWFsCisgICAgICAgIG1vdmIgICAgJWFsLCglZWRpKQorICAgICAgICBtb3ZiICAgIDEoJWVkeCksJWFsCisgICAgICAgIG1vdmIgICAgJWFsLDEoJWVkaSkKKyAgICAgICAgbW92YiAgICAyKCVlZHgpLCVhbAorICAgICAgICBtb3ZiICAgICVhbCwyKCVlZGkpCisjZW5kaWYKKyAgICAgICAgYWRkbCAgICBOXzMsJWVkaQorICAgICAgICBqbXAgICAgIC5MTURPTkUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE0yCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgICAgICAgQUxJR04zCisuTE1BVENIOgorICAgICAgICBjbXBiICAgICQ2NCwlYWwKKyAgICAgICAgamIgICAgICAuTE0zTUFUQ0gKKworLyogYSBNMiBtYXRjaCAqLworICAgICAgICBtb3ZsICAgICVlYXgsJWVjeAorICAgICAgICBzaHJsICAgICQyLCVlYXgKKyAgICAgICAgbGVhbCAgICAtMSglZWRpKSwlZWR4CisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgYW5kbCAgICAkNywlZWF4CisgICAgICAgIG1vdmIgICAgKCVlc2kpLCVibAorICAgICAgICBzaHJsICAgICQ1LCVlY3gKKyAgICAgICAgbGVhbCAgICAoJWVheCwlZWJ4LDgpLCVlYXgKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgIGFuZGwgICAgTl8zLCVlYXgKKyAgICAgICAgbW92YiAgICAoJWVzaSksJWJsCisgICAgICAgIHNocmwgICAgJDQsJWVjeAorICAgICAgICBsZWFsICAgICglZWF4LCVlYngsNCksJWVheAorI2VuZGlmCisgICAgICAgIGluY2wgICAgJWVzaQorICAgICAgICBzdWJsICAgICVlYXgsJWVkeAorCisjaWYgZGVmaW5lZChMWk9fRkFTVCkKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICBhZGRsICAgICQxKzMsJWVjeAorI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICAgICAgYWRkbCAgICAkMiwlZWN4CisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgaW5jbCAgICAlZWN4CisjZWxpZiBkZWZpbmVkKExaTzFZKQorICAgICAgICBkZWNsICAgICVlY3gKKyNlbmRpZgorI2VuZGlmCisKKyAgICAgICAgY21wbCAgICBOXzMsJWVheAorICAgICAgICBqYWUgICAgIC5MQ09QWUxPTkcKKyAgICAgICAgam1wICAgICAuTENPUFlCWVRFCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNMworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiswOiAgICAgIGFkZGwgICAgTl8yNTUsJWVheAorICAgICAgICBURVNUX0lQKDMoJWVzaSksJWVkeCkgICAgICAgLyogbWluaW11bSAqLworMTogICAgICBtb3ZiICAgICglZXNpKSwlYmwKKyAgICAgICAgaW5jbCAgICAlZXNpCisgICAgICAgIG9yYiAgICAgJWJsLCVibAorICAgICAgICBqeiAgICAgIDBiCisgICAgICAgIGxlYWwgICAgMzMrTk4oJWVheCwlZWJ4KSwlZWN4CisgICAgICAgIHhvcmwgICAgJWVheCwlZWF4CisgICAgICAgIGptcCAgICAgM2YKKworCisgICAgICAgIEFMSUdOMworLkxNM01BVENIOgorICAgICAgICBjbXBiICAgICQzMiwlYWwKKyAgICAgICAgamIgICAgICAuTE00TUFUQ0gKKworLyogYSBNMyBtYXRjaCAqLworICAgICAgICBhbmRsICAgICQzMSwlZWF4CisgICAgICAgIGp6ICAgICAgMWIKKyAgICAgICAgbGVhICAgICAyK05OKCVlYXgpLCVlY3gKKzM6CisjaWZkZWYgTFpPX0RFQlVHCisgICAgYW5kbCAkMHhmZmZmMDAwMCwlZWF4IDsgam56IC5MX2Fzc2VydF9mYWlsCisjZW5kaWYKKyAgICAgICAgbW92dyAgICAoJWVzaSksJWF4CisgICAgICAgIGxlYWwgICAgLTEoJWVkaSksJWVkeAorICAgICAgICBzaHJsICAgICQyLCVlYXgKKyAgICAgICAgYWRkbCAgICAkMiwlZXNpCisgICAgICAgIHN1YmwgICAgJWVheCwlZWR4CisKKyAgICAgICAgY21wbCAgICBOXzMsJWVheAorICAgICAgICBqYiAgICAgIC5MQ09QWUJZVEUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvcHkgbWF0Y2gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgICAgICBBTElHTjEKKy5MQ09QWUxPTkc6ICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgbWF0Y2ggdXNpbmcgbG9uZ3dvcmRzICovCisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZWR4KQorI2lmIGRlZmluZWQoTFpPX0ZBU1QpCisgICAgICAgIGxlYWwgICAgLTMoJWVkaSwlZWN4KSwlZWF4CisgICAgICAgIHNocmwgICAgJDIsJWVjeAorICAgICAgICBURVNUX09QX1IoJWVheCkKKyAgICAgICAgQ09QWUwoJWVkeCwlZWRpLCVlYngpCisgICAgICAgIG1vdmwgICAgJWVheCwlZWRpCisgICAgICAgIHhvcmwgICAgJWVieCwlZWJ4CisjZWxzZQorICAgICAgICBURVNUX09QKCglZWRpLCVlY3gpLCVlYXgpCisgICAgICAgIG1vdmwgICAgJWVjeCwlZWJ4CisgICAgICAgIHNocmwgICAgJDIsJWVieAorICAgICAgICBqeiAgICAgIDJmCisgICAgICAgIENPUFlMX0MoJWVkeCwlZWRpLCVlYXgsJWVieCkKKyAgICAgICAgYW5kbCAgICBOXzMsJWVjeAorICAgICAgICBqeiAgICAgIDFmCisyOiAgICAgIENPUFlCX0MoJWVkeCwlZWRpLCVhbCwlZWN4KQorMToKKyNlbmRpZgorCisuTE1ET05FOgorICAgICAgICBtb3ZiICAgIC0yKCVlc2kpLCVhbAorICAgICAgICBhbmRsICAgIE5fMywlZWF4CisgICAgICAgIGp6ICAgICAgLkwwMAorLkxGTFIzOgorICAgICAgICBURVNUX09QKCglZWRpLCVlYXgpLCVlZHgpCisgICAgICAgIFRFU1RfSVAoKCVlc2ksJWVheCksJWVkeCkKKyNpZiBkZWZpbmVkKExaT19GQVNUKQorICAgICAgICBtb3ZsICAgICglZXNpKSwlZWR4CisgICAgICAgIGFkZGwgICAgJWVheCwlZXNpCisgICAgICAgIG1vdmwgICAgJWVkeCwoJWVkaSkKKyAgICAgICAgYWRkbCAgICAlZWF4LCVlZGkKKyNlbHNlCisgICAgICAgIENPUFlCX0MoJWVzaSwlZWRpLCVjbCwlZWF4KQorI2VuZGlmCisKKyNpZmRlZiBMWk9fREVCVUcKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYXggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICBhbmRsICQweGZmZmZmZjAwLCVlYnggOyBqbnogLkxfYXNzZXJ0X2ZhaWwKKyAgICB4b3JsICVlYXgsJWVheCA7IHhvcmwgJWVieCwlZWJ4CisgICAgeG9ybCAlZWN4LCVlY3ggOyB4b3JsICVlZHgsJWVkeAorI2VuZGlmCisgICAgICAgIExPRFNCCisgICAgICAgIGptcCAgICAgLkxNQVRDSAorCisKKyAgICAgICAgQUxJR04zCisuTENPUFlCWVRFOiAgICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IG1hdGNoIHVzaW5nIGJ5dGVzICovCisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZWR4KQorICAgICAgICBURVNUX09QKC1OTiglZWRpLCVlY3gpLCVlYXgpCisgICAgICAgIHhjaGdsICAgJWVkeCwlZXNpCisjaWYgZGVmaW5lZChMWk9fRkFTVCkKKyAgICAgICAgc3VibCAgICBOXzMsJWVjeAorI2VuZGlmCisgICAgICAgIHJlcAorICAgICAgICBtb3ZzYgorICAgICAgICBtb3ZsICAgICVlZHgsJWVzaQorICAgICAgICBqbXAgICAgIC5MTURPTkUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIE00CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKzA6ICAgICAgYWRkbCAgICBOXzI1NSwlZWN4CisgICAgICAgIFRFU1RfSVAoMyglZXNpKSwlZWR4KSAgICAgICAvKiBtaW5pbXVtICovCisxOiAgICAgIG1vdmIgICAgKCVlc2kpLCVibAorICAgICAgICBpbmNsICAgICVlc2kKKyAgICAgICAgb3JiICAgICAlYmwsJWJsCisgICAgICAgIGp6ICAgICAgMGIKKyAgICAgICAgbGVhbCAgICA5K05OKCVlYngsJWVjeCksJWVjeAorICAgICAgICBqbXAgICAgIDNmCisKKworICAgICAgICBBTElHTjMKKy5MTTRNQVRDSDoKKyAgICAgICAgY21wYiAgICAkMTYsJWFsCisgICAgICAgIGpiICAgICAgLkxNMU1BVENICisKKy8qIGEgTTQgbWF0Y2ggKi8KKyAgICAgICAgbW92bCAgICAlZWF4LCVlY3gKKyAgICAgICAgYW5kbCAgICAkOCwlZWF4CisgICAgICAgIHNobGwgICAgJDEzLCVlYXggICAgICAgIC8qIHNhdmUgaW4gYml0IDE2ICovCisgICAgICAgIGFuZGwgICAgJDcsJWVjeAorICAgICAgICBqeiAgICAgIDFiCisgICAgICAgIGFkZGwgICAgJDIrTk4sJWVjeAorMzoKKyNpZmRlZiBMWk9fREVCVUcKKyAgICBtb3ZsICVlYXgsJWVkeCA7IGFuZGwgJDB4ZmZmZTAwMDAsJWVkeCA7IGpueiAuTF9hc3NlcnRfZmFpbAorI2VuZGlmCisgICAgICAgIG1vdncgICAgKCVlc2kpLCVheAorICAgICAgICBhZGRsICAgICQyLCVlc2kKKyAgICAgICAgbGVhbCAgICAtMHg0MDAwKCVlZGkpLCVlZHgKKyAgICAgICAgc2hybCAgICAkMiwlZWF4CisgICAgICAgIGp6ICAgICAgLkxFT0YKKyAgICAgICAgc3VibCAgICAlZWF4LCVlZHgKKyAgICAgICAgam1wICAgICAuTENPUFlMT05HCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBNMQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgICAgIEFMSUdOMworLkxNMU1BVENIOgorLyogYSBNMSBtYXRjaCAqLworICAgICAgICBURVNUX09QKDIoJWVkaSksJWVkeCkKKyAgICAgICAgc2hybCAgICAkMiwlZWF4CisgICAgICAgIG1vdmIgICAgKCVlc2kpLCVibAorICAgICAgICBsZWFsICAgIC0xKCVlZGkpLCVlZHgKKyAgICAgICAgbGVhbCAgICAoJWVheCwlZWJ4LDQpLCVlYXgKKyAgICAgICAgaW5jbCAgICAlZXNpCisgICAgICAgIHN1YmwgICAgJWVheCwlZWR4CisgICAgICAgIFRFU1RfTE9PS0JFSElORCglZWR4KQorCisgICAgICAgIG1vdmIgICAgKCVlZHgpLCVhbCAgICAgIC8qIHdlIG11c3QgdXNlIHRoaXMgYmVjYXVzZSBlZHggY2FuIGJlIGVkaS0xICovCisgICAgICAgIG1vdmIgICAgJWFsLCglZWRpKQorICAgICAgICBtb3ZiICAgIDEoJWVkeCksJWJsCisgICAgICAgIG1vdmIgICAgJWJsLDEoJWVkaSkKKyAgICAgICAgYWRkbCAgICAkMiwlZWRpCisgICAgICAgIGptcCAgICAgLkxNRE9ORQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLkxFT0Y6CisvKioqKiAgIHhvcmwgICAgJWVheCwlZWF4ICAgICAgICAgIGVheD0wIGZyb20gYWJvdmUgKi8KKworICAgICAgICBjbXBsICAgICQzK05OLCVlY3ggICAgICAvKiBlY3ggbXVzdCBiZSAzLzYgKi8KKyAgICAgICAgc2V0bnogICAlYWwKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2YxLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXhfZjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2IwN2YyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2YxLlMKQEAgLTAsMCArMSw2MyBAQAorLyogbHpvMXhfZjEuUyAtLSBmYXN0IExaTzFYIGRlY29tcHJlc3Npb24gaW4gYXNzZW1ibGVyIChpMzg2ICsgZ2NjKQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPX0ZBU1QKKworI2luY2x1ZGUgImx6b19hc20uaCIKKworICAgIC50ZXh0CisKKyAgICBMWk9fUFVCTElDKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpCisKKyNpbmNsdWRlICJlbnRlci5hc2giCisjaW5jbHVkZSAibHpvMXhfZC5hc2giCisjaW5jbHVkZSAibGVhdmUuYXNoIgorCisgICAgTFpPX1BVQkxJQ19FTkQobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2YyLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXhfZjIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIyYjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X2YyLlMKQEAgLTAsMCArMSw2NyBAQAorLyogbHpvMXhfZjIuUyAtLSBmYXN0IExaTzFYIGRlY29tcHJlc3Npb24gaW4gYXNzZW1ibGVyIChpMzg2ICsgZ2NjKQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPX0ZBU1QKKworI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fSU5QVVQKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX09VVFBVVAorI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fTE9PS0JFSElORAorCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorCisjaW5jbHVkZSAiZW50ZXIuYXNoIgorI2luY2x1ZGUgImx6bzF4X2QuYXNoIgorI2luY2x1ZGUgImxlYXZlLmFzaCIKKworICAgIExaT19QVUJMSUNfRU5EKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X3MxLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXhfczEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I5MGVjCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X3MxLlMKQEAgLTAsMCArMSw2MSBAQAorLyogbHpvMXhfczEuUyAtLSBMWk8xWCBkZWNvbXByZXNzaW9uIGluIGFzc2VtYmxlciAoaTM4NiArIGdjYykKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMXhfZGVjb21wcmVzc19hc20pCisKKyNpbmNsdWRlICJlbnRlci5hc2giCisjaW5jbHVkZSAibHpvMXhfZC5hc2giCisjaW5jbHVkZSAibGVhdmUuYXNoIgorCisgICAgTFpPX1BVQkxJQ19FTkQobHpvMXhfZGVjb21wcmVzc19hc20pCisKKworLyoKK3ZpOnRzPTQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xeF9zMi5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF4X3MyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRlOThlYQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xeF9zMi5TCkBAIC0wLDAgKzEsNjUgQEAKKy8qIGx6bzF4X3MyLlMgLS0gTFpPMVggZGVjb21wcmVzc2lvbiBpbiBhc3NlbWJsZXIgKGkzODYgKyBnY2MpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fSU5QVVQKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX09VVFBVVAorI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fTE9PS0JFSElORAorCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkKKworI2luY2x1ZGUgImVudGVyLmFzaCIKKyNpbmNsdWRlICJsem8xeF9kLmFzaCIKKyNpbmNsdWRlICJsZWF2ZS5hc2giCisKKyAgICBMWk9fUFVCTElDX0VORChsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKQorCisKKy8qCit2aTp0cz00CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXlfZjEuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xeV9mMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWRiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXlfZjEuUwpAQCAtMCwwICsxLDY1IEBACisvKiBsem8xeV9mMS5TIC0tIGZhc3QgTFpPMVkgZGVjb21wcmVzc2lvbiBpbiBhc3NlbWJsZXIgKGkzODYgKyBnY2MpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fRkFTVAorCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkKKworI2RlZmluZSBMWk8xWQorCisjaW5jbHVkZSAiZW50ZXIuYXNoIgorI2luY2x1ZGUgImx6bzF4X2QuYXNoIgorI2luY2x1ZGUgImxlYXZlLmFzaCIKKworICAgIExaT19QVUJMSUNfRU5EKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpCisKKworLyoKK3ZpOnRzPTQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xeV9mMi5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF5X2YyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDlhYTNhZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem8xeV9mMi5TCkBAIC0wLDAgKzEsNjkgQEAKKy8qIGx6bzF5X2YyLlMgLS0gZmFzdCBMWk8xWSBkZWNvbXByZXNzaW9uIGluIGFzc2VtYmxlciAoaTM4NiArIGdjYykKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19GQVNUCisKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX0lOUFVUCisjZGVmaW5lIExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9PVVRQVVQKKyNkZWZpbmUgTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX0xPT0tCRUhJTkQKKworI2luY2x1ZGUgImx6b19hc20uaCIKKworICAgIC50ZXh0CisKKyAgICBMWk9fUFVCTElDKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKKworI2RlZmluZSBMWk8xWQorCisjaW5jbHVkZSAiZW50ZXIuYXNoIgorI2luY2x1ZGUgImx6bzF4X2QuYXNoIgorI2luY2x1ZGUgImxlYXZlLmFzaCIKKworICAgIExaT19QVUJMSUNfRU5EKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF5X3MxLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXlfczEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2I1NjhlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF5X3MxLlMKQEAgLTAsMCArMSw2MyBAQAorLyogbHpvMXlfczEuUyAtLSBMWk8xWSBkZWNvbXByZXNzaW9uIGluIGFzc2VtYmxlciAoaTM4NiArIGdjYykKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibHpvX2FzbS5oIgorCisgICAgLnRleHQKKworICAgIExaT19QVUJMSUMobHpvMXlfZGVjb21wcmVzc19hc20pCisKKyNkZWZpbmUgTFpPMVkKKworI2luY2x1ZGUgImVudGVyLmFzaCIKKyNpbmNsdWRlICJsem8xeF9kLmFzaCIKKyNpbmNsdWRlICJsZWF2ZS5hc2giCisKKyAgICBMWk9fUFVCTElDX0VORChsem8xeV9kZWNvbXByZXNzX2FzbSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF5X3MyLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmMvbHpvMXlfczIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgxMDdmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6bzF5X3MyLlMKQEAgLTAsMCArMSw2NyBAQAorLyogbHpvMXlfczIuUyAtLSBMWk8xWSBkZWNvbXByZXNzaW9uIGluIGFzc2VtYmxlciAoaTM4NiArIGdjYykKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9JTlBVVAorI2RlZmluZSBMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fT1VUUFVUCisjZGVmaW5lIExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9MT09LQkVISU5ECisKKyNpbmNsdWRlICJsem9fYXNtLmgiCisKKyAgICAudGV4dAorCisgICAgTFpPX1BVQkxJQyhsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKQorCisjZGVmaW5lIExaTzFZCisKKyNpbmNsdWRlICJlbnRlci5hc2giCisjaW5jbHVkZSAibHpvMXhfZC5hc2giCisjaW5jbHVkZSAibGVhdmUuYXNoIgorCisgICAgTFpPX1BVQkxJQ19FTkQobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSkKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjL2x6b19hc20uaCBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem9fYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTVmZGY2ZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyYy9sem9fYXNtLmgKQEAgLTAsMCArMSwyODcgQEAKKy8qIGx6b19hc20uaCAtLSBMWk8gYXNzZW1ibGVyIHN0dWZmCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gPGFzbWNvbmZpZy5oPgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX19pMzg2X18pCisjICBlcnJvcgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJTl9DT05GSUdVUkUpCisjaWYgZGVmaW5lZChMWk9fSEFWRV9DT05GSUdfSCkKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2Vsc2UKKyAgIC8qIG1hbnVhbCBjb25maWd1cmF0aW9uIC0gc2VlIGRlZmF1bHRzIGJlbG93ICovCisjICBpZiBkZWZpbmVkKF9fRUxGX18pCisjICAgIGRlZmluZSBNRlhfQVNNX0hBVkVfVFlQRQorIyAgICBkZWZpbmUgTUZYX0FTTV9OQU1FX05PX1VOREVSU0NPUkVTCisjICBlbGlmIGRlZmluZWQoX19saW51eF9fKSAgICAgICAgICAgICAgLyogTGludXggYS5vdXQgKi8KKyMgICAgZGVmaW5lIE1GWF9BU01fQUxJR05fUFRXTworIyAgZWxpZiBkZWZpbmVkKF9fREpHUFBfXykKKyMgICAgZGVmaW5lIE1GWF9BU01fQUxJR05fUFRXTworIyAgZWxpZiBkZWZpbmVkKF9fR08zMl9fKSAgICAgICAgICAgICAgIC8qIGRqZ3BwIHYxICovCisjICAgIGRlZmluZSBNRlhfQVNNX0NBTk5PVF9VU0VfRUJQCisjICBlbGlmIGRlZmluZWQoX19FTVhfXykKKyMgICAgZGVmaW5lIE1GWF9BU01fQUxJR05fUFRXTworIyAgICBkZWZpbmUgTUZYX0FTTV9DQU5OT1RfVVNFX0VCUAorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAxICYmIGRlZmluZWQoX19FTEZfXykKKy5zZWN0aW9uIC5ub3RlLkdOVS1zdGFjaywiIixAcHJvZ2JpdHMKKyNlbmRpZgorI2lmIDAgJiYgZGVmaW5lZChfX0VMRl9fKQorI3VuZGVmIGkzODYKKy5hcmNoIGkzODYKKy5jb2RlMzIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gbmFtZSBhbHdheXMgdXNlcyB1bmRlcnNjb3JlcworLy8gWyBPTEQ6IG5hbWUgKGRlZmF1bHQ6IHdpdGggdW5kZXJzY29yZXMpIF0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKExaT19BU01fTkFNRSkKKyMgIGRlZmluZSBMWk9fQVNNX05BTUUobikgICAgICAgXyAjIyBuCisjaWYgMAorIyAgaWYgZGVmaW5lZChNRlhfQVNNX05BTUVfTk9fVU5ERVJTQ09SRVMpCisjICAgIGRlZmluZSBMWk9fQVNNX05BTUUobikgICAgIG4KKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19BU01fTkFNRShuKSAgICAgXyAjIyBuCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIC50eXBlIChkZWZhdWx0OiBkbyBub3QgdXNlKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoTFpPX1BVQkxJQykKKyNpZiBkZWZpbmVkKF9fTFpPX0RCX18pCisjICBkZWZpbmUgTFpPX1BVQkxJQyhmdW5jKSBcCisgICAgICAgIC5wMmFsaWduIDQgOyAuYnl0ZSAwLDAsMCwwLDAsMCwwIDsgLmFzY2lpICJMWk9fU1RBUlQiCisjICBkZWZpbmUgTFpPX1BVQkxJQ19FTkQoZnVuYykgXAorICAgICAgICAucDJhbGlnbiA0LDB4OTAgOyAuYXNjaWkgIkxaT19FTkQiCisjZWxpZiBkZWZpbmVkKE1GWF9BU01fSEFWRV9UWVBFKQorIyAgZGVmaW5lIExaT19QVUJMSUMoZnVuYykgXAorICAgICAgICBBTElHTjMgOyAudHlwZSBMWk9fQVNNX05BTUUoZnVuYyksQGZ1bmN0aW9uIDsgXAorICAgICAgICAuZ2xvYmwgTFpPX0FTTV9OQU1FKGZ1bmMpIDsgTFpPX0FTTV9OQU1FKGZ1bmMpOgorIyAgZGVmaW5lIExaT19QVUJMSUNfRU5EKGZ1bmMpIFwKKyAgICAgICAgLnNpemUgTFpPX0FTTV9OQU1FKGZ1bmMpLC4tTFpPX0FTTV9OQU1FKGZ1bmMpCisjZWxzZQorIyAgZGVmaW5lIExaT19QVUJMSUMoZnVuYykgXAorICAgICAgICBBTElHTjMgOyAuZ2xvYmwgTFpPX0FTTV9OQU1FKGZ1bmMpIDsgTFpPX0FTTV9OQU1FKGZ1bmMpOgorIyAgZGVmaW5lIExaT19QVUJMSUNfRU5EKGZ1bmMpCisjZW5kaWYKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gLmFsaWduIChkZWZhdWx0OiBieXRlcykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKE1GWF9BU01fQUxJR05fQllURVMpICYmICFkZWZpbmVkKE1GWF9BU01fQUxJR05fUFRXTykKKyMgIGRlZmluZSBNRlhfQVNNX0FMSUdOX0JZVEVTCisjZW5kaWYKKworI2lmICFkZWZpbmVkKExaT19BU01fQUxJR04pCisjICBpZiBkZWZpbmVkKE1GWF9BU01fQUxJR05fUFRXTykKKyMgICAgZGVmaW5lIExaT19BU01fQUxJR04oeCkgICAgLmFsaWduIHgKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19BU01fQUxJR04oeCkgICAgLmFsaWduICgxIDw8ICh4KSkKKyMgIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBBTElHTjEgICAgICAgICAgICAgIExaT19BU01fQUxJR04oMSkKKyNkZWZpbmUgQUxJR04yICAgICAgICAgICAgICBMWk9fQVNNX0FMSUdOKDIpCisjZGVmaW5lIEFMSUdOMyAgICAgICAgICAgICAgTFpPX0FTTV9BTElHTigzKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZWJwIHVzYWdlIChkZWZhdWx0OiBjYW4gdXNlKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoTUZYX0FTTV9DQU5OT1RfVVNFX0VCUCkKKyMgIGlmIDEgJiYgIWRlZmluZWQoTl8zX0VCUCkgJiYgIWRlZmluZWQoTl8yNTVfRUJQKQorIyAgICBkZWZpbmUgTl8zX0VCUAorIyAgZW5kaWYKKyMgIGlmIDAgJiYgIWRlZmluZWQoTl8zX0VCUCkgJiYgIWRlZmluZWQoTl8yNTVfRUJQKQorIyAgICBkZWZpbmUgTl8yNTVfRUJQCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5fM19FQlApICYmIGRlZmluZWQoTl8yNTVfRUJQKQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIGRlZmluZWQoTUZYX0FTTV9DQU5OT1RfVVNFX0VCUCkKKyMgIGlmIGRlZmluZWQoTl8zX0VCUCkgfHwgZGVmaW5lZChOXzI1NV9FQlApCisjICAgIGVycm9yCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOXzMpCisjICBpZiBkZWZpbmVkKE5fM19FQlApCisjICAgIGRlZmluZSBOXzMgICAgICAgICAlZWJwCisjICBlbHNlCisjICAgIGRlZmluZSBOXzMgICAgICAgICAkMworIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoTl8yNTUpCisjICBpZiBkZWZpbmVkKE5fMjU1X0VCUCkKKyMgICAgZGVmaW5lIE5fMjU1ICAgICAgICVlYnAKKyMgICAgZGVmaW5lIE5PVExfMyhyKSAgIHhvcmwgJWVicCxyCisjICBlbHNlCisjICAgIGRlZmluZSBOXzI1NSAgICAgICAkMjU1CisjICBlbmRpZgorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOT1RMXzMpCisjICBkZWZpbmUgTk9UTF8zKHIpICAgICB4b3JsIE5fMyxyCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgSU5QCisjZGVmaW5lIElOUCAgICAgIDQrMzYoJWVzcCkKKyNkZWZpbmUgSU5TICAgICAgOCszNiglZXNwKQorI2RlZmluZSBPVVRQICAgIDEyKzM2KCVlc3ApCisjZGVmaW5lIE9VVFMgICAgMTYrMzYoJWVzcCkKKyNlbmRpZgorCisjZGVmaW5lIElORU5EICAgICAgICAgNCglZXNwKQorI2RlZmluZSBPVVRFTkQgICAgICAgICglZXNwKQorCisKKyNpZiBkZWZpbmVkKExaT19URVNUX0RFQ09NUFJFU1NfT1ZFUlJVTl9JTlBVVCkKKyMgIGRlZmluZSBURVNUX0lQX1IocikgICAgICBjbXBsIHIsSU5FTkQgOyBqYiAuTF9pbnB1dF9vdmVycnVuCisjICBkZWZpbmUgVEVTVF9JUChhZGRyLHIpICAgbGVhbCBhZGRyLHIgOyBURVNUX0lQX1IocikKKyNlbHNlCisjICBkZWZpbmUgVEVTVF9JUF9SKHIpCisjICBkZWZpbmUgVEVTVF9JUChhZGRyLHIpCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfREVDT01QUkVTU19PVkVSUlVOX09VVFBVVCkKKyMgIGRlZmluZSBURVNUX09QX1IocikgICAgICBjbXBsIHIsT1VURU5EIDsgamIgLkxfb3V0cHV0X292ZXJydW4KKyMgIGRlZmluZSBURVNUX09QKGFkZHIscikgICBsZWFsIGFkZHIsciA7IFRFU1RfT1BfUihyKQorI2Vsc2UKKyMgIGRlZmluZSBURVNUX09QX1IocikKKyMgIGRlZmluZSBURVNUX09QKGFkZHIscikKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fVEVTVF9ERUNPTVBSRVNTX09WRVJSVU5fTE9PS0JFSElORCkKKyMgIGRlZmluZSBURVNUX0xPT0tCRUhJTkQocikgICAgY21wbCBPVVRQLHIgOyBqYiAuTF9sb29rYmVoaW5kX292ZXJydW4KKyNlbHNlCisjICBkZWZpbmUgVEVTVF9MT09LQkVISU5EKHIpCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTE9EU0IgICAgICAgICAgIG1vdmIgKCVlc2kpLCVhbCA7IGluY2wgJWVzaQorCisjZGVmaW5lIE1PVlNCKHIxLHIyLHgpICBtb3ZiIChyMSkseCA7IGluY2wgcjEgOyBtb3ZiIHgsKHIyKSA7IGluY2wgcjIKKyNkZWZpbmUgTU9WU1cocjEscjIseCkgIG1vdmIgKHIxKSx4IDsgbW92YiB4LChyMikgOyBcCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZiIDEocjEpLHggOyBhZGRsICQyLHIxIDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgbW92YiB4LDEocjIpIDsgYWRkbCAkMixyMgorI2RlZmluZSBNT1ZTTChyMSxyMix4KSAgbW92bCAocjEpLHggOyBhZGRsICQ0LHIxIDsgbW92bCB4LChyMikgOyBhZGRsICQ0LHIyCisKKyNpZiBkZWZpbmVkKExaT19ERUJVRykKKyNkZWZpbmUgQ09QWUJfQyhyMSxyMix4LHJjKSBcCisgICAgICAgICAgICAgICAgICAgICAgICBjbXBsICQwLHJjIDsganogLkxfYXNzZXJ0X2ZhaWw7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDk6IE1PVlNCKHIxLHIyLHgpIDsgZGVjbCByYyA7IGpueiA5YgorI2RlZmluZSBDT1BZTF9DKHIxLHIyLHgscmMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNtcGwgJDAscmMgOyBqeiAuTF9hc3NlcnRfZmFpbDsgXAorICAgICAgICAgICAgICAgICAgICAgICAgOTogTU9WU0wocjEscjIseCkgOyBkZWNsIHJjIDsgam56IDliCisjZWxzZQorI2RlZmluZSBDT1BZQl9DKHIxLHIyLHgscmMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDk6IE1PVlNCKHIxLHIyLHgpIDsgZGVjbCByYyA7IGpueiA5YgorI2RlZmluZSBDT1BZTF9DKHIxLHIyLHgscmMpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDk6IE1PVlNMKHIxLHIyLHgpIDsgZGVjbCByYyA7IGpueiA5YgorI2VuZGlmCisKKyNkZWZpbmUgQ09QWUIocjEscjIseCkgIENPUFlCX0MocjEscjIseCwlZWN4KQorI2RlZmluZSBDT1BZTChyMSxyMix4KSAgQ09QWUxfQyhyMSxyMix4LCVlY3gpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBub3QgdXNlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMAorCisjaWYgMAorI2RlZmluZSBSRVBfTU9WU0IoeCkgICAgcmVwIDsgbW92c2IKKyNkZWZpbmUgUkVQX01PVlNMKHgpICAgIHNocmwgJDIsJWVjeCA7IHJlcCA7IG1vdnNsCisjZWxpZiAxCisjZGVmaW5lIFJFUF9NT1ZTQih4KSAgICBDT1BZQiglZXNpLCVlZGkseCkKKyNkZWZpbmUgUkVQX01PVlNMKHgpICAgIHNocmwgJDIsJWVjeCA7IENPUFlMKCVlc2ksJWVkaSx4KQorI2Vsc2UKKyNkZWZpbmUgUkVQX01PVlNCKHgpICAgIHJlcCA7IG1vdnNiCisjZGVmaW5lIFJFUF9NT1ZTTCh4KSAgICBqbXAgOWYgOyA4OiBtb3ZzYiA7IGRlY2wgJWVjeCA7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDk6IHRlc3RsICQzLCVlZGkgOyBqbnogOGIgOyBcCisgICAgICAgICAgICAgICAgICAgICAgICBtb3ZsICVlY3gseCA7IHNocmwgJDIsJWVjeCA7IGFuZGwgJDMseCA7IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcCA7IG1vdnNsIDsgbW92bCB4LCVlY3ggOyByZXAgOyBtb3ZzYgorI2VuZGlmCisKKyNpZiAxCisjZGVmaW5lIE5FR0woeCkgICAgICAgICBuZWdsIHgKKyNlbHNlCisjZGVmaW5lIE5FR0woeCkgICAgICAgICB4b3JsICQtMSx4IDsgaW5jbCB4CisjZW5kaWYKKworI2VuZGlmCisKKworCisvKgordmk6dHM9NAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9hbGwvYXNtX2FsbC5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9hbGwvYXNtX2FsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ZGQ4MGQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2FsbC9hc21fYWxsLlMKQEAgLTAsMCArMSw1NjUgQEAKKy8qIGFzbV9hbGwuUyAtLQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2lmbmRlZiBGCisjICBkZWZpbmUgRihuYW1lKSAgICAgICBuYW1lCisjZW5kaWYKKyNpZm5kZWYgZ2xvYmFsCisjICBkZWZpbmUgZ2xvYmFsKHgpICAgICAuZ2xvYmwgeAorI2VuZGlmCisjaWZuZGVmIHR5cGVmCisjICBpZmRlZiBfX0VMRl9fCisjICAgIGRlZmluZSB0eXBlZih4KSAgICAudHlwZSB4LEBmdW5jdGlvbgorIyAgZWxzZQorIyAgICBkZWZpbmUgdHlwZWYoeCkKKyMgIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgc2l6ZQorIyAgaWZkZWYgX19FTEZfXworIyAgICBkZWZpbmUgc2l6ZSh4LHMpICAgLnNpemUgeCxzCisjICBlbHNlCisjICAgIGRlZmluZSBzaXplKHgscykKKyMgIGVuZGlmCisjZW5kaWYKKyNpZm5kZWYgZGIKKyMgIGRlZmluZSBkYiAgICAgICAgICAgIC5ieXRlCisjZW5kaWYKKyNpZmRlZiBfX0VMRl9fCisuc2VjdGlvbiAubm90ZS5HTlUtc3RhY2ssIiIsQHByb2diaXRzCisjZW5kaWYKKy50ZXh0CisKK3R5cGVmKF9sem8xY19kZWNvbXByZXNzX2FzbSkKK3R5cGVmKEYobHpvMWNfZGVjb21wcmVzc19hc20pKQorZ2xvYmFsKF9sem8xY19kZWNvbXByZXNzX2FzbSkKK2dsb2JhbChGKGx6bzFjX2RlY29tcHJlc3NfYXNtKSkKK19sem8xY19kZWNvbXByZXNzX2FzbToKK0YobHpvMWNfZGVjb21wcmVzc19hc20pOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDQsNDksMTkyLDEzOCw2LDcwLDYwLDMyLDExNQorZGIgMTUsOCwxOTIsMTE2LDUxLDEzNywxOTMsMjQzLDE2NCwxMzgsNiw3MCw2MCwzMiwxMTQsNzIKK2RiIDYwLDY0LDExNCw5MywxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUsMTkzLDIzMyw1LDQxLDE5NAorZGIgMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyLDI0MywxNjQsMTM3LDIxNCwyMzUKK2RiIDE5OSwxNDEsMTgwLDM4LDAsMCwwLDAsMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OAorZGIgMTE0LDE5NywxODUsMjQsMSwwLDAsNDQsMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNAorZGIgMTQ1LDI0MywxNjQsMjM1LDE2MywxNDEsMTE4LDAsMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAKK2RiIDE5MywyMjQsNSw0MSwxOTQsMTM1LDI0MiwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjM1CitkYiAxNTIsMzYsMzEsMTM3LDE5MywxMTcsMTksMTc3LDMxLDEzOCw2LDcwLDgsMTkyLDExNyw4CitkYiAxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDEsMTkzLDEzOCw2LDcwLDEzNywxOTUsMzYKK2RiIDYzLDEzNywyNTAsNDEsMTk0LDEzOCw2LDcwLDE5MywyMjQsNiw0MSwxOTQsNTcsMjUwLDExNgorZGIgMjcsMTM1LDIxNCwxNDEsNzMsMywyNDMsMTY0LDEzNywyMTQsNDksMTkyLDE5MywyMzUsNiwxMzcKK2RiIDIxNywxNSwxMzMsODAsMjU1LDI1NSwyNTUsMjMzLDYwLDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNQorZGIgMTQ5LDE5MiwxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOQorZGIgNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwCitkYiA4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwCitkYiAwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE0NCwxNDEsMTE2LDM4LDAKK3NpemUoX2x6bzFjX2RlY29tcHJlc3NfYXNtLC4tX2x6bzFjX2RlY29tcHJlc3NfYXNtKQorc2l6ZShGKGx6bzFjX2RlY29tcHJlc3NfYXNtKSwuLUYobHpvMWNfZGVjb21wcmVzc19hc20pKQorCit0eXBlZihfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSkKK3R5cGVmKEYobHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSkpCitnbG9iYWwoX2x6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpCitnbG9iYWwoRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKSkKK19sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlOgorRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1LDQwLDgsMTkyLDExNiw5OSwxMzcsMTkzLDE0MQorZGIgMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDEwNywxLDAsMCwxNDEsMjgsMTQsNTcsOTIKK2RiIDM2LDQsMTUsMTMwLDg3LDEsMCwwLDI0MywxNjQsMTM4LDYsNzAsNjAsMzIsMTE0CitkYiAxMjcsNjAsNjQsMTUsMTMwLDE2OSwwLDAsMCwxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUKK2RiIDE5MywyMzMsNSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyCitkYiA1OSwxMTYsMzYsNDgsMTUsMTMwLDUxLDEsMCwwLDE0MSwyOCwxNSw1NywyOCwzNgorZGIgMTUsMTMwLDMyLDEsMCwwLDI0MywxNjQsMTM3LDIxNCwyMzUsMTQ4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OCwxMTQsMTQ5LDE4NSwyNCwxLDAsMCw0NAorZGIgMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNCwxNDUsMTQxLDI4LDE1LDU3LDI4LDM2LDE1CitkYiAxMzAsMjQxLDAsMCwwLDE0MSwyOCwxNCw1Nyw5MiwzNiw0LDE1LDEzMCwyMjEsMAorZGIgMCwwLDI0MywxNjQsMjMzLDg3LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDU5CitkYiAxMTYsMzYsNDgsMTUsMTMwLDE5NiwwLDAsMCwxNDEsOTUsNCw1NywyOCwzNiwxNQorZGIgMTMwLDE3NywwLDAsMCwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjMzLDcyLDI1NQorZGIgMjU1LDI1NSwzNiwzMSwxMzcsMTkzLDExNywyNiwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3CitkYiAxNSwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNiw2MywxMzcsMjUwLDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2LDQxLDEzNSwyMTQsMTQxLDczLDMsNTksMTE2CitkYiAzNiw0OCwxMTQsMTA1LDE0MSw0LDE1LDU3LDQsMzYsMTE0LDkwLDI0MywxNjQsMTM3LDIxNAorZGIgNDksMTkyLDE5MywyMzUsNiwxMzcsMjE3LDE1LDEzMywyMTAsMjU0LDI1NSwyNTUsMjMzLDE5MCwyNTQKK2RiIDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNgorZGIgNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5CitkYiA4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzCitkYiAxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NAorZGIgNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMAorZGIgMCwwLDIzNSwxOTksMTQxLDE4MiwwLDAsMCwwLDE0MSwxOTEsMCwwLDAsMAorc2l6ZShfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSwuLV9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKQorc2l6ZShGKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpLC4tRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKSkKKwordHlwZWYoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpCit0eXBlZihGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpKQorZ2xvYmFsKF9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KQorZ2xvYmFsKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkpCitfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdDoKK0YobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0NCw0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5CitkYiA1MSw4LDE5MiwxMzcsMTkzLDExNywxOSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzCitkYiAyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwxMzYsMjAwLDE5MywyMzMsMiwyNDMKK2RiIDE2NSwzNiwzLDExNiw4LDEzOSwzMCwxLDE5OCwxMzcsMzEsMSwxOTksMTM4LDYsNzAKK2RiIDYwLDMxLDExOCw4OCw2MCwyMjMsMTUsMTM1LDEzMiwwLDAsMCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwzNiw3LDE5MywyMzMsNSwxMzcsMTk1LDEzOCw2LDE0MSw0LDE5NQorZGIgNzAsNDEsMTk0LDEzMSwxOTMsMiwxMzUsMjE0LDEzMSwyNDksNiwxMTQsMTYsMTMxLDI0OCw0CitkYiAxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NSwzNiwzLDEzNiwxOTMsMjQzLDE2NCwxMzcKK2RiIDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIsMTIzLDI1NSwyNTUsMjU1LDEzOSw2LDEKK2RiIDIwNiwxMzcsNywxLDIwNyw0OSwxOTIsMTM4LDYsNzAsMjM1LDE2NCwxOTMsMjMyLDIsMTQxCitkYiAxNTEsMjU1LDI0NywyNTUsMjU1LDEzNywxOTMsMTM4LDYsNzAsMTQxLDQsMTkzLDQxLDE5NCwxMzkKK2RiIDIsMTM3LDcsMTMxLDE5OSwzLDIzNSwyMDEsMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5CitkYiAxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMjM1LDksMTQxLDExOCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjYsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDEyMiwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5MiwxMzksODQsMzYKK2RiIDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOQorZGIgODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MworZGIgMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQKK2RiIDQsMCwwLDAsMjM1LDIxMywxNDEsMTE4LDAsMTQxLDE4OCwzOSwwLDAsMCwwCitzaXplKF9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0LC4tX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpCitzaXplKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCksLi1GKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpKQorCit0eXBlZihfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQordHlwZWYoRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorZ2xvYmFsKF9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCitnbG9iYWwoRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK0YobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5LDc2LDgsMTkyLDEzNywxOTMsMTE3LDE5LDEzOAorZGIgNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3NgorZGIgOCwzMSwxNDEsMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDYxLDEsMCwwLDE0MSwyOAorZGIgMTQsNTcsOTIsMzYsNCwxNSwxMzAsNDEsMSwwLDAsMTM2LDIwMCwxOTMsMjMzLDIKK2RiIDI0MywxNjUsMzYsMywxMTYsOCwxMzksMzAsMSwxOTgsMTM3LDMxLDEsMTk5LDEzOCw2CitkYiA3MCw2MCwzMSwxMTgsMTEwLDYwLDIyMywxNSwxMzUsMTc5LDAsMCwwLDEzNywxOTMsMTkzCitkYiAyMzIsMiwxNDEsODcsMjU1LDM2LDcsMTkzLDIzMyw1LDEzNywxOTUsMTM4LDYsMTQxLDQKK2RiIDE5NSw3MCw0MSwxOTQsMTMxLDE5MywyLDEzNSwyMTQsNTksMTE2LDM2LDQ4LDE1LDEzMCwyMzkKK2RiIDAsMCwwLDE0MSwyOCwxNSw1NywyOCwzNiwxNSwxMzAsMjIwLDAsMCwwLDEzMQorZGIgMjQ5LDYsMTE0LDE2LDEzMSwyNDgsNCwxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NQorZGIgMzYsMywxMzYsMTkzLDI0MywxNjQsMTM3LDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIKK2RiIDc2LDI1NSwyNTUsMjU1LDEzOSw2LDEsMjA2LDEzNyw3LDEsMjA3LDQ5LDE5MiwxMzgsNgorZGIgNzAsMjM1LDE0MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMTU2LDAsMCwwLDE5MworZGIgMjMyLDIsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTM3LDE5MywxMzgsNiw3MCwxNDEsNCwxOTMKK2RiIDQxLDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMTM0LDAsMCwwLDEzOSwyLDEzNyw3CitkYiAxMzEsMTk5LDMsMjM1LDE3OSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwCitkYiAwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwyMzUsMTIsMTQxLDE4MiwwLDAsMCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjMsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDc1LDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNSwxNDksMTkyLDU5LDYwLDM2CitkYiAxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjkKK2RiIDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MAorZGIgODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMAorZGIgMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMAorZGIgMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0MSwxODAsMzgsMCwwLDAsMAorc2l6ZShfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLC4tX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK3NpemUoRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpLC4tRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorCit0eXBlZihfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkKK3R5cGVmKEYobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkpCitnbG9iYWwoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWwoRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK19sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0OgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDI3CitkYiA0NCwxNCwyMzUsMzQsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQKK2RiIDE0MSw2OCwyNCwyMSwyMzUsMTYsMTM3LDI0NiwxMzgsNiw3MCw2MCwxNiwxMTUsNjUsOAorZGIgMTkyLDExNiwyMzAsMTMxLDE5Miw2LDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5CitkYiAyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTkKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSwyNSwxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NworZGIgMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOSwxMCwxMzcsMTUsMSwyMzksMjM1LDExMAorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOAorZGIgMzAsMTkzLDIzMyw1LDE0MSw0LDIxNiw3MCw0MSwxOTQsMTMxLDE5Myw0LDU3LDIzMiwxMTUKK2RiIDUzLDIzNSwxMDksNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxCitkYiA3NiwyNCwzNiw0OSwxOTIsMjM1LDEzLDE0NCw2MCwzMiwxMTQsMTE2LDEzMSwyMjQsMzEsMTE2CitkYiAyMzEsMTQxLDcyLDUsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNTgsMTQxLDY4LDE1LDI1MywxOTMsMjMzLDIsMTM5LDI2LDEzMQorZGIgMTk0LDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MAorZGIgMjU0LDMzLDIzMiwxNSwxMzIsNjMsMjU1LDI1NSwyNTUsMTM5LDIyLDEsMTk4LDEzNywyMywxCitkYiAxOTksMTM4LDYsNzAsMjMzLDExOSwyNTUsMjU1LDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDEzNSwyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMjEyLDEyOSwxOTMsMjU1LDAsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEsMTIsMjM1LDIzLDE0MSwxMTgsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjIzLDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzLDEyMiwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyCitkYiAxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDExMCwyNTUsMjU1LDI1NQorZGIgMTMxLDI0OSw2LDE1LDE0OSwxOTIsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0CitkYiAxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYKK2RiIDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNQorZGIgMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxNDQKK3NpemUoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QsLi1fbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkKK3NpemUoRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KSwuLUYobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkpCisKK3R5cGVmKF9sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCit0eXBlZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitnbG9iYWwoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbChGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4LDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAKK2RiIDQxLDE5NCwxMzEsMTkzLDQsNTcsMjMyLDExNSw3MywyMzMsMTcwLDAsMCwwLDUsMjU1CitkYiAwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjMsMSwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE3LDE0NAorZGIgNjAsMzIsMTUsMTMwLDIwMCwwLDAsMCwxMzEsMjI0LDMxLDExNiwyMjcsMTQxLDcyLDUKK2RiIDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMgorZGIgMTE0LDEwMiw1OSw4NCwzNiw0OCwxNSwxMzAsNzcsMSwwLDAsMTQxLDY4LDE1LDI1MworZGIgMTkzLDIzMywyLDU3LDQsMzYsMTUsMTMwLDU0LDEsMCwwLDEzOSwyNiwxMzEsMTk0CitkYiA0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAsMjU0CitkYiAzMywyMzIsMTUsMTMyLDIxNiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NywyMCwzNiwxNSwxMzAKK2RiIDE0LDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUsMTMwLDI1MCwwLDAKK2RiIDAsMTM5LDIyLDEsMTk4LDEzNywyMywxLDE5OSwxMzgsNiw3MCwyMzMsNTUsMjU1LDI1NQorZGIgMjU1LDE0MSwxODAsMzgsMCwwLDAsMCw1OSw4NCwzNiw0OCwxNSwxMzAsMjMxLDAKK2RiIDAsMCwxNDEsNjgsMTUsMjUzLDU3LDQsMzYsMTUsMTMwLDIxMSwwLDAsMCwxMzUKK2RiIDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNjQsMTI5LDE5MywyNTUsMCwwLDAsMTQxCitkYiA4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDE3NSwwLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDc2LDExLDEyLDIzNSwyNywxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIxOSwxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMywzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNworZGIgMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywzMSwyNTUsMjU1LDI1NSwxMzEsMjQ5CitkYiA2LDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2CitkYiA0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNworZGIgNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwCitkYiAwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwCitkYiAyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OQorc2l6ZShfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLC4tX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK3NpemUoRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpLC4tRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorCit0eXBlZihfbHpvMXhfZGVjb21wcmVzc19hc20pCit0eXBlZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtKSkKK2dsb2JhbChfbHpvMXhfZGVjb21wcmVzc19hc20pCitnbG9iYWwoRihsem8xeF9kZWNvbXByZXNzX2FzbSkpCitfbHpvMXhfZGVjb21wcmVzc19hc206CitGKGx6bzF4X2RlY29tcHJlc3NfYXNtKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDM1CitkYiA0NCwxNyw2MCw0LDExNSw0MCwxMzcsMTkzLDIzNSw1Niw1LDI1NSwwLDAsMCwxMzgKK2RiIDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDY4LDI0LDE4LDIzNSwxOCwxNDEsMTE2LDM4LDAKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSw3Myw4LDE5MiwxMTYsMjI4LDEzMSwxOTIsMywxMzcsMTkzCitkYiAxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MgorZGIgMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSwzNywxOTMsMjMyLDIsMTM4LDMwCitkYiAxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3CitkYiAxMzgsNjYsMSwxMzYsNzEsMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzUsMTE5CitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCw2NSw1NywyMzIsMTE1LDU1LDIzNQorZGIgMTE5LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw3NiwyNAorZGIgMzMsNDksMTkyLDIzNSwxNSwxNDEsMTE4LDAsNjAsMzIsMTE0LDEyNCwxMzEsMjI0LDMxLDExNgorZGIgMjI5LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDY2LDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEKK2RiIDE5NCw0LDEzNyw3LDEzMSwxOTksNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMgorZGIgNjYsMTM2LDcsNzEsNzMsMTE3LDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsNDYsMjU1CitkYiAyNTUsMjU1LDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNiw3MCwyMzMsMTA5CitkYiAyNTUsMjU1LDI1NSwxNDQsMTQxLDExNiwzOCwwLDEzNSwyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTUKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMQorZGIgOSwyMzUsMjUsMTQ0LDE0MSwxMTYsMzgsMCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjEsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMKK2RiIDExNCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxCitkYiAxMzEsMTk5LDIsMjMzLDExMSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5MiwxMzksODQKK2RiIDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4CitkYiAxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NQorZGIgOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMAorZGIgMTg0LDQsMCwwLDAsMjM1LDIxMywxMzcsMjQ2LDE0MSwxODgsMzksMCwwLDAsMAorc2l6ZShfbHpvMXhfZGVjb21wcmVzc19hc20sLi1fbHpvMXhfZGVjb21wcmVzc19hc20pCitzaXplKEYobHpvMXhfZGVjb21wcmVzc19hc20pLC4tRihsem8xeF9kZWNvbXByZXNzX2FzbSkpCisKK3R5cGVmKF9sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKQordHlwZWYoRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKSkKK2dsb2JhbChfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkKK2dsb2JhbChGKGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpKQorX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmU6CitGKGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDg3LDQ0LDE3LDYwLDQsMTE1LDkyLDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMTMwLDIsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwxMTAsMiwwLDAsMTM3LDE5MywyMzUsMTEwLDUsMjU1LDAsMCwwLDE0MSw4NAorZGIgNiwxOCw1Nyw4NCwzNiw0LDE1LDEzMCw4NywyLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDY4LDI0LDE4LDIzNSwzMSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDU3LDExNiwzNiw0LDE1LDEzMCw1NywyLDAsMCwxMzgsNiw3MCw2MCwxNiwxMTUKK2RiIDEyNyw4LDE5MiwxMTYsMjE1LDEzMSwxOTIsMywxNDEsODQsNywwLDU3LDIwLDM2LDE1CitkYiAxMzAsMzcsMiwwLDAsMTQxLDg0LDYsMCw1Nyw4NCwzNiw0LDE1LDEzMCwxNgorZGIgMiwwLDAsMTM3LDE5MywxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3CitkYiAyMywxMzEsMTk5LDQsNzIsMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSw2NAorZGIgMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIzOCwxLDAsMCwxOTMsMjMyLDIsMTM4CitkYiAzMCwxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2CitkYiA0OCwxNSwxMzAsMjE4LDEsMCwwLDEzOCwyLDEzNiw3LDEzOCw2NiwxLDEzNiw3MQorZGIgMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzMsMTYzLDAsMCwwLDEzNywyNDYKK2RiIDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDY1LDU3LDIzMiwxMTUsNzUsMjMzCitkYiAxODAsMCwwLDAsNSwyNTUsMCwwLDAsMTQxLDg2LDMsNTcsODQsMzYsNAorZGIgMTUsMTMwLDEyNSwxLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQKK2RiIDMzLDQ5LDE5MiwyMzUsMTksMTQxLDExOCwwLDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAKK2RiIDEzMSwyMjQsMzEsMTE2LDIyNSwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyCitkYiAyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyLDExNCwxMTAsNTksODQsMzYsNDgsMTUsMTMwCitkYiA3NywxLDAsMCwxNDEsNCwxNSw1Nyw0LDM2LDE1LDEzMCw1OCwxLDAsMAorZGIgMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMSwxOTQsNCwxMzcsNywxMzEsMTk5CitkYiA0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyLDY2LDEzNiw3LDcxLDczLDExNworZGIgMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiwxOTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwyLDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwyMzgsMCwwLDAsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2CitkYiA3MCwyMzMsNDIsMjU1LDI1NSwyNTUsMTM3LDI0Niw1OSw4NCwzNiw0OCwxNSwxMzAsMjIzLDAKK2RiIDAsMCwxNDEsNjgsMTUsMCw1Nyw0LDM2LDE1LDEzMCwyMDMsMCwwLDAsMTM1CitkYiAyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNzAsMTI5LDE5MywyNTUsMCwwLDAsMTQxLDg2LDMKK2RiIDU3LDg0LDM2LDQsMTUsMTMwLDE2OSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2CitkYiAyMzAsMTQxLDc2LDExLDksMjM1LDIxLDE0NCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjUsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMKK2RiIDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2CitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NAorZGIgMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTkKK2RiIDIsMjMzLDQzLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDU5LDYwLDM2LDExOQorZGIgNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMKK2RiIDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OQorZGIgOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwCitkYiAwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMCwyMzUKK2RiIDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0NCwxNDEsMTgwLDM4LDAsMCwwLDAKK3NpemUoX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUsLi1fbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkKK3NpemUoRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKSwuLUYobHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkpCisKK3R5cGVmKF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KQordHlwZWYoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK2dsb2JhbChfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkKK2dsb2JhbChGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpKQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Q6CitGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMjcKK2RiIDQ0LDE0LDIzNSwzNCw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NAorZGIgMTQxLDY4LDI0LDIxLDIzNSwxNiwxMzcsMjQ2LDEzOCw2LDcwLDYwLDE2LDExNSw2NSw4CitkYiAxOTIsMTE2LDIzMCwxMzEsMTkyLDYsMTM3LDE5Myw0OSwyMzIsMTkzLDIzMywyLDMzLDIzMiwxMzkKK2RiIDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDczLDExNywyNDMsNDEsMTk4LDQxLDE5OQorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDI1LDE5MywyMzIsMiwxMzgsMzAsMTQxLDE1MSwyNTUsMjUxCitkYiAyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM5LDEwLDEzNywxNSwxLDIzOSwyMzUsMTEwCitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzEsMTkzLDIsNTcsMjMyLDExNSw1NAorZGIgMjM1LDExMCw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYKK2RiIDI0LDM2LDQ5LDE5MiwyMzUsMTQsMTM3LDI0Niw2MCwzMiwxMTQsMTE2LDEzMSwyMjQsMzEsMTE2CitkYiAyMzAsMTQxLDcyLDUsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNTgsMTQxLDY4LDE1LDI1MywxOTMsMjMzLDIsMTM5LDI2LDEzMQorZGIgMTk0LDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MAorZGIgMjU0LDMzLDIzMiwxNSwxMzIsNjMsMjU1LDI1NSwyNTUsMTM5LDIyLDEsMTk4LDEzNywyMywxCitkYiAxOTksMTM4LDYsNzAsMjMzLDExOSwyNTUsMjU1LDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDEzNSwyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMjEyLDEyOSwxOTMsMjU1LDAsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEsMTIsMjM1LDIzLDE0MSwxMTgsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjIzLDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzLDEyMiwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyCitkYiAxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDExMCwyNTUsMjU1LDI1NQorZGIgMTMxLDI0OSw2LDE1LDE0OSwxOTIsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0CitkYiAxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYKK2RiIDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNQorZGIgMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxNDQKK3NpemUoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QsLi1fbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkKK3NpemUoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KSwuLUYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkpCisKK3R5cGVmKF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCit0eXBlZihGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitnbG9iYWwoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbChGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwLDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCwxMzEsMTkzLDIsNTcsMjMyLDExNSw3NCwyMzMsMTcxLDAsMCwwLDUsMjU1LDAKK2RiIDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjQsMSwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE4LDEzNywyNDYKK2RiIDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAsMTMxLDIyNCwzMSwxMTYsMjI2LDE0MSw3Miw1CitkYiAxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIKK2RiIDExNCwxMDIsNTksODQsMzYsNDgsMTUsMTMwLDc3LDEsMCwwLDE0MSw2OCwxNSwyNTMKK2RiIDE5MywyMzMsMiw1Nyw0LDM2LDE1LDEzMCw1NCwxLDAsMCwxMzksMjYsMTMxLDE5NAorZGIgNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwLDI1NAorZGIgMzMsMjMyLDE1LDEzMiwyMTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcsMjAsMzYsMTUsMTMwCitkYiAxNCwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1LDEzMCwyNTAsMCwwCitkYiAwLDEzOSwyMiwxLDE5OCwxMzcsMjMsMSwxOTksMTM4LDYsNzAsMjMzLDU1LDI1NSwyNTUKK2RiIDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAsNTksODQsMzYsNDgsMTUsMTMwLDIzMSwwCitkYiAwLDAsMTQxLDY4LDE1LDI1Myw1Nyw0LDM2LDE1LDEzMCwyMTEsMCwwLDAsMTM1CitkYiAyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMTY0LDEyOSwxOTMsMjU1LDAsMCwwLDE0MQorZGIgODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxNzUsMCwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw3NiwxMSwxMiwyMzUsMjcsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMTksMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMsMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2LDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcKK2RiIDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMzEsMjU1LDI1NSwyNTUsMTMxLDI0OQorZGIgNiwxNSwxNDksMTkyLDU5LDYwLDM2LDExOSw1NywxMzksODQsMzYsNDAsMyw4NCwzNgorZGIgNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcKK2RiIDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMAorZGIgMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMAorZGIgMjM1LDIxMywxODQsNSwwLDAsMCwyMzUsMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTkKK3NpemUoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwuLV9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCitzaXplKEYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSwuLUYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKKwordHlwZWYoX2x6bzF5X2RlY29tcHJlc3NfYXNtKQordHlwZWYoRihsem8xeV9kZWNvbXByZXNzX2FzbSkpCitnbG9iYWwoX2x6bzF5X2RlY29tcHJlc3NfYXNtKQorZ2xvYmFsKEYobHpvMXlfZGVjb21wcmVzc19hc20pKQorX2x6bzF5X2RlY29tcHJlc3NfYXNtOgorRihsem8xeV9kZWNvbXByZXNzX2FzbSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwzNQorZGIgNDQsMTcsNjAsNCwxMTUsNDAsMTM3LDE5MywyMzUsNTYsNSwyNTUsMCwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw2OCwyNCwxOCwyMzUsMTgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsNzMsOCwxOTIsMTE2LDIyOCwxMzEsMTkyLDMsMTM3LDE5MworZGIgMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzIKK2RiIDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsMzcsMTkzLDIzMiwyLDEzOCwzMAorZGIgMTQxLDE1MSwyNTUsMjUxLDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNworZGIgMTM4LDY2LDEsMTM2LDcxLDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjM1LDExOQorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsNzMsNTcsMjMyLDExNSw1NiwyMzUsMTIwCitkYiA1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYsMjQsMzMKK2RiIDQ5LDE5MiwyMzUsMTYsMTQxLDExNiwzOCwwLDYwLDMyLDExNCwxMjQsMTMxLDIyNCwzMSwxMTYKK2RiIDIyOCwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw2NiwxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxCitkYiAxOTQsNCwxMzcsNywxMzEsMTk5LDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIKK2RiIDY2LDEzNiw3LDcxLDczLDExNywyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDQ2LDI1NQorZGIgMjU1LDI1NSwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYsNzAsMjMzLDEwOQorZGIgMjU1LDI1NSwyNTUsMTQ0LDE0MSwxMTYsMzgsMCwxMzUsMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMjE1CitkYiAxMjksMTkzLDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEKK2RiIDksMjM1LDI1LDE0NCwxNDEsMTE2LDM4LDAsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjIxLDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzCitkYiAxMTQsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMQorZGIgMTMxLDE5OSwyLDIzMywxMTEsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsMTM5LDg0CitkYiAzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OAorZGIgMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUKK2RiIDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAKK2RiIDE4NCw0LDAsMCwwLDIzNSwyMTMsMTM3LDI0NiwxNDEsMTg4LDM5LDAsMCwwLDAKK3NpemUoX2x6bzF5X2RlY29tcHJlc3NfYXNtLC4tX2x6bzF5X2RlY29tcHJlc3NfYXNtKQorc2l6ZShGKGx6bzF5X2RlY29tcHJlc3NfYXNtKSwuLUYobHpvMXlfZGVjb21wcmVzc19hc20pKQorCit0eXBlZihfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSkKK3R5cGVmKEYobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSkpCitnbG9iYWwoX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpCitnbG9iYWwoRihsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKSkKK19sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlOgorRihsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw4Nyw0NCwxNyw2MCw0LDExNSw5MiwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDEzMCwyLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTEwLDIsMCwwLDEzNywxOTMsMjM1LDExMCw1LDI1NSwwLDAsMCwxNDEsODQKK2RiIDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsODcsMiwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwxOCwyMzUsMzEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNTcsMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMjcsOCwxOTIsMTE2LDIxNSwxMzEsMTkyLDMsMTQxLDg0LDcsMCw1NywyMCwzNiwxNQorZGIgMTMwLDM3LDIsMCwwLDE0MSw4NCw2LDAsNTcsODQsMzYsNCwxNSwxMzAsMTYKK2RiIDIsMCwwLDEzNywxOTMsMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNworZGIgMjMsMTMxLDE5OSw0LDcyLDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsNjQKK2RiIDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMzgsMSwwLDAsMTkzLDIzMiwyLDEzOAorZGIgMzAsMTQxLDE1MSwyNTUsMjUxLDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNgorZGIgNDgsMTUsMTMwLDIxOCwxLDAsMCwxMzgsMiwxMzYsNywxMzgsNjYsMSwxMzYsNzEKK2RiIDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjMzLDE2MywwLDAsMCwxMzcsMjQ2CitkYiA2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCw3Myw1NywyMzIsMTE1LDc2LDIzMywxODEKK2RiIDAsMCwwLDUsMjU1LDAsMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwxMjYsMSwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0LDMzCitkYiA0OSwxOTIsMjM1LDIwLDE0MSwxMTYsMzgsMCw2MCwzMiwxNSwxMzAsMjAwLDAsMCwwCitkYiAxMzEsMjI0LDMxLDExNiwyMjQsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMgorZGIgMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMiwxMTQsMTEwLDU5LDg0LDM2LDQ4LDE1LDEzMAorZGIgNzcsMSwwLDAsMTQxLDQsMTUsNTcsNCwzNiwxNSwxMzAsNTgsMSwwLDAKK2RiIDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEsMTk0LDQsMTM3LDcsMTMxLDE5OQorZGIgNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMiw2NiwxMzYsNyw3MSw3MywxMTcKK2RiIDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsMTk2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMiwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMjM4LDAsMCwwLDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNgorZGIgNzAsMjMzLDQyLDI1NSwyNTUsMjU1LDEzNywyNDYsNTksODQsMzYsNDgsMTUsMTMwLDIyMywwCitkYiAwLDAsMTQxLDY4LDE1LDAsNTcsNCwzNiwxNSwxMzAsMjAzLDAsMCwwLDEzNQorZGIgMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMTcwLDEyOSwxOTMsMjU1LDAsMCwwLDE0MSw4NiwzCitkYiA1Nyw4NCwzNiw0LDE1LDEzMCwxNjksMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNgorZGIgMjMwLDE0MSw3NiwxMSw5LDIzNSwyMSwxNDQsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjI1LDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzCitkYiAzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNgorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQKK2RiIDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5CitkYiAyLDIzMyw0MywyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTkKK2RiIDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzCitkYiAxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODkKK2RiIDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMAorZGIgMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1CitkYiAyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDQsMTQxLDE4MCwzOCwwLDAsMCwwCitzaXplKF9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLC4tX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpCitzaXplKEYobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSksLi1GKGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpKQorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2FzbWluaXQuZGVmIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9hc21pbml0LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDJiN2IzCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9hc21pbml0LmRlZgpAQCAtMCwwICsxLDY3IEBACisvKiBhc21pbml0LmRlZiAtLQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisjaWZuZGVmIEYKKyMgIGRlZmluZSBGKG5hbWUpICAgICAgIG5hbWUKKyNlbmRpZgorI2lmbmRlZiBnbG9iYWwKKyMgIGRlZmluZSBnbG9iYWwoeCkgICAgIC5nbG9ibCB4CisjZW5kaWYKKyNpZm5kZWYgdHlwZWYKKyMgIGlmZGVmIF9fRUxGX18KKyMgICAgZGVmaW5lIHR5cGVmKHgpICAgIC50eXBlIHgsQGZ1bmN0aW9uCisjICBlbHNlCisjICAgIGRlZmluZSB0eXBlZih4KQorIyAgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBzaXplCisjICBpZmRlZiBfX0VMRl9fCisjICAgIGRlZmluZSBzaXplKHgscykgICAuc2l6ZSB4LHMKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHNpemUoeCxzKQorIyAgZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBkYgorIyAgZGVmaW5lIGRiICAgICAgICAgICAgLmJ5dGUKKyNlbmRpZgorCisjaWZkZWYgX19FTEZfXworLnNlY3Rpb24gLm5vdGUuR05VLXN0YWNrLCIiLEBwcm9nYml0cworI2VuZGlmCisudGV4dApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xY19zMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xY19zMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjE2YzEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFjX3MxLlMKQEAgLTAsMCArMSw2OCBAQAorLyogbHpvMWNfczEuUyAtLSBsem8xY19kZWNvbXByZXNzX2FzbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2luY2x1ZGUgImFzbWluaXQuZGVmIgordHlwZWYoX2x6bzFjX2RlY29tcHJlc3NfYXNtKQordHlwZWYoRihsem8xY19kZWNvbXByZXNzX2FzbSkpCitnbG9iYWwoX2x6bzFjX2RlY29tcHJlc3NfYXNtKQorZ2xvYmFsKEYobHpvMWNfZGVjb21wcmVzc19hc20pKQorX2x6bzFjX2RlY29tcHJlc3NfYXNtOgorRihsem8xY19kZWNvbXByZXNzX2FzbSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0NCw0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1CitkYiAxNSw4LDE5MiwxMTYsNTEsMTM3LDE5MywyNDMsMTY0LDEzOCw2LDcwLDYwLDMyLDExNCw3MgorZGIgNjAsNjQsMTE0LDkzLDEzNywxOTMsMzYsMzEsMTQxLDg3LDI1NSwxOTMsMjMzLDUsNDEsMTk0CitkYiAxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDY1LDEzNSwyNDIsMjQzLDE2NCwxMzcsMjE0LDIzNQorZGIgMTk5LDE0MSwxODAsMzgsMCwwLDAsMCwxMzgsNiw3MCwxNDEsNzIsMzIsNjAsMjQ4CitkYiAxMTQsMTk3LDE4NSwyNCwxLDAsMCw0NCwyNDgsMTE2LDYsMTQ1LDQ4LDE5MiwyMTEsMjI0CitkYiAxNDUsMjQzLDE2NCwyMzUsMTYzLDE0MSwxMTgsMCwxNDEsODcsMjU1LDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDE2NCwxNjQsMTY0LDEzNywyMTQsMTY0LDQ5LDE5MiwyMzUKK2RiIDE1MiwzNiwzMSwxMzcsMTkzLDExNywxOSwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3LDgKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNgorZGIgNjMsMTM3LDI1MCw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2CitkYiAyNywxMzUsMjE0LDE0MSw3MywzLDI0MywxNjQsMTM3LDIxNCw0OSwxOTIsMTkzLDIzNSw2LDEzNworZGIgMjE3LDE1LDEzMyw4MCwyNTUsMjU1LDI1NSwyMzMsNjAsMjU1LDI1NSwyNTUsMTMxLDI0OSwxLDE1CitkYiAxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5CitkYiA0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAKK2RiIDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAKK2RiIDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0LDE0MSwxMTYsMzgsMAorc2l6ZShfbHpvMWNfZGVjb21wcmVzc19hc20sLi1fbHpvMWNfZGVjb21wcmVzc19hc20pCitzaXplKEYobHpvMWNfZGVjb21wcmVzc19hc20pLC4tRihsem8xY19kZWNvbXByZXNzX2FzbSkpCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFjX3MyLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFjX3MyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTEyMTNiOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMWNfczIuUwpAQCAtMCwwICsxLDc5IEBACisvKiBsem8xY19zMi5TIC0tIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworKi8KKworLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyNpbmNsdWRlICJhc21pbml0LmRlZiIKK3R5cGVmKF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKQordHlwZWYoRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKSkKK2dsb2JhbChfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSkKK2dsb2JhbChGKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpKQorX2x6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmU6CitGKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiwxNDEsMTE4LDAKK2RiIDQ5LDE5MiwxMzgsNiw3MCw2MCwzMiwxMTUsNDAsOCwxOTIsMTE2LDk5LDEzNywxOTMsMTQxCitkYiAyOCwxNSw1NywyOCwzNiwxNSwxMzAsMTA3LDEsMCwwLDE0MSwyOCwxNCw1Nyw5MgorZGIgMzYsNCwxNSwxMzAsODcsMSwwLDAsMjQzLDE2NCwxMzgsNiw3MCw2MCwzMiwxMTQKK2RiIDEyNyw2MCw2NCwxNSwxMzAsMTY5LDAsMCwwLDEzNywxOTMsMzYsMzEsMTQxLDg3LDI1NQorZGIgMTkzLDIzMyw1LDQxLDE5NCwxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDY1LDEzNSwyNDIKK2RiIDU5LDExNiwzNiw0OCwxNSwxMzAsNTEsMSwwLDAsMTQxLDI4LDE1LDU3LDI4LDM2CitkYiAxNSwxMzAsMzIsMSwwLDAsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNDgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCwxNDEsNzIsMzIsNjAsMjQ4LDExNCwxNDksMTg1LDI0LDEsMCwwLDQ0CitkYiAyNDgsMTE2LDYsMTQ1LDQ4LDE5MiwyMTEsMjI0LDE0NSwxNDEsMjgsMTUsNTcsMjgsMzYsMTUKK2RiIDEzMCwyNDEsMCwwLDAsMTQxLDI4LDE0LDU3LDkyLDM2LDQsMTUsMTMwLDIyMSwwCitkYiAwLDAsMjQzLDE2NCwyMzMsODcsMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxNDEsODcsMjU1LDQxLDE5NCwxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDEzNSwyNDIsNTkKK2RiIDExNiwzNiw0OCwxNSwxMzAsMTk2LDAsMCwwLDE0MSw5NSw0LDU3LDI4LDM2LDE1CitkYiAxMzAsMTc3LDAsMCwwLDE2NCwxNjQsMTY0LDEzNywyMTQsMTY0LDQ5LDE5MiwyMzMsNzIsMjU1CitkYiAyNTUsMjU1LDM2LDMxLDEzNywxOTMsMTE3LDI2LDE3NywzMSwxMzgsNiw3MCw4LDE5MiwxMTcKK2RiIDE1LDEyOSwxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxLDE5MywxMzgsNiw3MCwxMzcsMTk1LDM2LDYzLDEzNywyNTAsNDEsMTk0LDEzOCw2LDcwCitkYiAxOTMsMjI0LDYsNDEsMTk0LDU3LDI1MCwxMTYsNDEsMTM1LDIxNCwxNDEsNzMsMyw1OSwxMTYKK2RiIDM2LDQ4LDExNCwxMDUsMTQxLDQsMTUsNTcsNCwzNiwxMTQsOTAsMjQzLDE2NCwxMzcsMjE0CitkYiA0OSwxOTIsMTkzLDIzNSw2LDEzNywyMTcsMTUsMTMzLDIxMCwyNTQsMjU1LDI1NSwyMzMsMTkwLDI1NAorZGIgMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTksNTcsMTM5LDg0LDM2CitkYiA0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzkKK2RiIDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMKK2RiIDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0CitkYiA0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1LDIwNiwxODQsNiwwCitkYiAwLDAsMjM1LDE5OSwxNDEsMTgyLDAsMCwwLDAsMTQxLDE5MSwwLDAsMCwwCitzaXplKF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLC4tX2x6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpCitzaXplKEYobHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSksLi1GKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xZl9mMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xZl9mMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMjA4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFmX2YxLlMKQEAgLTAsMCArMSw3MCBAQAorLyogbHpvMWZfZjEuUyAtLSBsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyovCisKKy8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCisjaW5jbHVkZSAiYXNtaW5pdC5kZWYiCit0eXBlZihfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkKK3R5cGVmKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkpCitnbG9iYWwoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWwoRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK19sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0OgorRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQ0LDQ5LDE5MiwxMzgsNiw3MCw2MCwzMSwxMTkKK2RiIDUxLDgsMTkyLDEzNywxOTMsMTE3LDE5LDEzOCw2LDcwLDgsMTkyLDExNyw4LDEyOSwxOTMKK2RiIDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3Niw4LDMxLDEzNiwyMDAsMTkzLDIzMywyLDI0MworZGIgMTY1LDM2LDMsMTE2LDgsMTM5LDMwLDEsMTk4LDEzNywzMSwxLDE5OSwxMzgsNiw3MAorZGIgNjAsMzEsMTE4LDg4LDYwLDIyMywxNSwxMzUsMTMyLDAsMCwwLDEzNywxOTMsMTkzLDIzMgorZGIgMiwxNDEsODcsMjU1LDM2LDcsMTkzLDIzMyw1LDEzNywxOTUsMTM4LDYsMTQxLDQsMTk1CitkYiA3MCw0MSwxOTQsMTMxLDE5MywyLDEzNSwyMTQsMTMxLDI0OSw2LDExNCwxNiwxMzEsMjQ4LDQKK2RiIDExNCwxMSwxMzYsMjAwLDE5MywyMzMsMiwyNDMsMTY1LDM2LDMsMTM2LDE5MywyNDMsMTY0LDEzNworZGIgMjE0LDEzOCw3OCwyNTQsMTMxLDIyNSwzLDE1LDEzMiwxMjMsMjU1LDI1NSwyNTUsMTM5LDYsMQorZGIgMjA2LDEzNyw3LDEsMjA3LDQ5LDE5MiwxMzgsNiw3MCwyMzUsMTY0LDE5MywyMzIsMiwxNDEKK2RiIDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTM3LDE5MywxMzgsNiw3MCwxNDEsNCwxOTMsNDEsMTk0LDEzOQorZGIgMiwxMzcsNywxMzEsMTk5LDMsMjM1LDIwMSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjkKK2RiIDE5MywyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwyMzUsOSwxNDEsMTE4LDAKK2RiIDM2LDMxLDEzNywxOTMsMTE2LDIyNiwxMzcsMjUwLDEwMiwxMzksNiwxMzEsMTk4LDIsMTkzLDIzMgorZGIgMiwxNSwxMzMsMTIyLDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNSwxNDksMTkyLDEzOSw4NCwzNgorZGIgNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5CitkYiA4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzCitkYiAxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NAorZGIgNCwwLDAsMCwyMzUsMjEzLDE0MSwxMTgsMCwxNDEsMTg4LDM5LDAsMCwwLDAKK3NpemUoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QsLi1fbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkKK3NpemUoRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KSwuLUYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkpCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFmX2YyLlMgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzFmX2YyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGM3MjEwNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMWZfZjIuUwpAQCAtMCwwICsxLDc3IEBACisvKiBsem8xZl9mMi5TIC0tIGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2luY2x1ZGUgImFzbWluaXQuZGVmIgordHlwZWYoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK3R5cGVmKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKK2dsb2JhbChfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorZ2xvYmFsKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKK19sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmU6CitGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDE0MSwxMTgsMAorZGIgNDksMTkyLDEzOCw2LDcwLDYwLDMxLDExOSw3Niw4LDE5MiwxMzcsMTkzLDExNywxOSwxMzgKK2RiIDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MywyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYKK2RiIDgsMzEsMTQxLDI4LDE1LDU3LDI4LDM2LDE1LDEzMCw2MSwxLDAsMCwxNDEsMjgKK2RiIDE0LDU3LDkyLDM2LDQsMTUsMTMwLDQxLDEsMCwwLDEzNiwyMDAsMTkzLDIzMywyCitkYiAyNDMsMTY1LDM2LDMsMTE2LDgsMTM5LDMwLDEsMTk4LDEzNywzMSwxLDE5OSwxMzgsNgorZGIgNzAsNjAsMzEsMTE4LDExMCw2MCwyMjMsMTUsMTM1LDE3OSwwLDAsMCwxMzcsMTkzLDE5MworZGIgMjMyLDIsMTQxLDg3LDI1NSwzNiw3LDE5MywyMzMsNSwxMzcsMTk1LDEzOCw2LDE0MSw0CitkYiAxOTUsNzAsNDEsMTk0LDEzMSwxOTMsMiwxMzUsMjE0LDU5LDExNiwzNiw0OCwxNSwxMzAsMjM5CitkYiAwLDAsMCwxNDEsMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDIyMCwwLDAsMCwxMzEKK2RiIDI0OSw2LDExNCwxNiwxMzEsMjQ4LDQsMTE0LDExLDEzNiwyMDAsMTkzLDIzMywyLDI0MywxNjUKK2RiIDM2LDMsMTM2LDE5MywyNDMsMTY0LDEzNywyMTQsMTM4LDc4LDI1NCwxMzEsMjI1LDMsMTUsMTMyCitkYiA3NiwyNTUsMjU1LDI1NSwxMzksNiwxLDIwNiwxMzcsNywxLDIwNyw0OSwxOTIsMTM4LDYKK2RiIDcwLDIzNSwxNDIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDE1NiwwLDAsMCwxOTMKK2RiIDIzMiwyLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDEzNywxOTMsMTM4LDYsNzAsMTQxLDQsMTkzCitkYiA0MSwxOTQsNTksODQsMzYsNDgsMTUsMTMwLDEzNCwwLDAsMCwxMzksMiwxMzcsNworZGIgMTMxLDE5OSwzLDIzNSwxNzksMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MywyNTUsMAorZGIgMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMjM1LDEyLDE0MSwxODIsMCwwLDAsMAorZGIgMzYsMzEsMTM3LDE5MywxMTYsMjIzLDEzNywyNTAsMTAyLDEzOSw2LDEzMSwxOTgsMiwxOTMsMjMyCitkYiAyLDE1LDEzMyw3NSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5Miw1OSw2MCwzNgorZGIgMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5CitkYiA0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAKK2RiIDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAKK2RiIDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAKK2RiIDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDEsMTgwLDM4LDAsMCwwLDAKK3NpemUoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwuLV9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCitzaXplKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSwuLUYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXhfZjEuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXhfZjEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTM3Zjg5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9mMS5TCkBAIC0wLDAgKzEsNzggQEAKKy8qIGx6bzF4X2YxLlMgLS0gbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdAorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2luY2x1ZGUgImFzbWluaXQuZGVmIgordHlwZWYoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpCit0eXBlZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpKQorZ2xvYmFsKF9sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KQorZ2xvYmFsKEYobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdDoKK0YobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwyNworZGIgNDQsMTQsMjM1LDM0LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0CitkYiAxNDEsNjgsMjQsMjEsMjM1LDE2LDEzNywyNDYsMTM4LDYsNzAsNjAsMTYsMTE1LDY1LDgKK2RiIDE5MiwxMTYsMjMwLDEzMSwxOTIsNiwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOQorZGIgMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5CitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsMjUsMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNDcKK2RiIDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzksMTAsMTM3LDE1LDEsMjM5LDIzNSwxMTAKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDEzMSwxOTMsNCw1NywyMzIsMTE1CitkYiA1MywyMzUsMTA5LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MQorZGIgNzYsMjQsMzYsNDksMTkyLDIzNSwxMywxNDQsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMxLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CitzaXplKF9sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LC4tX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitzaXplKEYobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCksLi1GKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9mMi5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9mMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViM2E3NDQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzF4X2YyLlMKQEAgLTAsMCArMSw5MyBAQAorLyogbHpvMXhfZjIuUyAtLSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworKi8KKworLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyNpbmNsdWRlICJhc21pbml0LmRlZiIKK3R5cGVmKF9sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCit0eXBlZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitnbG9iYWwoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbChGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4LDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAKK2RiIDQxLDE5NCwxMzEsMTkzLDQsNTcsMjMyLDExNSw3MywyMzMsMTcwLDAsMCwwLDUsMjU1CitkYiAwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjMsMSwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE3LDE0NAorZGIgNjAsMzIsMTUsMTMwLDIwMCwwLDAsMCwxMzEsMjI0LDMxLDExNiwyMjcsMTQxLDcyLDUKK2RiIDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMgorZGIgMTE0LDEwMiw1OSw4NCwzNiw0OCwxNSwxMzAsNzcsMSwwLDAsMTQxLDY4LDE1LDI1MworZGIgMTkzLDIzMywyLDU3LDQsMzYsMTUsMTMwLDU0LDEsMCwwLDEzOSwyNiwxMzEsMTk0CitkYiA0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAsMjU0CitkYiAzMywyMzIsMTUsMTMyLDIxNiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NywyMCwzNiwxNSwxMzAKK2RiIDE0LDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUsMTMwLDI1MCwwLDAKK2RiIDAsMTM5LDIyLDEsMTk4LDEzNywyMywxLDE5OSwxMzgsNiw3MCwyMzMsNTUsMjU1LDI1NQorZGIgMjU1LDE0MSwxODAsMzgsMCwwLDAsMCw1OSw4NCwzNiw0OCwxNSwxMzAsMjMxLDAKK2RiIDAsMCwxNDEsNjgsMTUsMjUzLDU3LDQsMzYsMTUsMTMwLDIxMSwwLDAsMCwxMzUKK2RiIDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNjQsMTI5LDE5MywyNTUsMCwwLDAsMTQxCitkYiA4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDE3NSwwLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDc2LDExLDEyLDIzNSwyNywxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIxOSwxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMywzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNworZGIgMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywzMSwyNTUsMjU1LDI1NSwxMzEsMjQ5CitkYiA2LDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2CitkYiA0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNworZGIgNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwCitkYiAwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwCitkYiAyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OQorc2l6ZShfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLC4tX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK3NpemUoRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpLC4tRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9zMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9zMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MDk1YzYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzF4X3MxLlMKQEAgLTAsMCArMSw4MCBAQAorLyogbHpvMXhfczEuUyAtLSBsem8xeF9kZWNvbXByZXNzX2FzbQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2luY2x1ZGUgImFzbWluaXQuZGVmIgordHlwZWYoX2x6bzF4X2RlY29tcHJlc3NfYXNtKQordHlwZWYoRihsem8xeF9kZWNvbXByZXNzX2FzbSkpCitnbG9iYWwoX2x6bzF4X2RlY29tcHJlc3NfYXNtKQorZ2xvYmFsKEYobHpvMXhfZGVjb21wcmVzc19hc20pKQorX2x6bzF4X2RlY29tcHJlc3NfYXNtOgorRihsem8xeF9kZWNvbXByZXNzX2FzbSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwzNQorZGIgNDQsMTcsNjAsNCwxMTUsNDAsMTM3LDE5MywyMzUsNTYsNSwyNTUsMCwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw2OCwyNCwxOCwyMzUsMTgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsNzMsOCwxOTIsMTE2LDIyOCwxMzEsMTkyLDMsMTM3LDE5MworZGIgMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzIKK2RiIDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsMzcsMTkzLDIzMiwyLDEzOCwzMAorZGIgMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNworZGIgMTM4LDY2LDEsMTM2LDcxLDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjM1LDExOQorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOAorZGIgMzAsMTkzLDIzMyw1LDE0MSw0LDIxNiw3MCw0MSwxOTQsNjUsNTcsMjMyLDExNSw1NSwyMzUKK2RiIDExOSw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYsMjQKK2RiIDMzLDQ5LDE5MiwyMzUsMTUsMTQxLDExOCwwLDYwLDMyLDExNCwxMjQsMTMxLDIyNCwzMSwxMTYKK2RiIDIyOSwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw2NiwxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxCitkYiAxOTQsNCwxMzcsNywxMzEsMTk5LDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIKK2RiIDY2LDEzNiw3LDcxLDczLDExNywyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDQ2LDI1NQorZGIgMjU1LDI1NSwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYsNzAsMjMzLDEwOQorZGIgMjU1LDI1NSwyNTUsMTQ0LDE0MSwxMTYsMzgsMCwxMzUsMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMjE1CitkYiAxMjksMTkzLDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEKK2RiIDksMjM1LDI1LDE0NCwxNDEsMTE2LDM4LDAsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjIxLDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzCitkYiAxMTQsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMQorZGIgMTMxLDE5OSwyLDIzMywxMTEsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsMTM5LDg0CitkYiAzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OAorZGIgMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUKK2RiIDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAKK2RiIDE4NCw0LDAsMCwwLDIzNSwyMTMsMTM3LDI0NiwxNDEsMTg4LDM5LDAsMCwwLDAKK3NpemUoX2x6bzF4X2RlY29tcHJlc3NfYXNtLC4tX2x6bzF4X2RlY29tcHJlc3NfYXNtKQorc2l6ZShGKGx6bzF4X2RlY29tcHJlc3NfYXNtKSwuLUYobHpvMXhfZGVjb21wcmVzc19hc20pKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9zMi5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeF9zMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZTE1MjUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzF4X3MyLlMKQEAgLTAsMCArMSw5NiBAQAorLyogbHpvMXhfczIuUyAtLSBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyovCisKKy8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCisjaW5jbHVkZSAiYXNtaW5pdC5kZWYiCit0eXBlZihfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkKK3R5cGVmKEYobHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkpCitnbG9iYWwoX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpCitnbG9iYWwoRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKSkKK19sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw4Nyw0NCwxNyw2MCw0LDExNSw5MiwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDEzMCwyLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTEwLDIsMCwwLDEzNywxOTMsMjM1LDExMCw1LDI1NSwwLDAsMCwxNDEsODQKK2RiIDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsODcsMiwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwxOCwyMzUsMzEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNTcsMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMjcsOCwxOTIsMTE2LDIxNSwxMzEsMTkyLDMsMTQxLDg0LDcsMCw1NywyMCwzNiwxNQorZGIgMTMwLDM3LDIsMCwwLDE0MSw4NCw2LDAsNTcsODQsMzYsNCwxNSwxMzAsMTYKK2RiIDIsMCwwLDEzNywxOTMsMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNworZGIgMjMsMTMxLDE5OSw0LDcyLDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsNjQKK2RiIDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMzgsMSwwLDAsMTkzLDIzMiwyLDEzOAorZGIgMzAsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNgorZGIgNDgsMTUsMTMwLDIxOCwxLDAsMCwxMzgsMiwxMzYsNywxMzgsNjYsMSwxMzYsNzEKK2RiIDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjMzLDE2MywwLDAsMCwxMzcsMjQ2CitkYiA2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCw2NSw1NywyMzIsMTE1LDc1LDIzMworZGIgMTgwLDAsMCwwLDUsMjU1LDAsMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQKK2RiIDE1LDEzMCwxMjUsMSwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0CitkYiAzMyw0OSwxOTIsMjM1LDE5LDE0MSwxMTgsMCw2MCwzMiwxNSwxMzAsMjAwLDAsMCwwCitkYiAxMzEsMjI0LDMxLDExNiwyMjUsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMgorZGIgMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMiwxMTQsMTEwLDU5LDg0LDM2LDQ4LDE1LDEzMAorZGIgNzcsMSwwLDAsMTQxLDQsMTUsNTcsNCwzNiwxNSwxMzAsNTgsMSwwLDAKK2RiIDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEsMTk0LDQsMTM3LDcsMTMxLDE5OQorZGIgNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMiw2NiwxMzYsNyw3MSw3MywxMTcKK2RiIDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsMTk2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMiwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMjM4LDAsMCwwLDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNgorZGIgNzAsMjMzLDQyLDI1NSwyNTUsMjU1LDEzNywyNDYsNTksODQsMzYsNDgsMTUsMTMwLDIyMywwCitkYiAwLDAsMTQxLDY4LDE1LDAsNTcsNCwzNiwxNSwxMzAsMjAzLDAsMCwwLDEzNQorZGIgMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMTcwLDEyOSwxOTMsMjU1LDAsMCwwLDE0MSw4NiwzCitkYiA1Nyw4NCwzNiw0LDE1LDEzMCwxNjksMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNgorZGIgMjMwLDE0MSw3NiwxMSw5LDIzNSwyMSwxNDQsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjI1LDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzCitkYiAzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNgorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQKK2RiIDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5CitkYiAyLDIzMyw0MywyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTkKK2RiIDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzCitkYiAxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODkKK2RiIDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMAorZGIgMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1CitkYiAyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDQsMTQxLDE4MCwzOCwwLDAsMCwwCitzaXplKF9sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLC4tX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpCitzaXplKEYobHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSksLi1GKGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9mMS5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9mMS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4YjQ4MjYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzF5X2YxLlMKQEAgLTAsMCArMSw3OCBAQAorLyogbHpvMXlfZjEuUyAtLSBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyovCisKKy8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCisjaW5jbHVkZSAiYXNtaW5pdC5kZWYiCit0eXBlZihfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkKK3R5cGVmKEYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkpCitnbG9iYWwoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWwoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK19sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0OgorRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDI3CitkYiA0NCwxNCwyMzUsMzQsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQKK2RiIDE0MSw2OCwyNCwyMSwyMzUsMTYsMTM3LDI0NiwxMzgsNiw3MCw2MCwxNiwxMTUsNjUsOAorZGIgMTkyLDExNiwyMzAsMTMxLDE5Miw2LDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5CitkYiAyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTkKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSwyNSwxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI1MQorZGIgMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOSwxMCwxMzcsMTUsMSwyMzksMjM1LDExMAorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNTQKK2RiIDIzNSwxMTAsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2CitkYiAyNCwzNiw0OSwxOTIsMjM1LDE0LDEzNywyNDYsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMwLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CitzaXplKF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LC4tX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitzaXplKEYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCksLi1GKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpKQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9mMi5TIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9mMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NWIyYzMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfZ2FzL2x6bzF5X2YyLlMKQEAgLTAsMCArMSw5MyBAQAorLyogbHpvMXlfZjIuUyAtLSBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworKi8KKworLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyNpbmNsdWRlICJhc21pbml0LmRlZiIKK3R5cGVmKF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCit0eXBlZihGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitnbG9iYWwoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbChGKGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwLDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCwxMzEsMTkzLDIsNTcsMjMyLDExNSw3NCwyMzMsMTcxLDAsMCwwLDUsMjU1LDAKK2RiIDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjQsMSwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE4LDEzNywyNDYKK2RiIDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAsMTMxLDIyNCwzMSwxMTYsMjI2LDE0MSw3Miw1CitkYiAxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIKK2RiIDExNCwxMDIsNTksODQsMzYsNDgsMTUsMTMwLDc3LDEsMCwwLDE0MSw2OCwxNSwyNTMKK2RiIDE5MywyMzMsMiw1Nyw0LDM2LDE1LDEzMCw1NCwxLDAsMCwxMzksMjYsMTMxLDE5NAorZGIgNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwLDI1NAorZGIgMzMsMjMyLDE1LDEzMiwyMTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcsMjAsMzYsMTUsMTMwCitkYiAxNCwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1LDEzMCwyNTAsMCwwCitkYiAwLDEzOSwyMiwxLDE5OCwxMzcsMjMsMSwxOTksMTM4LDYsNzAsMjMzLDU1LDI1NSwyNTUKK2RiIDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAsNTksODQsMzYsNDgsMTUsMTMwLDIzMSwwCitkYiAwLDAsMTQxLDY4LDE1LDI1Myw1Nyw0LDM2LDE1LDEzMCwyMTEsMCwwLDAsMTM1CitkYiAyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMTY0LDEyOSwxOTMsMjU1LDAsMCwwLDE0MQorZGIgODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxNzUsMCwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw3NiwxMSwxMiwyMzUsMjcsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMTksMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMsMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2LDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcKK2RiIDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMzEsMjU1LDI1NSwyNTUsMTMxLDI0OQorZGIgNiwxNSwxNDksMTkyLDU5LDYwLDM2LDExOSw1NywxMzksODQsMzYsNDAsMyw4NCwzNgorZGIgNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcKK2RiIDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMAorZGIgMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMAorZGIgMjM1LDIxMywxODQsNSwwLDAsMCwyMzUsMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTkKK3NpemUoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwuLV9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCitzaXplKEYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSwuLUYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXlfczEuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXlfczEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTUyODAxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9zMS5TCkBAIC0wLDAgKzEsODAgQEAKKy8qIGx6bzF5X3MxLlMgLS0gbHpvMXlfZGVjb21wcmVzc19hc20KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworKi8KKworLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyNpbmNsdWRlICJhc21pbml0LmRlZiIKK3R5cGVmKF9sem8xeV9kZWNvbXByZXNzX2FzbSkKK3R5cGVmKEYobHpvMXlfZGVjb21wcmVzc19hc20pKQorZ2xvYmFsKF9sem8xeV9kZWNvbXByZXNzX2FzbSkKK2dsb2JhbChGKGx6bzF5X2RlY29tcHJlc3NfYXNtKSkKK19sem8xeV9kZWNvbXByZXNzX2FzbToKK0YobHpvMXlfZGVjb21wcmVzc19hc20pOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMzUKK2RiIDQ0LDE3LDYwLDQsMTE1LDQwLDEzNywxOTMsMjM1LDU2LDUsMjU1LDAsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNjgsMjQsMTgsMjM1LDE4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDczLDgsMTkyLDExNiwyMjgsMTMxLDE5MiwzLDEzNywxOTMKK2RiIDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDcyCitkYiAxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDM3LDE5MywyMzIsMiwxMzgsMzAKK2RiIDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcKK2RiIDEzOCw2NiwxLDEzNiw3MSwxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzNSwxMTkKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDMzLDIzMiwxMzgsMzAKK2RiIDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEsMTk0LDczLDU3LDIzMiwxMTUsNTYsMjM1LDEyMAorZGIgNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2LDI0LDMzCitkYiA0OSwxOTIsMjM1LDE2LDE0MSwxMTYsMzgsMCw2MCwzMiwxMTQsMTI0LDEzMSwyMjQsMzEsMTE2CitkYiAyMjgsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNjYsMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMQorZGIgMTk0LDQsMTM3LDcsMTMxLDE5OSw0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyCitkYiA2NiwxMzYsNyw3MSw3MywxMTcsMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiw0NiwyNTUKK2RiIDI1NSwyNTUsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2LDcwLDIzMywxMDkKK2RiIDI1NSwyNTUsMjU1LDE0NCwxNDEsMTE2LDM4LDAsMTM1LDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDIxNQorZGIgMTI5LDE5MywyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExCitkYiA5LDIzNSwyNSwxNDQsMTQxLDExNiwzOCwwLDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyMSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMworZGIgMTE0LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEKK2RiIDEzMSwxOTksMiwyMzMsMTExLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDEzOSw4NAorZGIgMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgKK2RiIDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1CitkYiA5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwCitkYiAxODQsNCwwLDAsMCwyMzUsMjEzLDEzNywyNDYsMTQxLDE4OCwzOSwwLDAsMCwwCitzaXplKF9sem8xeV9kZWNvbXByZXNzX2FzbSwuLV9sem8xeV9kZWNvbXByZXNzX2FzbSkKK3NpemUoRihsem8xeV9kZWNvbXByZXNzX2FzbSksLi1GKGx6bzF5X2RlY29tcHJlc3NfYXNtKSkKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXlfczIuUyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19nYXMvbHpvMXlfczIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjgyYzQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX2dhcy9sem8xeV9zMi5TCkBAIC0wLDAgKzEsOTYgQEAKKy8qIGx6bzF5X3MyLlMgLS0gbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisqLworCisvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworI2luY2x1ZGUgImFzbWluaXQuZGVmIgordHlwZWYoX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpCit0eXBlZihGKGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpKQorZ2xvYmFsKF9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKQorZ2xvYmFsKEYobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSkpCitfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZToKK0YobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDQ5LDE5Miw0OQorZGIgMjE5LDE3Miw2MCwxNywxMTgsODcsNDQsMTcsNjAsNCwxMTUsOTIsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwxMzAsMiwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDExMCwyLDAsMCwxMzcsMTkzLDIzNSwxMTAsNSwyNTUsMCwwLDAsMTQxLDg0CitkYiA2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDg3LDIsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNjgsMjQsMTgsMjM1LDMxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDU3LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTI3LDgsMTkyLDExNiwyMTUsMTMxLDE5MiwzLDE0MSw4NCw3LDAsNTcsMjAsMzYsMTUKK2RiIDEzMCwzNywyLDAsMCwxNDEsODQsNiwwLDU3LDg0LDM2LDQsMTUsMTMwLDE2CitkYiAyLDAsMCwxMzcsMTkzLDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcKK2RiIDIzLDEzMSwxOTksNCw3MiwxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDY0CitkYiAxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjM4LDEsMCwwLDE5MywyMzIsMiwxMzgKK2RiIDMwLDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYKK2RiIDQ4LDE1LDEzMCwyMTgsMSwwLDAsMTM4LDIsMTM2LDcsMTM4LDY2LDEsMTM2LDcxCitkYiAxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzMywxNjMsMCwwLDAsMTM3LDI0NgorZGIgNjAsNjQsMTE0LDY4LDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsNzMsNTcsMjMyLDExNSw3NiwyMzMsMTgxCitkYiAwLDAsMCw1LDI1NSwwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTI2LDEsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzMworZGIgNDksMTkyLDIzNSwyMCwxNDEsMTE2LDM4LDAsNjAsMzIsMTUsMTMwLDIwMCwwLDAsMAorZGIgMTMxLDIyNCwzMSwxMTYsMjI0LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIKK2RiIDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIsMTE0LDExMCw1OSw4NCwzNiw0OCwxNSwxMzAKK2RiIDc3LDEsMCwwLDE0MSw0LDE1LDU3LDQsMzYsMTUsMTMwLDU4LDEsMCwwCitkYiAxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxLDE5NCw0LDEzNyw3LDEzMSwxOTkKK2RiIDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIsNjYsMTM2LDcsNzEsNzMsMTE3CitkYiAyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDE5NiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDIsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDIzOCwwLDAsMCwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYKK2RiIDcwLDIzMyw0MiwyNTUsMjU1LDI1NSwxMzcsMjQ2LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMjMsMAorZGIgMCwwLDE0MSw2OCwxNSwwLDU3LDQsMzYsMTUsMTMwLDIwMywwLDAsMCwxMzUKK2RiIDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDE3MCwxMjksMTkzLDI1NSwwLDAsMCwxNDEsODYsMworZGIgNTcsODQsMzYsNCwxNSwxMzAsMTY5LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYKK2RiIDIzMCwxNDEsNzYsMTEsOSwyMzUsMjEsMTQ0LDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyNSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMworZGIgMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0CitkYiAzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OQorZGIgMiwyMzMsNDMsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5CitkYiA1NywxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MworZGIgMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5CitkYiA5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAKK2RiIDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNQorZGIgMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTksMTQ0LDE0MSwxODAsMzgsMCwwLDAsMAorc2l6ZShfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSwuLV9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKQorc2l6ZShGKGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpLC4tRihsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKSkKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2FsbC9hc21fYWxsLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2FsbC9hc21fYWxsLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDU1MjJjCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vYWxsL2FzbV9hbGwuYXNtCkBAIC0wLDAgKzEsNDc3IEBACis7ICBhc21fYWxsLmFzbSAtLQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKy4zODZwCisubW9kZWwgZmxhdAorLmNvZGUKK2lmZGVmIF9fTUFTTV9fCitvcHRpb24gY2FzZW1hcDpub25lCitlbmRpZgoraWZkZWYgX19UQVNNX18KK2VuZGlmCitpZmRlZiBfX1dBU01fXworZW5kaWYKKworcHVibGljIF9sem8xY19kZWNvbXByZXNzX2FzbQorX2x6bzFjX2RlY29tcHJlc3NfYXNtOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDQsNDksMTkyLDEzOCw2LDcwLDYwLDMyLDExNQorZGIgMTUsOCwxOTIsMTE2LDUxLDEzNywxOTMsMjQzLDE2NCwxMzgsNiw3MCw2MCwzMiwxMTQsNzIKK2RiIDYwLDY0LDExNCw5MywxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUsMTkzLDIzMyw1LDQxLDE5NAorZGIgMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyLDI0MywxNjQsMTM3LDIxNCwyMzUKK2RiIDE5OSwxNDEsMTgwLDM4LDAsMCwwLDAsMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OAorZGIgMTE0LDE5NywxODUsMjQsMSwwLDAsNDQsMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNAorZGIgMTQ1LDI0MywxNjQsMjM1LDE2MywxNDEsMTE4LDAsMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAKK2RiIDE5MywyMjQsNSw0MSwxOTQsMTM1LDI0MiwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjM1CitkYiAxNTIsMzYsMzEsMTM3LDE5MywxMTcsMTksMTc3LDMxLDEzOCw2LDcwLDgsMTkyLDExNyw4CitkYiAxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDEsMTkzLDEzOCw2LDcwLDEzNywxOTUsMzYKK2RiIDYzLDEzNywyNTAsNDEsMTk0LDEzOCw2LDcwLDE5MywyMjQsNiw0MSwxOTQsNTcsMjUwLDExNgorZGIgMjcsMTM1LDIxNCwxNDEsNzMsMywyNDMsMTY0LDEzNywyMTQsNDksMTkyLDE5MywyMzUsNiwxMzcKK2RiIDIxNywxNSwxMzMsODAsMjU1LDI1NSwyNTUsMjMzLDYwLDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNQorZGIgMTQ5LDE5MiwxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOQorZGIgNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwCitkYiA4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwCitkYiAwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE0NCwxNDEsMTE2LDM4LDAKKworcHVibGljIF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlCitfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1LDQwLDgsMTkyLDExNiw5OSwxMzcsMTkzLDE0MQorZGIgMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDEwNywxLDAsMCwxNDEsMjgsMTQsNTcsOTIKK2RiIDM2LDQsMTUsMTMwLDg3LDEsMCwwLDI0MywxNjQsMTM4LDYsNzAsNjAsMzIsMTE0CitkYiAxMjcsNjAsNjQsMTUsMTMwLDE2OSwwLDAsMCwxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUKK2RiIDE5MywyMzMsNSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyCitkYiA1OSwxMTYsMzYsNDgsMTUsMTMwLDUxLDEsMCwwLDE0MSwyOCwxNSw1NywyOCwzNgorZGIgMTUsMTMwLDMyLDEsMCwwLDI0MywxNjQsMTM3LDIxNCwyMzUsMTQ4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OCwxMTQsMTQ5LDE4NSwyNCwxLDAsMCw0NAorZGIgMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNCwxNDUsMTQxLDI4LDE1LDU3LDI4LDM2LDE1CitkYiAxMzAsMjQxLDAsMCwwLDE0MSwyOCwxNCw1Nyw5MiwzNiw0LDE1LDEzMCwyMjEsMAorZGIgMCwwLDI0MywxNjQsMjMzLDg3LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDU5CitkYiAxMTYsMzYsNDgsMTUsMTMwLDE5NiwwLDAsMCwxNDEsOTUsNCw1NywyOCwzNiwxNQorZGIgMTMwLDE3NywwLDAsMCwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjMzLDcyLDI1NQorZGIgMjU1LDI1NSwzNiwzMSwxMzcsMTkzLDExNywyNiwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3CitkYiAxNSwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNiw2MywxMzcsMjUwLDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2LDQxLDEzNSwyMTQsMTQxLDczLDMsNTksMTE2CitkYiAzNiw0OCwxMTQsMTA1LDE0MSw0LDE1LDU3LDQsMzYsMTE0LDkwLDI0MywxNjQsMTM3LDIxNAorZGIgNDksMTkyLDE5MywyMzUsNiwxMzcsMjE3LDE1LDEzMywyMTAsMjU0LDI1NSwyNTUsMjMzLDE5MCwyNTQKK2RiIDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNgorZGIgNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5CitkYiA4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzCitkYiAxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NAorZGIgNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMAorZGIgMCwwLDIzNSwxOTksMTQxLDE4MiwwLDAsMCwwLDE0MSwxOTEsMCwwLDAsMAorCitwdWJsaWMgX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QKK19sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0OgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDQsNDksMTkyLDEzOCw2LDcwLDYwLDMxLDExOQorZGIgNTEsOCwxOTIsMTM3LDE5MywxMTcsMTksMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MworZGIgMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzCitkYiAxNjUsMzYsMywxMTYsOCwxMzksMzAsMSwxOTgsMTM3LDMxLDEsMTk5LDEzOCw2LDcwCitkYiA2MCwzMSwxMTgsODgsNjAsMjIzLDE1LDEzNSwxMzIsMCwwLDAsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMzYsNywxOTMsMjMzLDUsMTM3LDE5NSwxMzgsNiwxNDEsNCwxOTUKK2RiIDcwLDQxLDE5NCwxMzEsMTkzLDIsMTM1LDIxNCwxMzEsMjQ5LDYsMTE0LDE2LDEzMSwyNDgsNAorZGIgMTE0LDExLDEzNiwyMDAsMTkzLDIzMywyLDI0MywxNjUsMzYsMywxMzYsMTkzLDI0MywxNjQsMTM3CitkYiAyMTQsMTM4LDc4LDI1NCwxMzEsMjI1LDMsMTUsMTMyLDEyMywyNTUsMjU1LDI1NSwxMzksNiwxCitkYiAyMDYsMTM3LDcsMSwyMDcsNDksMTkyLDEzOCw2LDcwLDIzNSwxNjQsMTkzLDIzMiwyLDE0MQorZGIgMTUxLDI1NSwyNDcsMjU1LDI1NSwxMzcsMTkzLDEzOCw2LDcwLDE0MSw0LDE5Myw0MSwxOTQsMTM5CitkYiAyLDEzNyw3LDEzMSwxOTksMywyMzUsMjAxLDEzOCw2LDcwLDgsMTkyLDExNyw4LDEyOQorZGIgMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3Niw4LDMxLDIzNSw5LDE0MSwxMTgsMAorZGIgMzYsMzEsMTM3LDE5MywxMTYsMjI2LDEzNywyNTAsMTAyLDEzOSw2LDEzMSwxOTgsMiwxOTMsMjMyCitkYiAyLDE1LDEzMywxMjIsMjU1LDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsMTM5LDg0LDM2CitkYiA0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzkKK2RiIDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMKK2RiIDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0CitkYiA0LDAsMCwwLDIzNSwyMTMsMTQxLDExOCwwLDE0MSwxODgsMzksMCwwLDAsMAorCitwdWJsaWMgX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5LDc2LDgsMTkyLDEzNywxOTMsMTE3LDE5LDEzOAorZGIgNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3NgorZGIgOCwzMSwxNDEsMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDYxLDEsMCwwLDE0MSwyOAorZGIgMTQsNTcsOTIsMzYsNCwxNSwxMzAsNDEsMSwwLDAsMTM2LDIwMCwxOTMsMjMzLDIKK2RiIDI0MywxNjUsMzYsMywxMTYsOCwxMzksMzAsMSwxOTgsMTM3LDMxLDEsMTk5LDEzOCw2CitkYiA3MCw2MCwzMSwxMTgsMTEwLDYwLDIyMywxNSwxMzUsMTc5LDAsMCwwLDEzNywxOTMsMTkzCitkYiAyMzIsMiwxNDEsODcsMjU1LDM2LDcsMTkzLDIzMyw1LDEzNywxOTUsMTM4LDYsMTQxLDQKK2RiIDE5NSw3MCw0MSwxOTQsMTMxLDE5MywyLDEzNSwyMTQsNTksMTE2LDM2LDQ4LDE1LDEzMCwyMzkKK2RiIDAsMCwwLDE0MSwyOCwxNSw1NywyOCwzNiwxNSwxMzAsMjIwLDAsMCwwLDEzMQorZGIgMjQ5LDYsMTE0LDE2LDEzMSwyNDgsNCwxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NQorZGIgMzYsMywxMzYsMTkzLDI0MywxNjQsMTM3LDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIKK2RiIDc2LDI1NSwyNTUsMjU1LDEzOSw2LDEsMjA2LDEzNyw3LDEsMjA3LDQ5LDE5MiwxMzgsNgorZGIgNzAsMjM1LDE0MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMTU2LDAsMCwwLDE5MworZGIgMjMyLDIsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTM3LDE5MywxMzgsNiw3MCwxNDEsNCwxOTMKK2RiIDQxLDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMTM0LDAsMCwwLDEzOSwyLDEzNyw3CitkYiAxMzEsMTk5LDMsMjM1LDE3OSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwCitkYiAwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwyMzUsMTIsMTQxLDE4MiwwLDAsMCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjMsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDc1LDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNSwxNDksMTkyLDU5LDYwLDM2CitkYiAxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjkKK2RiIDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MAorZGIgODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMAorZGIgMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMAorZGIgMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0MSwxODAsMzgsMCwwLDAsMAorCitwdWJsaWMgX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QKK19sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0OgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMjcKK2RiIDQ0LDE0LDIzNSwzNCw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NAorZGIgMTQxLDY4LDI0LDIxLDIzNSwxNiwxMzcsMjQ2LDEzOCw2LDcwLDYwLDE2LDExNSw2NSw4CitkYiAxOTIsMTE2LDIzMCwxMzEsMTkyLDYsMTM3LDE5Myw0OSwyMzIsMTkzLDIzMywyLDMzLDIzMiwxMzkKK2RiIDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDczLDExNywyNDMsNDEsMTk4LDQxLDE5OQorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDI1LDE5MywyMzIsMiwxMzgsMzAsMTQxLDE1MSwyNTUsMjQ3CitkYiAyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM5LDEwLDEzNywxNSwxLDIzOSwyMzUsMTEwCitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCwxMzEsMTkzLDQsNTcsMjMyLDExNQorZGIgNTMsMjM1LDEwOSw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEKK2RiIDc2LDI0LDM2LDQ5LDE5MiwyMzUsMTMsMTQ0LDYwLDMyLDExNCwxMTYsMTMxLDIyNCwzMSwxMTYKK2RiIDIzMSwxNDEsNzIsNSwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw1OCwxNDEsNjgsMTUsMjUzLDE5MywyMzMsMiwxMzksMjYsMTMxCitkYiAxOTQsNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwCitkYiAyNTQsMzMsMjMyLDE1LDEzMiw2MywyNTUsMjU1LDI1NSwxMzksMjIsMSwxOTgsMTM3LDIzLDEKK2RiIDE5OSwxMzgsNiw3MCwyMzMsMTE5LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTM1LDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTIsMTI5LDE5MywyNTUsMCwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMSwxMiwyMzUsMjMsMTQxLDExOCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMjMsMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMsMTIyLDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIKK2RiIDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMTEwLDI1NSwyNTUsMjU1CitkYiAxMzEsMjQ5LDYsMTUsMTQ5LDE5MiwxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQKK2RiIDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNgorZGIgMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1CitkYiAyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE0NAorCitwdWJsaWMgX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw1NSw0NCwxNCwyMzUsNjIsNSwyNTUsMCwwLDAsMTQxCitkYiA4NCw2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDc4LDIsMCwwLDEzOCwzMCw3MAorZGIgOCwyMTksMTE2LDIzMCwxNDEsNjgsMjQsMjEsMjM1LDMwLDE0MSwxODIsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDQ5LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTE5LDgsMTkyLDExNiwyMTYsMTMxLDE5Miw2LDE0MSw4NCw3LDI1Myw1NywyMCwzNiwxNQorZGIgMTMwLDI5LDIsMCwwLDE0MSw4NCw2LDI1Myw1Nyw4NCwzNiw0LDE1LDEzMCw4CitkYiAyLDAsMCwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOSwyMiwxMzEsMTk4CitkYiA0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5LDEzOCw2LDcwCitkYiA2MCwxNiwxMTUsNTIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIyNiwxLDAsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMjA2LDEsMCwwLDEzOSwxMCwxMzcsMTUsMQorZGIgMjM5LDIzMywxNTEsMCwwLDAsMTM3LDI0Niw2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOCwzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwCitkYiA0MSwxOTQsMTMxLDE5Myw0LDU3LDIzMiwxMTUsNzMsMjMzLDE3MCwwLDAsMCw1LDI1NQorZGIgMCwwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTIzLDEsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzYsNDksMTkyLDIzNSwxNywxNDQKK2RiIDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAsMTMxLDIyNCwzMSwxMTYsMjI3LDE0MSw3Miw1CitkYiAxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIKK2RiIDExNCwxMDIsNTksODQsMzYsNDgsMTUsMTMwLDc3LDEsMCwwLDE0MSw2OCwxNSwyNTMKK2RiIDE5MywyMzMsMiw1Nyw0LDM2LDE1LDEzMCw1NCwxLDAsMCwxMzksMjYsMTMxLDE5NAorZGIgNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwLDI1NAorZGIgMzMsMjMyLDE1LDEzMiwyMTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcsMjAsMzYsMTUsMTMwCitkYiAxNCwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1LDEzMCwyNTAsMCwwCitkYiAwLDEzOSwyMiwxLDE5OCwxMzcsMjMsMSwxOTksMTM4LDYsNzAsMjMzLDU1LDI1NSwyNTUKK2RiIDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAsNTksODQsMzYsNDgsMTUsMTMwLDIzMSwwCitkYiAwLDAsMTQxLDY4LDE1LDI1Myw1Nyw0LDM2LDE1LDEzMCwyMTEsMCwwLDAsMTM1CitkYiAyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMTY0LDEyOSwxOTMsMjU1LDAsMCwwLDE0MQorZGIgODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxNzUsMCwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw3NiwxMSwxMiwyMzUsMjcsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMTksMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMsMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2LDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcKK2RiIDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMzEsMjU1LDI1NSwyNTUsMTMxLDI0OQorZGIgNiwxNSwxNDksMTkyLDU5LDYwLDM2LDExOSw1NywxMzksODQsMzYsNDAsMyw4NCwzNgorZGIgNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcKK2RiIDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMAorZGIgMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMAorZGIgMjM1LDIxMywxODQsNSwwLDAsMCwyMzUsMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTkKKworcHVibGljIF9sem8xeF9kZWNvbXByZXNzX2FzbQorX2x6bzF4X2RlY29tcHJlc3NfYXNtOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMzUKK2RiIDQ0LDE3LDYwLDQsMTE1LDQwLDEzNywxOTMsMjM1LDU2LDUsMjU1LDAsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNjgsMjQsMTgsMjM1LDE4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDczLDgsMTkyLDExNiwyMjgsMTMxLDE5MiwzLDEzNywxOTMKK2RiIDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDcyCitkYiAxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDM3LDE5MywyMzIsMiwxMzgsMzAKK2RiIDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcKK2RiIDEzOCw2NiwxLDEzNiw3MSwxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzNSwxMTkKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDY1LDU3LDIzMiwxMTUsNTUsMjM1CitkYiAxMTksNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2LDI0CitkYiAzMyw0OSwxOTIsMjM1LDE1LDE0MSwxMTgsMCw2MCwzMiwxMTQsMTI0LDEzMSwyMjQsMzEsMTE2CitkYiAyMjksMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNjYsMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMQorZGIgMTk0LDQsMTM3LDcsMTMxLDE5OSw0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyCitkYiA2NiwxMzYsNyw3MSw3MywxMTcsMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiw0NiwyNTUKK2RiIDI1NSwyNTUsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2LDcwLDIzMywxMDkKK2RiIDI1NSwyNTUsMjU1LDE0NCwxNDEsMTE2LDM4LDAsMTM1LDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDIxNQorZGIgMTI5LDE5MywyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExCitkYiA5LDIzNSwyNSwxNDQsMTQxLDExNiwzOCwwLDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyMSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMworZGIgMTE0LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEKK2RiIDEzMSwxOTksMiwyMzMsMTExLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDEzOSw4NAorZGIgMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgKK2RiIDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1CitkYiA5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwCitkYiAxODQsNCwwLDAsMCwyMzUsMjEzLDEzNywyNDYsMTQxLDE4OCwzOSwwLDAsMCwwCisKK3B1YmxpYyBfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZQorX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmU6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDQ5LDE5Miw0OQorZGIgMjE5LDE3Miw2MCwxNywxMTgsODcsNDQsMTcsNjAsNCwxMTUsOTIsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwxMzAsMiwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDExMCwyLDAsMCwxMzcsMTkzLDIzNSwxMTAsNSwyNTUsMCwwLDAsMTQxLDg0CitkYiA2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDg3LDIsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNjgsMjQsMTgsMjM1LDMxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDU3LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTI3LDgsMTkyLDExNiwyMTUsMTMxLDE5MiwzLDE0MSw4NCw3LDAsNTcsMjAsMzYsMTUKK2RiIDEzMCwzNywyLDAsMCwxNDEsODQsNiwwLDU3LDg0LDM2LDQsMTUsMTMwLDE2CitkYiAyLDAsMCwxMzcsMTkzLDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcKK2RiIDIzLDEzMSwxOTksNCw3MiwxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDY0CitkYiAxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjM4LDEsMCwwLDE5MywyMzIsMiwxMzgKK2RiIDMwLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYKK2RiIDQ4LDE1LDEzMCwyMTgsMSwwLDAsMTM4LDIsMTM2LDcsMTM4LDY2LDEsMTM2LDcxCitkYiAxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzMywxNjMsMCwwLDAsMTM3LDI0NgorZGIgNjAsNjQsMTE0LDY4LDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOAorZGIgMzAsMTkzLDIzMyw1LDE0MSw0LDIxNiw3MCw0MSwxOTQsNjUsNTcsMjMyLDExNSw3NSwyMzMKK2RiIDE4MCwwLDAsMCw1LDI1NSwwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0CitkYiAxNSwxMzAsMTI1LDEsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNAorZGIgMzMsNDksMTkyLDIzNSwxOSwxNDEsMTE4LDAsNjAsMzIsMTUsMTMwLDIwMCwwLDAsMAorZGIgMTMxLDIyNCwzMSwxMTYsMjI1LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIKK2RiIDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIsMTE0LDExMCw1OSw4NCwzNiw0OCwxNSwxMzAKK2RiIDc3LDEsMCwwLDE0MSw0LDE1LDU3LDQsMzYsMTUsMTMwLDU4LDEsMCwwCitkYiAxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxLDE5NCw0LDEzNyw3LDEzMSwxOTkKK2RiIDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIsNjYsMTM2LDcsNzEsNzMsMTE3CitkYiAyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDE5NiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDIsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDIzOCwwLDAsMCwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYKK2RiIDcwLDIzMyw0MiwyNTUsMjU1LDI1NSwxMzcsMjQ2LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMjMsMAorZGIgMCwwLDE0MSw2OCwxNSwwLDU3LDQsMzYsMTUsMTMwLDIwMywwLDAsMCwxMzUKK2RiIDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDE3MCwxMjksMTkzLDI1NSwwLDAsMCwxNDEsODYsMworZGIgNTcsODQsMzYsNCwxNSwxMzAsMTY5LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYKK2RiIDIzMCwxNDEsNzYsMTEsOSwyMzUsMjEsMTQ0LDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyNSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMworZGIgMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0CitkYiAzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OQorZGIgMiwyMzMsNDMsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5CitkYiA1NywxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MworZGIgMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5CitkYiA5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAKK2RiIDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNQorZGIgMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTksMTQ0LDE0MSwxODAsMzgsMCwwLDAsMAorCitwdWJsaWMgX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QKK19sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0OgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMjcKK2RiIDQ0LDE0LDIzNSwzNCw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NAorZGIgMTQxLDY4LDI0LDIxLDIzNSwxNiwxMzcsMjQ2LDEzOCw2LDcwLDYwLDE2LDExNSw2NSw4CitkYiAxOTIsMTE2LDIzMCwxMzEsMTkyLDYsMTM3LDE5Myw0OSwyMzIsMTkzLDIzMywyLDMzLDIzMiwxMzkKK2RiIDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDczLDExNywyNDMsNDEsMTk4LDQxLDE5OQorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDI1LDE5MywyMzIsMiwxMzgsMzAsMTQxLDE1MSwyNTUsMjUxCitkYiAyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM5LDEwLDEzNywxNSwxLDIzOSwyMzUsMTEwCitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzEsMTkzLDIsNTcsMjMyLDExNSw1NAorZGIgMjM1LDExMCw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYKK2RiIDI0LDM2LDQ5LDE5MiwyMzUsMTQsMTM3LDI0Niw2MCwzMiwxMTQsMTE2LDEzMSwyMjQsMzEsMTE2CitkYiAyMzAsMTQxLDcyLDUsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNTgsMTQxLDY4LDE1LDI1MywxOTMsMjMzLDIsMTM5LDI2LDEzMQorZGIgMTk0LDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MAorZGIgMjU0LDMzLDIzMiwxNSwxMzIsNjMsMjU1LDI1NSwyNTUsMTM5LDIyLDEsMTk4LDEzNywyMywxCitkYiAxOTksMTM4LDYsNzAsMjMzLDExOSwyNTUsMjU1LDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDEzNSwyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMjEyLDEyOSwxOTMsMjU1LDAsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEsMTIsMjM1LDIzLDE0MSwxMTgsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjIzLDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzLDEyMiwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyCitkYiAxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDExMCwyNTUsMjU1LDI1NQorZGIgMTMxLDI0OSw2LDE1LDE0OSwxOTIsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0CitkYiAxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYKK2RiIDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNQorZGIgMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxNDQKKworcHVibGljIF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKK19sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmU6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDQ5LDE5Miw0OQorZGIgMjE5LDE3Miw2MCwxNywxMTgsNTUsNDQsMTQsMjM1LDYyLDUsMjU1LDAsMCwwLDE0MQorZGIgODQsNiwxOCw1Nyw4NCwzNiw0LDE1LDEzMCw3OCwyLDAsMCwxMzgsMzAsNzAKK2RiIDgsMjE5LDExNiwyMzAsMTQxLDY4LDI0LDIxLDIzNSwzMCwxNDEsMTgyLDAsMCwwLDAKK2RiIDU3LDExNiwzNiw0LDE1LDEzMCw0OSwyLDAsMCwxMzgsNiw3MCw2MCwxNiwxMTUKK2RiIDExOSw4LDE5MiwxMTYsMjE2LDEzMSwxOTIsNiwxNDEsODQsNywyNTMsNTcsMjAsMzYsMTUKK2RiIDEzMCwyOSwyLDAsMCwxNDEsODQsNiwyNTMsNTcsODQsMzYsNCwxNSwxMzAsOAorZGIgMiwwLDAsMTM3LDE5Myw0OSwyMzIsMTkzLDIzMywyLDMzLDIzMiwxMzksMjIsMTMxLDE5OAorZGIgNCwxMzcsMjMsMTMxLDE5OSw0LDczLDExNywyNDMsNDEsMTk4LDQxLDE5OSwxMzgsNiw3MAorZGIgNjAsMTYsMTE1LDUyLDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMjYsMSwwLDAKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDE1MSwyNTUsMjUxLDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxCitkYiAxOTQsNTksODQsMzYsNDgsMTUsMTMwLDIwNiwxLDAsMCwxMzksMTAsMTM3LDE1LDEKK2RiIDIzOSwyMzMsMTUxLDAsMCwwLDEzNywyNDYsNjAsNjQsMTE0LDY4LDEzNywxOTMsMTkzLDIzMgorZGIgMiwxNDEsODcsMjU1LDMzLDIzMiwxMzgsMzAsMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDEzMSwxOTMsMiw1NywyMzIsMTE1LDc0LDIzMywxNzEsMCwwLDAsNSwyNTUsMAorZGIgMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDEyNCwxLDAsMCwxMzgKK2RiIDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0LDM2LDQ5LDE5MiwyMzUsMTgsMTM3LDI0NgorZGIgNjAsMzIsMTUsMTMwLDIwMCwwLDAsMCwxMzEsMjI0LDMxLDExNiwyMjYsMTQxLDcyLDUKK2RiIDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMgorZGIgMTE0LDEwMiw1OSw4NCwzNiw0OCwxNSwxMzAsNzcsMSwwLDAsMTQxLDY4LDE1LDI1MworZGIgMTkzLDIzMywyLDU3LDQsMzYsMTUsMTMwLDU0LDEsMCwwLDEzOSwyNiwxMzEsMTk0CitkYiA0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAsMjU0CitkYiAzMywyMzIsMTUsMTMyLDIxNiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NywyMCwzNiwxNSwxMzAKK2RiIDE0LDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUsMTMwLDI1MCwwLDAKK2RiIDAsMTM5LDIyLDEsMTk4LDEzNywyMywxLDE5OSwxMzgsNiw3MCwyMzMsNTUsMjU1LDI1NQorZGIgMjU1LDE0MSwxODAsMzgsMCwwLDAsMCw1OSw4NCwzNiw0OCwxNSwxMzAsMjMxLDAKK2RiIDAsMCwxNDEsNjgsMTUsMjUzLDU3LDQsMzYsMTUsMTMwLDIxMSwwLDAsMCwxMzUKK2RiIDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNjQsMTI5LDE5MywyNTUsMCwwLDAsMTQxCitkYiA4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDE3NSwwLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDc2LDExLDEyLDIzNSwyNywxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIxOSwxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMywzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNworZGIgMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywzMSwyNTUsMjU1LDI1NSwxMzEsMjQ5CitkYiA2LDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2CitkYiA0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNworZGIgNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwCitkYiAwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwCitkYiAyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OQorCitwdWJsaWMgX2x6bzF5X2RlY29tcHJlc3NfYXNtCitfbHpvMXlfZGVjb21wcmVzc19hc206CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwzNQorZGIgNDQsMTcsNjAsNCwxMTUsNDAsMTM3LDE5MywyMzUsNTYsNSwyNTUsMCwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw2OCwyNCwxOCwyMzUsMTgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsNzMsOCwxOTIsMTE2LDIyOCwxMzEsMTkyLDMsMTM3LDE5MworZGIgMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzIKK2RiIDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsMzcsMTkzLDIzMiwyLDEzOCwzMAorZGIgMTQxLDE1MSwyNTUsMjUxLDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNworZGIgMTM4LDY2LDEsMTM2LDcxLDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjM1LDExOQorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsNzMsNTcsMjMyLDExNSw1NiwyMzUsMTIwCitkYiA1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYsMjQsMzMKK2RiIDQ5LDE5MiwyMzUsMTYsMTQxLDExNiwzOCwwLDYwLDMyLDExNCwxMjQsMTMxLDIyNCwzMSwxMTYKK2RiIDIyOCwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw2NiwxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxCitkYiAxOTQsNCwxMzcsNywxMzEsMTk5LDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIKK2RiIDY2LDEzNiw3LDcxLDczLDExNywyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDQ2LDI1NQorZGIgMjU1LDI1NSwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYsNzAsMjMzLDEwOQorZGIgMjU1LDI1NSwyNTUsMTQ0LDE0MSwxMTYsMzgsMCwxMzUsMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMjE1CitkYiAxMjksMTkzLDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEKK2RiIDksMjM1LDI1LDE0NCwxNDEsMTE2LDM4LDAsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjIxLDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzCitkYiAxMTQsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMQorZGIgMTMxLDE5OSwyLDIzMywxMTEsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsMTM5LDg0CitkYiAzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OAorZGIgMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUKK2RiIDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAKK2RiIDE4NCw0LDAsMCwwLDIzNSwyMTMsMTM3LDI0NiwxNDEsMTg4LDM5LDAsMCwwLDAKKworcHVibGljIF9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlCitfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw4Nyw0NCwxNyw2MCw0LDExNSw5MiwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDEzMCwyLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTEwLDIsMCwwLDEzNywxOTMsMjM1LDExMCw1LDI1NSwwLDAsMCwxNDEsODQKK2RiIDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsODcsMiwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwxOCwyMzUsMzEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNTcsMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMjcsOCwxOTIsMTE2LDIxNSwxMzEsMTkyLDMsMTQxLDg0LDcsMCw1NywyMCwzNiwxNQorZGIgMTMwLDM3LDIsMCwwLDE0MSw4NCw2LDAsNTcsODQsMzYsNCwxNSwxMzAsMTYKK2RiIDIsMCwwLDEzNywxOTMsMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNworZGIgMjMsMTMxLDE5OSw0LDcyLDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsNjQKK2RiIDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMzgsMSwwLDAsMTkzLDIzMiwyLDEzOAorZGIgMzAsMTQxLDE1MSwyNTUsMjUxLDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNgorZGIgNDgsMTUsMTMwLDIxOCwxLDAsMCwxMzgsMiwxMzYsNywxMzgsNjYsMSwxMzYsNzEKK2RiIDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjMzLDE2MywwLDAsMCwxMzcsMjQ2CitkYiA2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCw3Myw1NywyMzIsMTE1LDc2LDIzMywxODEKK2RiIDAsMCwwLDUsMjU1LDAsMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwxMjYsMSwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0LDMzCitkYiA0OSwxOTIsMjM1LDIwLDE0MSwxMTYsMzgsMCw2MCwzMiwxNSwxMzAsMjAwLDAsMCwwCitkYiAxMzEsMjI0LDMxLDExNiwyMjQsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMgorZGIgMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMiwxMTQsMTEwLDU5LDg0LDM2LDQ4LDE1LDEzMAorZGIgNzcsMSwwLDAsMTQxLDQsMTUsNTcsNCwzNiwxNSwxMzAsNTgsMSwwLDAKK2RiIDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEsMTk0LDQsMTM3LDcsMTMxLDE5OQorZGIgNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMiw2NiwxMzYsNyw3MSw3MywxMTcKK2RiIDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsMTk2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMiwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMjM4LDAsMCwwLDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNgorZGIgNzAsMjMzLDQyLDI1NSwyNTUsMjU1LDEzNywyNDYsNTksODQsMzYsNDgsMTUsMTMwLDIyMywwCitkYiAwLDAsMTQxLDY4LDE1LDAsNTcsNCwzNiwxNSwxMzAsMjAzLDAsMCwwLDEzNQorZGIgMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMTcwLDEyOSwxOTMsMjU1LDAsMCwwLDE0MSw4NiwzCitkYiA1Nyw4NCwzNiw0LDE1LDEzMCwxNjksMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNgorZGIgMjMwLDE0MSw3NiwxMSw5LDIzNSwyMSwxNDQsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjI1LDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzCitkYiAzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNgorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQKK2RiIDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5CitkYiAyLDIzMyw0MywyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTkKK2RiIDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzCitkYiAxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODkKK2RiIDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMAorZGIgMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1CitkYiAyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDQsMTQxLDE4MCwzOCwwLDAsMCwwCisKK2VuZApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vYXNtaW5pdC5kZWYgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9hc21pbml0LmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2ZiN2E5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vYXNtaW5pdC5kZWYKQEAgLTAsMCArMSw1MCBAQAorOyAgYXNtaW5pdC5kZWYgLS0KKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCisuMzg2cAorLm1vZGVsIGZsYXQKKy5jb2RlCisKK2lmZGVmIF9fTUFTTV9fCitvcHRpb24gY2FzZW1hcDpub25lCitlbmRpZgoraWZkZWYgX19UQVNNX18KK2VuZGlmCitpZmRlZiBfX1dBU01fXworZW5kaWYKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFjX3MxLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFjX3MxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGU4MTZhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMWNfczEuYXNtCkBAIC0wLDAgKzEsNjMgQEAKKzsgIGx6bzFjX3MxLmFzbSAtLSBsem8xY19kZWNvbXByZXNzX2FzbQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKK2luY2x1ZGUgYXNtaW5pdC5kZWYKK3B1YmxpYyBfbHpvMWNfZGVjb21wcmVzc19hc20KK19sem8xY19kZWNvbXByZXNzX2FzbToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQ0LDQ5LDE5MiwxMzgsNiw3MCw2MCwzMiwxMTUKK2RiIDE1LDgsMTkyLDExNiw1MSwxMzcsMTkzLDI0MywxNjQsMTM4LDYsNzAsNjAsMzIsMTE0LDcyCitkYiA2MCw2NCwxMTQsOTMsMTM3LDE5MywzNiwzMSwxNDEsODcsMjU1LDE5MywyMzMsNSw0MSwxOTQKK2RiIDEzOCw2LDcwLDE5MywyMjQsNSw0MSwxOTQsNjUsMTM1LDI0MiwyNDMsMTY0LDEzNywyMTQsMjM1CitkYiAxOTksMTQxLDE4MCwzOCwwLDAsMCwwLDEzOCw2LDcwLDE0MSw3MiwzMiw2MCwyNDgKK2RiIDExNCwxOTcsMTg1LDI0LDEsMCwwLDQ0LDI0OCwxMTYsNiwxNDUsNDgsMTkyLDIxMSwyMjQKK2RiIDE0NSwyNDMsMTY0LDIzNSwxNjMsMTQxLDExOCwwLDE0MSw4NywyNTUsNDEsMTk0LDEzOCw2LDcwCitkYiAxOTMsMjI0LDUsNDEsMTk0LDEzNSwyNDIsMTY0LDE2NCwxNjQsMTM3LDIxNCwxNjQsNDksMTkyLDIzNQorZGIgMTUyLDM2LDMxLDEzNywxOTMsMTE3LDE5LDE3NywzMSwxMzgsNiw3MCw4LDE5MiwxMTcsOAorZGIgMTI5LDE5MywyNTUsMCwwLDAsMjM1LDI0MSwxLDE5MywxMzgsNiw3MCwxMzcsMTk1LDM2CitkYiA2MywxMzcsMjUwLDQxLDE5NCwxMzgsNiw3MCwxOTMsMjI0LDYsNDEsMTk0LDU3LDI1MCwxMTYKK2RiIDI3LDEzNSwyMTQsMTQxLDczLDMsMjQzLDE2NCwxMzcsMjE0LDQ5LDE5MiwxOTMsMjM1LDYsMTM3CitkYiAyMTcsMTUsMTMzLDgwLDI1NSwyNTUsMjU1LDIzMyw2MCwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUKK2RiIDE0OSwxOTIsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjkKK2RiIDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MAorZGIgODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMAorZGIgMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxNDQsMTQxLDExNiwzOCwwCitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFjX3MyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFjX3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNjMDczCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMWNfczIuYXNtCkBAIC0wLDAgKzEsNzQgQEAKKzsgIGx6bzFjX3MyLmFzbSAtLSBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworaW5jbHVkZSBhc21pbml0LmRlZgorcHVibGljIF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlCitfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1LDQwLDgsMTkyLDExNiw5OSwxMzcsMTkzLDE0MQorZGIgMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDEwNywxLDAsMCwxNDEsMjgsMTQsNTcsOTIKK2RiIDM2LDQsMTUsMTMwLDg3LDEsMCwwLDI0MywxNjQsMTM4LDYsNzAsNjAsMzIsMTE0CitkYiAxMjcsNjAsNjQsMTUsMTMwLDE2OSwwLDAsMCwxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUKK2RiIDE5MywyMzMsNSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyCitkYiA1OSwxMTYsMzYsNDgsMTUsMTMwLDUxLDEsMCwwLDE0MSwyOCwxNSw1NywyOCwzNgorZGIgMTUsMTMwLDMyLDEsMCwwLDI0MywxNjQsMTM3LDIxNCwyMzUsMTQ4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OCwxMTQsMTQ5LDE4NSwyNCwxLDAsMCw0NAorZGIgMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNCwxNDUsMTQxLDI4LDE1LDU3LDI4LDM2LDE1CitkYiAxMzAsMjQxLDAsMCwwLDE0MSwyOCwxNCw1Nyw5MiwzNiw0LDE1LDEzMCwyMjEsMAorZGIgMCwwLDI0MywxNjQsMjMzLDg3LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDU5CitkYiAxMTYsMzYsNDgsMTUsMTMwLDE5NiwwLDAsMCwxNDEsOTUsNCw1NywyOCwzNiwxNQorZGIgMTMwLDE3NywwLDAsMCwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjMzLDcyLDI1NQorZGIgMjU1LDI1NSwzNiwzMSwxMzcsMTkzLDExNywyNiwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3CitkYiAxNSwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNiw2MywxMzcsMjUwLDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2LDQxLDEzNSwyMTQsMTQxLDczLDMsNTksMTE2CitkYiAzNiw0OCwxMTQsMTA1LDE0MSw0LDE1LDU3LDQsMzYsMTE0LDkwLDI0MywxNjQsMTM3LDIxNAorZGIgNDksMTkyLDE5MywyMzUsNiwxMzcsMjE3LDE1LDEzMywyMTAsMjU0LDI1NSwyNTUsMjMzLDE5MCwyNTQKK2RiIDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNgorZGIgNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5CitkYiA4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzCitkYiAxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NAorZGIgNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMAorZGIgMCwwLDIzNSwxOTksMTQxLDE4MiwwLDAsMCwwLDE0MSwxOTEsMCwwLDAsMAorZW5kCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xZl9mMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xZl9mMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJhOTIyZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFmX2YxLmFzbQpAQCAtMCwwICsxLDY1IEBACis7ICBsem8xZl9mMS5hc20gLS0gbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdAorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKK2luY2x1ZGUgYXNtaW5pdC5kZWYKK3B1YmxpYyBfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdAorX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Q6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0NCw0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5CitkYiA1MSw4LDE5MiwxMzcsMTkzLDExNywxOSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzCitkYiAyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwxMzYsMjAwLDE5MywyMzMsMiwyNDMKK2RiIDE2NSwzNiwzLDExNiw4LDEzOSwzMCwxLDE5OCwxMzcsMzEsMSwxOTksMTM4LDYsNzAKK2RiIDYwLDMxLDExOCw4OCw2MCwyMjMsMTUsMTM1LDEzMiwwLDAsMCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwzNiw3LDE5MywyMzMsNSwxMzcsMTk1LDEzOCw2LDE0MSw0LDE5NQorZGIgNzAsNDEsMTk0LDEzMSwxOTMsMiwxMzUsMjE0LDEzMSwyNDksNiwxMTQsMTYsMTMxLDI0OCw0CitkYiAxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NSwzNiwzLDEzNiwxOTMsMjQzLDE2NCwxMzcKK2RiIDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIsMTIzLDI1NSwyNTUsMjU1LDEzOSw2LDEKK2RiIDIwNiwxMzcsNywxLDIwNyw0OSwxOTIsMTM4LDYsNzAsMjM1LDE2NCwxOTMsMjMyLDIsMTQxCitkYiAxNTEsMjU1LDI0NywyNTUsMjU1LDEzNywxOTMsMTM4LDYsNzAsMTQxLDQsMTkzLDQxLDE5NCwxMzkKK2RiIDIsMTM3LDcsMTMxLDE5OSwzLDIzNSwyMDEsMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5CitkYiAxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMjM1LDksMTQxLDExOCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjYsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDEyMiwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5MiwxMzksODQsMzYKK2RiIDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOQorZGIgODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MworZGIgMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQKK2RiIDQsMCwwLDAsMjM1LDIxMywxNDEsMTE4LDAsMTQxLDE4OCwzOSwwLDAsMCwwCitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFmX2YyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzFmX2YyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOWU3ZDEwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMWZfZjIuYXNtCkBAIC0wLDAgKzEsNzIgQEAKKzsgIGx6bzFmX2YyLmFzbSAtLSBsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCitpbmNsdWRlIGFzbWluaXQuZGVmCitwdWJsaWMgX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5LDc2LDgsMTkyLDEzNywxOTMsMTE3LDE5LDEzOAorZGIgNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3NgorZGIgOCwzMSwxNDEsMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDYxLDEsMCwwLDE0MSwyOAorZGIgMTQsNTcsOTIsMzYsNCwxNSwxMzAsNDEsMSwwLDAsMTM2LDIwMCwxOTMsMjMzLDIKK2RiIDI0MywxNjUsMzYsMywxMTYsOCwxMzksMzAsMSwxOTgsMTM3LDMxLDEsMTk5LDEzOCw2CitkYiA3MCw2MCwzMSwxMTgsMTEwLDYwLDIyMywxNSwxMzUsMTc5LDAsMCwwLDEzNywxOTMsMTkzCitkYiAyMzIsMiwxNDEsODcsMjU1LDM2LDcsMTkzLDIzMyw1LDEzNywxOTUsMTM4LDYsMTQxLDQKK2RiIDE5NSw3MCw0MSwxOTQsMTMxLDE5MywyLDEzNSwyMTQsNTksMTE2LDM2LDQ4LDE1LDEzMCwyMzkKK2RiIDAsMCwwLDE0MSwyOCwxNSw1NywyOCwzNiwxNSwxMzAsMjIwLDAsMCwwLDEzMQorZGIgMjQ5LDYsMTE0LDE2LDEzMSwyNDgsNCwxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NQorZGIgMzYsMywxMzYsMTkzLDI0MywxNjQsMTM3LDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIKK2RiIDc2LDI1NSwyNTUsMjU1LDEzOSw2LDEsMjA2LDEzNyw3LDEsMjA3LDQ5LDE5MiwxMzgsNgorZGIgNzAsMjM1LDE0MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMTU2LDAsMCwwLDE5MworZGIgMjMyLDIsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTM3LDE5MywxMzgsNiw3MCwxNDEsNCwxOTMKK2RiIDQxLDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMTM0LDAsMCwwLDEzOSwyLDEzNyw3CitkYiAxMzEsMTk5LDMsMjM1LDE3OSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzLDI1NSwwCitkYiAwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwyMzUsMTIsMTQxLDE4MiwwLDAsMCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjMsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDc1LDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNSwxNDksMTkyLDU5LDYwLDM2CitkYiAxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjkKK2RiIDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MAorZGIgODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMAorZGIgMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMAorZGIgMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0MSwxODAsMzgsMCwwLDAsMAorZW5kCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xeF9mMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xeF9mMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjljZTMyNgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF4X2YxLmFzbQpAQCAtMCwwICsxLDczIEBACis7ICBsem8xeF9mMS5hc20gLS0gbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdAorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKK2luY2x1ZGUgYXNtaW5pdC5kZWYKK3B1YmxpYyBfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdAorX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Q6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwyNworZGIgNDQsMTQsMjM1LDM0LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0CitkYiAxNDEsNjgsMjQsMjEsMjM1LDE2LDEzNywyNDYsMTM4LDYsNzAsNjAsMTYsMTE1LDY1LDgKK2RiIDE5MiwxMTYsMjMwLDEzMSwxOTIsNiwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOQorZGIgMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5CitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsMjUsMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNDcKK2RiIDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzksMTAsMTM3LDE1LDEsMjM5LDIzNSwxMTAKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDEzMSwxOTMsNCw1NywyMzIsMTE1CitkYiA1MywyMzUsMTA5LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MQorZGIgNzYsMjQsMzYsNDksMTkyLDIzNSwxMywxNDQsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMxLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF4X2YyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF4X2YyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzllOTIwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXhfZjIuYXNtCkBAIC0wLDAgKzEsODggQEAKKzsgIGx6bzF4X2YyLmFzbSAtLSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCitpbmNsdWRlIGFzbWluaXQuZGVmCitwdWJsaWMgX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw1NSw0NCwxNCwyMzUsNjIsNSwyNTUsMCwwLDAsMTQxCitkYiA4NCw2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDc4LDIsMCwwLDEzOCwzMCw3MAorZGIgOCwyMTksMTE2LDIzMCwxNDEsNjgsMjQsMjEsMjM1LDMwLDE0MSwxODIsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDQ5LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTE5LDgsMTkyLDExNiwyMTYsMTMxLDE5Miw2LDE0MSw4NCw3LDI1Myw1NywyMCwzNiwxNQorZGIgMTMwLDI5LDIsMCwwLDE0MSw4NCw2LDI1Myw1Nyw4NCwzNiw0LDE1LDEzMCw4CitkYiAyLDAsMCwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOSwyMiwxMzEsMTk4CitkYiA0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5LDEzOCw2LDcwCitkYiA2MCwxNiwxMTUsNTIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIyNiwxLDAsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMjA2LDEsMCwwLDEzOSwxMCwxMzcsMTUsMQorZGIgMjM5LDIzMywxNTEsMCwwLDAsMTM3LDI0Niw2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOCwzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwCitkYiA0MSwxOTQsMTMxLDE5Myw0LDU3LDIzMiwxMTUsNzMsMjMzLDE3MCwwLDAsMCw1LDI1NQorZGIgMCwwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTIzLDEsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzYsNDksMTkyLDIzNSwxNywxNDQKK2RiIDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAsMTMxLDIyNCwzMSwxMTYsMjI3LDE0MSw3Miw1CitkYiAxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIKK2RiIDExNCwxMDIsNTksODQsMzYsNDgsMTUsMTMwLDc3LDEsMCwwLDE0MSw2OCwxNSwyNTMKK2RiIDE5MywyMzMsMiw1Nyw0LDM2LDE1LDEzMCw1NCwxLDAsMCwxMzksMjYsMTMxLDE5NAorZGIgNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwLDI1NAorZGIgMzMsMjMyLDE1LDEzMiwyMTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcsMjAsMzYsMTUsMTMwCitkYiAxNCwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1LDEzMCwyNTAsMCwwCitkYiAwLDEzOSwyMiwxLDE5OCwxMzcsMjMsMSwxOTksMTM4LDYsNzAsMjMzLDU1LDI1NSwyNTUKK2RiIDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAsNTksODQsMzYsNDgsMTUsMTMwLDIzMSwwCitkYiAwLDAsMTQxLDY4LDE1LDI1Myw1Nyw0LDM2LDE1LDEzMCwyMTEsMCwwLDAsMTM1CitkYiAyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMTY0LDEyOSwxOTMsMjU1LDAsMCwwLDE0MQorZGIgODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxNzUsMCwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw3NiwxMSwxMiwyMzUsMjcsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMTksMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMsMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2LDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcKK2RiIDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMzEsMjU1LDI1NSwyNTUsMTMxLDI0OQorZGIgNiwxNSwxNDksMTkyLDU5LDYwLDM2LDExOSw1NywxMzksODQsMzYsNDAsMyw4NCwzNgorZGIgNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcKK2RiIDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMAorZGIgMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMAorZGIgMjM1LDIxMywxODQsNSwwLDAsMCwyMzUsMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTkKK2VuZApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXhfczEuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXhfczEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDYwZmUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xeF9zMS5hc20KQEAgLTAsMCArMSw3NSBAQAorOyAgbHpvMXhfczEuYXNtIC0tIGx6bzF4X2RlY29tcHJlc3NfYXNtCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworaW5jbHVkZSBhc21pbml0LmRlZgorcHVibGljIF9sem8xeF9kZWNvbXByZXNzX2FzbQorX2x6bzF4X2RlY29tcHJlc3NfYXNtOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMzUKK2RiIDQ0LDE3LDYwLDQsMTE1LDQwLDEzNywxOTMsMjM1LDU2LDUsMjU1LDAsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNjgsMjQsMTgsMjM1LDE4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDczLDgsMTkyLDExNiwyMjgsMTMxLDE5MiwzLDEzNywxOTMKK2RiIDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDcyCitkYiAxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDM3LDE5MywyMzIsMiwxMzgsMzAKK2RiIDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcKK2RiIDEzOCw2NiwxLDEzNiw3MSwxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzNSwxMTkKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDY1LDU3LDIzMiwxMTUsNTUsMjM1CitkYiAxMTksNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2LDI0CitkYiAzMyw0OSwxOTIsMjM1LDE1LDE0MSwxMTgsMCw2MCwzMiwxMTQsMTI0LDEzMSwyMjQsMzEsMTE2CitkYiAyMjksMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNjYsMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMQorZGIgMTk0LDQsMTM3LDcsMTMxLDE5OSw0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyCitkYiA2NiwxMzYsNyw3MSw3MywxMTcsMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiw0NiwyNTUKK2RiIDI1NSwyNTUsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2LDcwLDIzMywxMDkKK2RiIDI1NSwyNTUsMjU1LDE0NCwxNDEsMTE2LDM4LDAsMTM1LDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDIxNQorZGIgMTI5LDE5MywyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExCitkYiA5LDIzNSwyNSwxNDQsMTQxLDExNiwzOCwwLDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyMSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMworZGIgMTE0LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEKK2RiIDEzMSwxOTksMiwyMzMsMTExLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDEzOSw4NAorZGIgMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgKK2RiIDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1CitkYiA5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwCitkYiAxODQsNCwwLDAsMCwyMzUsMjEzLDEzNywyNDYsMTQxLDE4OCwzOSwwLDAsMCwwCitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF4X3MyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF4X3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGYwNzRlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXhfczIuYXNtCkBAIC0wLDAgKzEsOTEgQEAKKzsgIGx6bzF4X3MyLmFzbSAtLSBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworaW5jbHVkZSBhc21pbml0LmRlZgorcHVibGljIF9sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlCitfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw4Nyw0NCwxNyw2MCw0LDExNSw5MiwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDEzMCwyLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTEwLDIsMCwwLDEzNywxOTMsMjM1LDExMCw1LDI1NSwwLDAsMCwxNDEsODQKK2RiIDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsODcsMiwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwxOCwyMzUsMzEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNTcsMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMjcsOCwxOTIsMTE2LDIxNSwxMzEsMTkyLDMsMTQxLDg0LDcsMCw1NywyMCwzNiwxNQorZGIgMTMwLDM3LDIsMCwwLDE0MSw4NCw2LDAsNTcsODQsMzYsNCwxNSwxMzAsMTYKK2RiIDIsMCwwLDEzNywxOTMsMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNworZGIgMjMsMTMxLDE5OSw0LDcyLDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsNjQKK2RiIDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMzgsMSwwLDAsMTkzLDIzMiwyLDEzOAorZGIgMzAsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNgorZGIgNDgsMTUsMTMwLDIxOCwxLDAsMCwxMzgsMiwxMzYsNywxMzgsNjYsMSwxMzYsNzEKK2RiIDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjMzLDE2MywwLDAsMCwxMzcsMjQ2CitkYiA2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCw2NSw1NywyMzIsMTE1LDc1LDIzMworZGIgMTgwLDAsMCwwLDUsMjU1LDAsMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQKK2RiIDE1LDEzMCwxMjUsMSwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0CitkYiAzMyw0OSwxOTIsMjM1LDE5LDE0MSwxMTgsMCw2MCwzMiwxNSwxMzAsMjAwLDAsMCwwCitkYiAxMzEsMjI0LDMxLDExNiwyMjUsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMgorZGIgMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMiwxMTQsMTEwLDU5LDg0LDM2LDQ4LDE1LDEzMAorZGIgNzcsMSwwLDAsMTQxLDQsMTUsNTcsNCwzNiwxNSwxMzAsNTgsMSwwLDAKK2RiIDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEsMTk0LDQsMTM3LDcsMTMxLDE5OQorZGIgNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMiw2NiwxMzYsNyw3MSw3MywxMTcKK2RiIDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsMTk2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMiwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMjM4LDAsMCwwLDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNgorZGIgNzAsMjMzLDQyLDI1NSwyNTUsMjU1LDEzNywyNDYsNTksODQsMzYsNDgsMTUsMTMwLDIyMywwCitkYiAwLDAsMTQxLDY4LDE1LDAsNTcsNCwzNiwxNSwxMzAsMjAzLDAsMCwwLDEzNQorZGIgMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMTcwLDEyOSwxOTMsMjU1LDAsMCwwLDE0MSw4NiwzCitkYiA1Nyw4NCwzNiw0LDE1LDEzMCwxNjksMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNgorZGIgMjMwLDE0MSw3NiwxMSw5LDIzNSwyMSwxNDQsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjI1LDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzCitkYiAzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNgorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQKK2RiIDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5CitkYiAyLDIzMyw0MywyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTkKK2RiIDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzCitkYiAxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODkKK2RiIDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMAorZGIgMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1CitkYiAyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDQsMTQxLDE4MCwzOCwwLDAsMCwwCitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X2YxLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X2YxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzhkNzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXlfZjEuYXNtCkBAIC0wLDAgKzEsNzMgQEAKKzsgIGx6bzF5X2YxLmFzbSAtLSBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0Cis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworaW5jbHVkZSBhc21pbml0LmRlZgorcHVibGljIF9sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0CitfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdDoKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDI3CitkYiA0NCwxNCwyMzUsMzQsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQKK2RiIDE0MSw2OCwyNCwyMSwyMzUsMTYsMTM3LDI0NiwxMzgsNiw3MCw2MCwxNiwxMTUsNjUsOAorZGIgMTkyLDExNiwyMzAsMTMxLDE5Miw2LDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5CitkYiAyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTkKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSwyNSwxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI1MQorZGIgMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOSwxMCwxMzcsMTUsMSwyMzksMjM1LDExMAorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNTQKK2RiIDIzNSwxMTAsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2CitkYiAyNCwzNiw0OSwxOTIsMjM1LDE0LDEzNywyNDYsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMwLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X2YyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X2YyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTc1YTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXlfZjIuYXNtCkBAIC0wLDAgKzEsODggQEAKKzsgIGx6bzF5X2YyLmFzbSAtLSBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCitpbmNsdWRlIGFzbWluaXQuZGVmCitwdWJsaWMgX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw1NSw0NCwxNCwyMzUsNjIsNSwyNTUsMCwwLDAsMTQxCitkYiA4NCw2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDc4LDIsMCwwLDEzOCwzMCw3MAorZGIgOCwyMTksMTE2LDIzMCwxNDEsNjgsMjQsMjEsMjM1LDMwLDE0MSwxODIsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDQ5LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTE5LDgsMTkyLDExNiwyMTYsMTMxLDE5Miw2LDE0MSw4NCw3LDI1Myw1NywyMCwzNiwxNQorZGIgMTMwLDI5LDIsMCwwLDE0MSw4NCw2LDI1Myw1Nyw4NCwzNiw0LDE1LDEzMCw4CitkYiAyLDAsMCwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOSwyMiwxMzEsMTk4CitkYiA0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5LDEzOCw2LDcwCitkYiA2MCwxNiwxMTUsNTIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIyNiwxLDAsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMjA2LDEsMCwwLDEzOSwxMCwxMzcsMTUsMQorZGIgMjM5LDIzMywxNTEsMCwwLDAsMTM3LDI0Niw2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMCwxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxCitkYiAxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNzQsMjMzLDE3MSwwLDAsMCw1LDI1NSwwCitkYiAwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTI0LDEsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzYsNDksMTkyLDIzNSwxOCwxMzcsMjQ2CitkYiA2MCwzMiwxNSwxMzAsMjAwLDAsMCwwLDEzMSwyMjQsMzEsMTE2LDIyNiwxNDEsNzIsNQorZGIgMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyCitkYiAxMTQsMTAyLDU5LDg0LDM2LDQ4LDE1LDEzMCw3NywxLDAsMCwxNDEsNjgsMTUsMjUzCitkYiAxOTMsMjMzLDIsNTcsNCwzNiwxNSwxMzAsNTQsMSwwLDAsMTM5LDI2LDEzMSwxOTQKK2RiIDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MCwyNTQKK2RiIDMzLDIzMiwxNSwxMzIsMjE2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3LDIwLDM2LDE1LDEzMAorZGIgMTQsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNSwxMzAsMjUwLDAsMAorZGIgMCwxMzksMjIsMSwxOTgsMTM3LDIzLDEsMTk5LDEzOCw2LDcwLDIzMyw1NSwyNTUsMjU1CitkYiAyNTUsMTQxLDE4MCwzOCwwLDAsMCwwLDU5LDg0LDM2LDQ4LDE1LDEzMCwyMzEsMAorZGIgMCwwLDE0MSw2OCwxNSwyNTMsNTcsNCwzNiwxNSwxMzAsMjExLDAsMCwwLDEzNQorZGIgMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDE2NCwxMjksMTkzLDI1NSwwLDAsMCwxNDEKK2RiIDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTc1LDAsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNzYsMTEsMTIsMjM1LDI3LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjE5LDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzLDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMAorZGIgMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNiwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3CitkYiAxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDMxLDI1NSwyNTUsMjU1LDEzMSwyNDkKK2RiIDYsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYKK2RiIDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3CitkYiA1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAKK2RiIDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAKK2RiIDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5CitlbmQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X3MxLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X3MxLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2M0NmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX21hc20vbHpvMXlfczEuYXNtCkBAIC0wLDAgKzEsNzUgQEAKKzsgIGx6bzF5X3MxLmFzbSAtLSBsem8xeV9kZWNvbXByZXNzX2FzbQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKK2luY2x1ZGUgYXNtaW5pdC5kZWYKK3B1YmxpYyBfbHpvMXlfZGVjb21wcmVzc19hc20KK19sem8xeV9kZWNvbXByZXNzX2FzbToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDM1CitkYiA0NCwxNyw2MCw0LDExNSw0MCwxMzcsMTkzLDIzNSw1Niw1LDI1NSwwLDAsMCwxMzgKK2RiIDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDY4LDI0LDE4LDIzNSwxOCwxNDEsMTE2LDM4LDAKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSw3Myw4LDE5MiwxMTYsMjI4LDEzMSwxOTIsMywxMzcsMTkzCitkYiAxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MgorZGIgMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSwzNywxOTMsMjMyLDIsMTM4LDMwCitkYiAxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3CitkYiAxMzgsNjYsMSwxMzYsNzEsMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzUsMTE5CitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCw3Myw1NywyMzIsMTE1LDU2LDIzNSwxMjAKK2RiIDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw3NiwyNCwzMworZGIgNDksMTkyLDIzNSwxNiwxNDEsMTE2LDM4LDAsNjAsMzIsMTE0LDEyNCwxMzEsMjI0LDMxLDExNgorZGIgMjI4LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDY2LDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEKK2RiIDE5NCw0LDEzNyw3LDEzMSwxOTksNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMgorZGIgNjYsMTM2LDcsNzEsNzMsMTE3LDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsNDYsMjU1CitkYiAyNTUsMjU1LDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNiw3MCwyMzMsMTA5CitkYiAyNTUsMjU1LDI1NSwxNDQsMTQxLDExNiwzOCwwLDEzNSwyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTUKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMQorZGIgOSwyMzUsMjUsMTQ0LDE0MSwxMTYsMzgsMCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjEsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMKK2RiIDExNCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxCitkYiAxMzEsMTk5LDIsMjMzLDExMSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5MiwxMzksODQKK2RiIDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4CitkYiAxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NQorZGIgOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMAorZGIgMTg0LDQsMCwwLDAsMjM1LDIxMywxMzcsMjQ2LDE0MSwxODgsMzksMCwwLDAsMAorZW5kCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xeV9zMi5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbWFzbS9sem8xeV9zMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTk5ODk2NwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19tYXNtL2x6bzF5X3MyLmFzbQpAQCAtMCwwICsxLDkxIEBACis7ICBsem8xeV9zMi5hc20gLS0gbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKK2luY2x1ZGUgYXNtaW5pdC5kZWYKK3B1YmxpYyBfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmU6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDQ5LDE5Miw0OQorZGIgMjE5LDE3Miw2MCwxNywxMTgsODcsNDQsMTcsNjAsNCwxMTUsOTIsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwxMzAsMiwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDExMCwyLDAsMCwxMzcsMTkzLDIzNSwxMTAsNSwyNTUsMCwwLDAsMTQxLDg0CitkYiA2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDg3LDIsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNjgsMjQsMTgsMjM1LDMxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDU3LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTI3LDgsMTkyLDExNiwyMTUsMTMxLDE5MiwzLDE0MSw4NCw3LDAsNTcsMjAsMzYsMTUKK2RiIDEzMCwzNywyLDAsMCwxNDEsODQsNiwwLDU3LDg0LDM2LDQsMTUsMTMwLDE2CitkYiAyLDAsMCwxMzcsMTkzLDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcKK2RiIDIzLDEzMSwxOTksNCw3MiwxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDY0CitkYiAxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjM4LDEsMCwwLDE5MywyMzIsMiwxMzgKK2RiIDMwLDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYKK2RiIDQ4LDE1LDEzMCwyMTgsMSwwLDAsMTM4LDIsMTM2LDcsMTM4LDY2LDEsMTM2LDcxCitkYiAxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzMywxNjMsMCwwLDAsMTM3LDI0NgorZGIgNjAsNjQsMTE0LDY4LDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsNzMsNTcsMjMyLDExNSw3NiwyMzMsMTgxCitkYiAwLDAsMCw1LDI1NSwwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTI2LDEsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzMworZGIgNDksMTkyLDIzNSwyMCwxNDEsMTE2LDM4LDAsNjAsMzIsMTUsMTMwLDIwMCwwLDAsMAorZGIgMTMxLDIyNCwzMSwxMTYsMjI0LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIKK2RiIDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIsMTE0LDExMCw1OSw4NCwzNiw0OCwxNSwxMzAKK2RiIDc3LDEsMCwwLDE0MSw0LDE1LDU3LDQsMzYsMTUsMTMwLDU4LDEsMCwwCitkYiAxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxLDE5NCw0LDEzNyw3LDEzMSwxOTkKK2RiIDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIsNjYsMTM2LDcsNzEsNzMsMTE3CitkYiAyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDE5NiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDIsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDIzOCwwLDAsMCwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYKK2RiIDcwLDIzMyw0MiwyNTUsMjU1LDI1NSwxMzcsMjQ2LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMjMsMAorZGIgMCwwLDE0MSw2OCwxNSwwLDU3LDQsMzYsMTUsMTMwLDIwMywwLDAsMCwxMzUKK2RiIDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDE3MCwxMjksMTkzLDI1NSwwLDAsMCwxNDEsODYsMworZGIgNTcsODQsMzYsNCwxNSwxMzAsMTY5LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYKK2RiIDIzMCwxNDEsNzYsMTEsOSwyMzUsMjEsMTQ0LDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyNSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMworZGIgMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0CitkYiAzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OQorZGIgMiwyMzMsNDMsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5CitkYiA1NywxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MworZGIgMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5CitkYiA5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAKK2RiIDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNQorZGIgMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTksMTQ0LDE0MSwxODAsMzgsMCwwLDAsMAorZW5kCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9hbGwvYXNtX2FsbC5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9hbGwvYXNtX2FsbC5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3OTY1YQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2FsbC9hc21fYWxsLmFzbQpAQCAtMCwwICsxLDUwNSBAQAorOyAgYXNtX2FsbC5hc20gLS0KKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCislZGVmaW5lIEYobmFtZSkgbmFtZQorJWlmaWRuaSBfX09VVFBVVF9GT1JNQVRfXyxlbGYKKyVkZWZpbmUgZ2xvYmFsZih4KSBnbG9iYWwgeDpmdW5jdGlvbgorJWVsc2UKKyVkZWZpbmUgZ2xvYmFsZih4KSBnbG9iYWwgeAorJWVuZGlmCitiaXRzIDMyCislaWZpZG5pIF9fT1VUUFVUX0ZPUk1BVF9fLGVsZgorc2VjdGlvbiAubm90ZS5HTlUtc3RhY2sgbm9hbGxvYyBub2V4ZWMgbm93cml0ZSBwcm9nYml0cworJWVuZGlmCislaWZpZG5pIF9fT1VUUFVUX0ZPUk1BVF9fLG9iagorc2VnbWVudCBfVEVYVCBjbGFzcz1DT0RFIHB1YmxpYyB1c2UzMiBmbGF0IGFsaWduPTE2CislZWxzZQorc2VjdGlvbiAudGV4dAorJWVuZGlmCisKK2dsb2JhbGYoX2x6bzFjX2RlY29tcHJlc3NfYXNtKQorZ2xvYmFsZihGKGx6bzFjX2RlY29tcHJlc3NfYXNtKSkKK19sem8xY19kZWNvbXByZXNzX2FzbToKK0YobHpvMWNfZGVjb21wcmVzc19hc20pOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDQsNDksMTkyLDEzOCw2LDcwLDYwLDMyLDExNQorZGIgMTUsOCwxOTIsMTE2LDUxLDEzNywxOTMsMjQzLDE2NCwxMzgsNiw3MCw2MCwzMiwxMTQsNzIKK2RiIDYwLDY0LDExNCw5MywxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUsMTkzLDIzMyw1LDQxLDE5NAorZGIgMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyLDI0MywxNjQsMTM3LDIxNCwyMzUKK2RiIDE5OSwxNDEsMTgwLDM4LDAsMCwwLDAsMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OAorZGIgMTE0LDE5NywxODUsMjQsMSwwLDAsNDQsMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNAorZGIgMTQ1LDI0MywxNjQsMjM1LDE2MywxNDEsMTE4LDAsMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAKK2RiIDE5MywyMjQsNSw0MSwxOTQsMTM1LDI0MiwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjM1CitkYiAxNTIsMzYsMzEsMTM3LDE5MywxMTcsMTksMTc3LDMxLDEzOCw2LDcwLDgsMTkyLDExNyw4CitkYiAxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDEsMTkzLDEzOCw2LDcwLDEzNywxOTUsMzYKK2RiIDYzLDEzNywyNTAsNDEsMTk0LDEzOCw2LDcwLDE5MywyMjQsNiw0MSwxOTQsNTcsMjUwLDExNgorZGIgMjcsMTM1LDIxNCwxNDEsNzMsMywyNDMsMTY0LDEzNywyMTQsNDksMTkyLDE5MywyMzUsNiwxMzcKK2RiIDIxNywxNSwxMzMsODAsMjU1LDI1NSwyNTUsMjMzLDYwLDI1NSwyNTUsMjU1LDEzMSwyNDksMSwxNQorZGIgMTQ5LDE5MiwxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOQorZGIgNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwCitkYiA4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwCitkYiAwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE0NCwxNDEsMTE2LDM4LDAKKworZ2xvYmFsZihfbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSkKK2dsb2JhbGYoRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKSkKK19sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlOgorRihsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsMTQxLDExOCwwCitkYiA0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1LDQwLDgsMTkyLDExNiw5OSwxMzcsMTkzLDE0MQorZGIgMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDEwNywxLDAsMCwxNDEsMjgsMTQsNTcsOTIKK2RiIDM2LDQsMTUsMTMwLDg3LDEsMCwwLDI0MywxNjQsMTM4LDYsNzAsNjAsMzIsMTE0CitkYiAxMjcsNjAsNjQsMTUsMTMwLDE2OSwwLDAsMCwxMzcsMTkzLDM2LDMxLDE0MSw4NywyNTUKK2RiIDE5MywyMzMsNSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCw2NSwxMzUsMjQyCitkYiA1OSwxMTYsMzYsNDgsMTUsMTMwLDUxLDEsMCwwLDE0MSwyOCwxNSw1NywyOCwzNgorZGIgMTUsMTMwLDMyLDEsMCwwLDI0MywxNjQsMTM3LDIxNCwyMzUsMTQ4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsMTQxLDcyLDMyLDYwLDI0OCwxMTQsMTQ5LDE4NSwyNCwxLDAsMCw0NAorZGIgMjQ4LDExNiw2LDE0NSw0OCwxOTIsMjExLDIyNCwxNDUsMTQxLDI4LDE1LDU3LDI4LDM2LDE1CitkYiAxMzAsMjQxLDAsMCwwLDE0MSwyOCwxNCw1Nyw5MiwzNiw0LDE1LDEzMCwyMjEsMAorZGIgMCwwLDI0MywxNjQsMjMzLDg3LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTQxLDg3LDI1NSw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDU5CitkYiAxMTYsMzYsNDgsMTUsMTMwLDE5NiwwLDAsMCwxNDEsOTUsNCw1NywyOCwzNiwxNQorZGIgMTMwLDE3NywwLDAsMCwxNjQsMTY0LDE2NCwxMzcsMjE0LDE2NCw0OSwxOTIsMjMzLDcyLDI1NQorZGIgMjU1LDI1NSwzNiwzMSwxMzcsMTkzLDExNywyNiwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3CitkYiAxNSwxMjksMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNiw2MywxMzcsMjUwLDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2LDQxLDEzNSwyMTQsMTQxLDczLDMsNTksMTE2CitkYiAzNiw0OCwxMTQsMTA1LDE0MSw0LDE1LDU3LDQsMzYsMTE0LDkwLDI0MywxNjQsMTM3LDIxNAorZGIgNDksMTkyLDE5MywyMzUsNiwxMzcsMjE3LDE1LDEzMywyMTAsMjU0LDI1NSwyNTUsMjMzLDE5MCwyNTQKK2RiIDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNgorZGIgNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5CitkYiA4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzCitkYiAxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NAorZGIgNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMAorZGIgMCwwLDIzNSwxOTksMTQxLDE4MiwwLDAsMCwwLDE0MSwxOTEsMCwwLDAsMAorCitnbG9iYWxmKF9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0KQorZ2xvYmFsZihGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpKQorX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Q6CitGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDQsNDksMTkyLDEzOCw2LDcwLDYwLDMxLDExOQorZGIgNTEsOCwxOTIsMTM3LDE5MywxMTcsMTksMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MworZGIgMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzCitkYiAxNjUsMzYsMywxMTYsOCwxMzksMzAsMSwxOTgsMTM3LDMxLDEsMTk5LDEzOCw2LDcwCitkYiA2MCwzMSwxMTgsODgsNjAsMjIzLDE1LDEzNSwxMzIsMCwwLDAsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMzYsNywxOTMsMjMzLDUsMTM3LDE5NSwxMzgsNiwxNDEsNCwxOTUKK2RiIDcwLDQxLDE5NCwxMzEsMTkzLDIsMTM1LDIxNCwxMzEsMjQ5LDYsMTE0LDE2LDEzMSwyNDgsNAorZGIgMTE0LDExLDEzNiwyMDAsMTkzLDIzMywyLDI0MywxNjUsMzYsMywxMzYsMTkzLDI0MywxNjQsMTM3CitkYiAyMTQsMTM4LDc4LDI1NCwxMzEsMjI1LDMsMTUsMTMyLDEyMywyNTUsMjU1LDI1NSwxMzksNiwxCitkYiAyMDYsMTM3LDcsMSwyMDcsNDksMTkyLDEzOCw2LDcwLDIzNSwxNjQsMTkzLDIzMiwyLDE0MQorZGIgMTUxLDI1NSwyNDcsMjU1LDI1NSwxMzcsMTkzLDEzOCw2LDcwLDE0MSw0LDE5Myw0MSwxOTQsMTM5CitkYiAyLDEzNyw3LDEzMSwxOTksMywyMzUsMjAxLDEzOCw2LDcwLDgsMTkyLDExNyw4LDEyOQorZGIgMTkzLDI1NSwwLDAsMCwyMzUsMjQxLDE0MSw3Niw4LDMxLDIzNSw5LDE0MSwxMTgsMAorZGIgMzYsMzEsMTM3LDE5MywxMTYsMjI2LDEzNywyNTAsMTAyLDEzOSw2LDEzMSwxOTgsMiwxOTMsMjMyCitkYiAyLDE1LDEzMywxMjIsMjU1LDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsMTM5LDg0LDM2CitkYiA0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzkKK2RiIDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMKK2RiIDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0CitkYiA0LDAsMCwwLDIzNSwyMTMsMTQxLDExOCwwLDE0MSwxODgsMzksMCwwLDAsMAorCitnbG9iYWxmKF9sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCitnbG9iYWxmKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKSkKK19sem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmU6CitGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDE0MSwxMTgsMAorZGIgNDksMTkyLDEzOCw2LDcwLDYwLDMxLDExOSw3Niw4LDE5MiwxMzcsMTkzLDExNywxOSwxMzgKK2RiIDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MywyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYKK2RiIDgsMzEsMTQxLDI4LDE1LDU3LDI4LDM2LDE1LDEzMCw2MSwxLDAsMCwxNDEsMjgKK2RiIDE0LDU3LDkyLDM2LDQsMTUsMTMwLDQxLDEsMCwwLDEzNiwyMDAsMTkzLDIzMywyCitkYiAyNDMsMTY1LDM2LDMsMTE2LDgsMTM5LDMwLDEsMTk4LDEzNywzMSwxLDE5OSwxMzgsNgorZGIgNzAsNjAsMzEsMTE4LDExMCw2MCwyMjMsMTUsMTM1LDE3OSwwLDAsMCwxMzcsMTkzLDE5MworZGIgMjMyLDIsMTQxLDg3LDI1NSwzNiw3LDE5MywyMzMsNSwxMzcsMTk1LDEzOCw2LDE0MSw0CitkYiAxOTUsNzAsNDEsMTk0LDEzMSwxOTMsMiwxMzUsMjE0LDU5LDExNiwzNiw0OCwxNSwxMzAsMjM5CitkYiAwLDAsMCwxNDEsMjgsMTUsNTcsMjgsMzYsMTUsMTMwLDIyMCwwLDAsMCwxMzEKK2RiIDI0OSw2LDExNCwxNiwxMzEsMjQ4LDQsMTE0LDExLDEzNiwyMDAsMTkzLDIzMywyLDI0MywxNjUKK2RiIDM2LDMsMTM2LDE5MywyNDMsMTY0LDEzNywyMTQsMTM4LDc4LDI1NCwxMzEsMjI1LDMsMTUsMTMyCitkYiA3NiwyNTUsMjU1LDI1NSwxMzksNiwxLDIwNiwxMzcsNywxLDIwNyw0OSwxOTIsMTM4LDYKK2RiIDcwLDIzNSwxNDIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDE1NiwwLDAsMCwxOTMKK2RiIDIzMiwyLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDEzNywxOTMsMTM4LDYsNzAsMTQxLDQsMTkzCitkYiA0MSwxOTQsNTksODQsMzYsNDgsMTUsMTMwLDEzNCwwLDAsMCwxMzksMiwxMzcsNworZGIgMTMxLDE5OSwzLDIzNSwxNzksMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5LDE5MywyNTUsMAorZGIgMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMjM1LDEyLDE0MSwxODIsMCwwLDAsMAorZGIgMzYsMzEsMTM3LDE5MywxMTYsMjIzLDEzNywyNTAsMTAyLDEzOSw2LDEzMSwxOTgsMiwxOTMsMjMyCitkYiAyLDE1LDEzMyw3NSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5Miw1OSw2MCwzNgorZGIgMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5CitkYiA0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAKK2RiIDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAKK2RiIDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAKK2RiIDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDEsMTgwLDM4LDAsMCwwLDAKKworZ2xvYmFsZihfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkKK2dsb2JhbGYoRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK19sem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0OgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0KToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDI3CitkYiA0NCwxNCwyMzUsMzQsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQKK2RiIDE0MSw2OCwyNCwyMSwyMzUsMTYsMTM3LDI0NiwxMzgsNiw3MCw2MCwxNiwxMTUsNjUsOAorZGIgMTkyLDExNiwyMzAsMTMxLDE5Miw2LDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5CitkYiAyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTkKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSwyNSwxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NworZGIgMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOSwxMCwxMzcsMTUsMSwyMzksMjM1LDExMAorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOAorZGIgMzAsMTkzLDIzMyw1LDE0MSw0LDIxNiw3MCw0MSwxOTQsMTMxLDE5Myw0LDU3LDIzMiwxMTUKK2RiIDUzLDIzNSwxMDksNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxCitkYiA3NiwyNCwzNiw0OSwxOTIsMjM1LDEzLDE0NCw2MCwzMiwxMTQsMTE2LDEzMSwyMjQsMzEsMTE2CitkYiAyMzEsMTQxLDcyLDUsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNTgsMTQxLDY4LDE1LDI1MywxOTMsMjMzLDIsMTM5LDI2LDEzMQorZGIgMTk0LDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MAorZGIgMjU0LDMzLDIzMiwxNSwxMzIsNjMsMjU1LDI1NSwyNTUsMTM5LDIyLDEsMTk4LDEzNywyMywxCitkYiAxOTksMTM4LDYsNzAsMjMzLDExOSwyNTUsMjU1LDI1NSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDEzNSwyMTQsNDEsMjMzLDI0MywxNjQsMTM3LDIxNCwyMzUsMjEyLDEyOSwxOTMsMjU1LDAsMCwwCitkYiAxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEsMTIsMjM1LDIzLDE0MSwxMTgsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjIzLDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzLDEyMiwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyCitkYiAxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDExMCwyNTUsMjU1LDI1NQorZGIgMTMxLDI0OSw2LDE1LDE0OSwxOTIsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0CitkYiAxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYKK2RiIDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNQorZGIgMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxNDQKKworZ2xvYmFsZihfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorZ2xvYmFsZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4LDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAKK2RiIDQxLDE5NCwxMzEsMTkzLDQsNTcsMjMyLDExNSw3MywyMzMsMTcwLDAsMCwwLDUsMjU1CitkYiAwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjMsMSwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE3LDE0NAorZGIgNjAsMzIsMTUsMTMwLDIwMCwwLDAsMCwxMzEsMjI0LDMxLDExNiwyMjcsMTQxLDcyLDUKK2RiIDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMgorZGIgMTE0LDEwMiw1OSw4NCwzNiw0OCwxNSwxMzAsNzcsMSwwLDAsMTQxLDY4LDE1LDI1MworZGIgMTkzLDIzMywyLDU3LDQsMzYsMTUsMTMwLDU0LDEsMCwwLDEzOSwyNiwxMzEsMTk0CitkYiA0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAsMjU0CitkYiAzMywyMzIsMTUsMTMyLDIxNiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NywyMCwzNiwxNSwxMzAKK2RiIDE0LDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUsMTMwLDI1MCwwLDAKK2RiIDAsMTM5LDIyLDEsMTk4LDEzNywyMywxLDE5OSwxMzgsNiw3MCwyMzMsNTUsMjU1LDI1NQorZGIgMjU1LDE0MSwxODAsMzgsMCwwLDAsMCw1OSw4NCwzNiw0OCwxNSwxMzAsMjMxLDAKK2RiIDAsMCwxNDEsNjgsMTUsMjUzLDU3LDQsMzYsMTUsMTMwLDIxMSwwLDAsMCwxMzUKK2RiIDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNjQsMTI5LDE5MywyNTUsMCwwLDAsMTQxCitkYiA4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDE3NSwwLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDc2LDExLDEyLDIzNSwyNywxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIxOSwxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMywzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNworZGIgMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywzMSwyNTUsMjU1LDI1NSwxMzEsMjQ5CitkYiA2LDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2CitkYiA0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNworZGIgNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwCitkYiAwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwCitkYiAyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OQorCitnbG9iYWxmKF9sem8xeF9kZWNvbXByZXNzX2FzbSkKK2dsb2JhbGYoRihsem8xeF9kZWNvbXByZXNzX2FzbSkpCitfbHpvMXhfZGVjb21wcmVzc19hc206CitGKGx6bzF4X2RlY29tcHJlc3NfYXNtKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDM1CitkYiA0NCwxNyw2MCw0LDExNSw0MCwxMzcsMTkzLDIzNSw1Niw1LDI1NSwwLDAsMCwxMzgKK2RiIDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDY4LDI0LDE4LDIzNSwxOCwxNDEsMTE2LDM4LDAKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSw3Myw4LDE5MiwxMTYsMjI4LDEzMSwxOTIsMywxMzcsMTkzCitkYiAxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MgorZGIgMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSwzNywxOTMsMjMyLDIsMTM4LDMwCitkYiAxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3CitkYiAxMzgsNjYsMSwxMzYsNzEsMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzUsMTE5CitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCw2NSw1NywyMzIsMTE1LDU1LDIzNQorZGIgMTE5LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw3NiwyNAorZGIgMzMsNDksMTkyLDIzNSwxNSwxNDEsMTE4LDAsNjAsMzIsMTE0LDEyNCwxMzEsMjI0LDMxLDExNgorZGIgMjI5LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDY2LDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEKK2RiIDE5NCw0LDEzNyw3LDEzMSwxOTksNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMgorZGIgNjYsMTM2LDcsNzEsNzMsMTE3LDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsNDYsMjU1CitkYiAyNTUsMjU1LDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNiw3MCwyMzMsMTA5CitkYiAyNTUsMjU1LDI1NSwxNDQsMTQxLDExNiwzOCwwLDEzNSwyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTUKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMQorZGIgOSwyMzUsMjUsMTQ0LDE0MSwxMTYsMzgsMCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjEsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMKK2RiIDExNCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxCitkYiAxMzEsMTk5LDIsMjMzLDExMSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5MiwxMzksODQKK2RiIDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4CitkYiAxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NQorZGIgOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMAorZGIgMTg0LDQsMCwwLDAsMjM1LDIxMywxMzcsMjQ2LDE0MSwxODgsMzksMCwwLDAsMAorCitnbG9iYWxmKF9sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKQorZ2xvYmFsZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpKQorX2x6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmU6CitGKGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDg3LDQ0LDE3LDYwLDQsMTE1LDkyLDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMTMwLDIsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwxMTAsMiwwLDAsMTM3LDE5MywyMzUsMTEwLDUsMjU1LDAsMCwwLDE0MSw4NAorZGIgNiwxOCw1Nyw4NCwzNiw0LDE1LDEzMCw4NywyLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDY4LDI0LDE4LDIzNSwzMSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDU3LDExNiwzNiw0LDE1LDEzMCw1NywyLDAsMCwxMzgsNiw3MCw2MCwxNiwxMTUKK2RiIDEyNyw4LDE5MiwxMTYsMjE1LDEzMSwxOTIsMywxNDEsODQsNywwLDU3LDIwLDM2LDE1CitkYiAxMzAsMzcsMiwwLDAsMTQxLDg0LDYsMCw1Nyw4NCwzNiw0LDE1LDEzMCwxNgorZGIgMiwwLDAsMTM3LDE5MywxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3CitkYiAyMywxMzEsMTk5LDQsNzIsMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSw2NAorZGIgMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIzOCwxLDAsMCwxOTMsMjMyLDIsMTM4CitkYiAzMCwxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2CitkYiA0OCwxNSwxMzAsMjE4LDEsMCwwLDEzOCwyLDEzNiw3LDEzOCw2NiwxLDEzNiw3MQorZGIgMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzMsMTYzLDAsMCwwLDEzNywyNDYKK2RiIDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDY1LDU3LDIzMiwxMTUsNzUsMjMzCitkYiAxODAsMCwwLDAsNSwyNTUsMCwwLDAsMTQxLDg2LDMsNTcsODQsMzYsNAorZGIgMTUsMTMwLDEyNSwxLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQKK2RiIDMzLDQ5LDE5MiwyMzUsMTksMTQxLDExOCwwLDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAKK2RiIDEzMSwyMjQsMzEsMTE2LDIyNSwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyCitkYiAyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyLDExNCwxMTAsNTksODQsMzYsNDgsMTUsMTMwCitkYiA3NywxLDAsMCwxNDEsNCwxNSw1Nyw0LDM2LDE1LDEzMCw1OCwxLDAsMAorZGIgMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMSwxOTQsNCwxMzcsNywxMzEsMTk5CitkYiA0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyLDY2LDEzNiw3LDcxLDczLDExNworZGIgMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiwxOTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwyLDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwyMzgsMCwwLDAsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2CitkYiA3MCwyMzMsNDIsMjU1LDI1NSwyNTUsMTM3LDI0Niw1OSw4NCwzNiw0OCwxNSwxMzAsMjIzLDAKK2RiIDAsMCwxNDEsNjgsMTUsMCw1Nyw0LDM2LDE1LDEzMCwyMDMsMCwwLDAsMTM1CitkYiAyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNzAsMTI5LDE5MywyNTUsMCwwLDAsMTQxLDg2LDMKK2RiIDU3LDg0LDM2LDQsMTUsMTMwLDE2OSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2CitkYiAyMzAsMTQxLDc2LDExLDksMjM1LDIxLDE0NCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjUsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMKK2RiIDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2CitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NAorZGIgMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTkKK2RiIDIsMjMzLDQzLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDU5LDYwLDM2LDExOQorZGIgNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMKK2RiIDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OQorZGIgOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwCitkYiAwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMCwyMzUKK2RiIDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0NCwxNDEsMTgwLDM4LDAsMCwwLDAKKworZ2xvYmFsZihfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkKK2dsb2JhbGYoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KSkKK19sem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0OgorRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0KToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDI3CitkYiA0NCwxNCwyMzUsMzQsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQKK2RiIDE0MSw2OCwyNCwyMSwyMzUsMTYsMTM3LDI0NiwxMzgsNiw3MCw2MCwxNiwxMTUsNjUsOAorZGIgMTkyLDExNiwyMzAsMTMxLDE5Miw2LDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5CitkYiAyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTkKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSwyNSwxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI1MQorZGIgMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOSwxMCwxMzcsMTUsMSwyMzksMjM1LDExMAorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNTQKK2RiIDIzNSwxMTAsNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2CitkYiAyNCwzNiw0OSwxOTIsMjM1LDE0LDEzNywyNDYsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMwLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CisKK2dsb2JhbGYoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbGYoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK0YobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw1NSw0NCwxNCwyMzUsNjIsNSwyNTUsMCwwLDAsMTQxCitkYiA4NCw2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDc4LDIsMCwwLDEzOCwzMCw3MAorZGIgOCwyMTksMTE2LDIzMCwxNDEsNjgsMjQsMjEsMjM1LDMwLDE0MSwxODIsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDQ5LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTE5LDgsMTkyLDExNiwyMTYsMTMxLDE5Miw2LDE0MSw4NCw3LDI1Myw1NywyMCwzNiwxNQorZGIgMTMwLDI5LDIsMCwwLDE0MSw4NCw2LDI1Myw1Nyw4NCwzNiw0LDE1LDEzMCw4CitkYiAyLDAsMCwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOSwyMiwxMzEsMTk4CitkYiA0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5LDEzOCw2LDcwCitkYiA2MCwxNiwxMTUsNTIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIyNiwxLDAsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMjA2LDEsMCwwLDEzOSwxMCwxMzcsMTUsMQorZGIgMjM5LDIzMywxNTEsMCwwLDAsMTM3LDI0Niw2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMCwxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxCitkYiAxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNzQsMjMzLDE3MSwwLDAsMCw1LDI1NSwwCitkYiAwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTI0LDEsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzYsNDksMTkyLDIzNSwxOCwxMzcsMjQ2CitkYiA2MCwzMiwxNSwxMzAsMjAwLDAsMCwwLDEzMSwyMjQsMzEsMTE2LDIyNiwxNDEsNzIsNQorZGIgMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyCitkYiAxMTQsMTAyLDU5LDg0LDM2LDQ4LDE1LDEzMCw3NywxLDAsMCwxNDEsNjgsMTUsMjUzCitkYiAxOTMsMjMzLDIsNTcsNCwzNiwxNSwxMzAsNTQsMSwwLDAsMTM5LDI2LDEzMSwxOTQKK2RiIDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MCwyNTQKK2RiIDMzLDIzMiwxNSwxMzIsMjE2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3LDIwLDM2LDE1LDEzMAorZGIgMTQsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNSwxMzAsMjUwLDAsMAorZGIgMCwxMzksMjIsMSwxOTgsMTM3LDIzLDEsMTk5LDEzOCw2LDcwLDIzMyw1NSwyNTUsMjU1CitkYiAyNTUsMTQxLDE4MCwzOCwwLDAsMCwwLDU5LDg0LDM2LDQ4LDE1LDEzMCwyMzEsMAorZGIgMCwwLDE0MSw2OCwxNSwyNTMsNTcsNCwzNiwxNSwxMzAsMjExLDAsMCwwLDEzNQorZGIgMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDE2NCwxMjksMTkzLDI1NSwwLDAsMCwxNDEKK2RiIDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTc1LDAsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNzYsMTEsMTIsMjM1LDI3LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjE5LDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzLDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMAorZGIgMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNiwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3CitkYiAxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDMxLDI1NSwyNTUsMjU1LDEzMSwyNDkKK2RiIDYsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYKK2RiIDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3CitkYiA1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAKK2RiIDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAKK2RiIDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5CisKK2dsb2JhbGYoX2x6bzF5X2RlY29tcHJlc3NfYXNtKQorZ2xvYmFsZihGKGx6bzF5X2RlY29tcHJlc3NfYXNtKSkKK19sem8xeV9kZWNvbXByZXNzX2FzbToKK0YobHpvMXlfZGVjb21wcmVzc19hc20pOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCw0OSwxOTIsNDksMjE5LDE3Miw2MCwxNywxMTgsMzUKK2RiIDQ0LDE3LDYwLDQsMTE1LDQwLDEzNywxOTMsMjM1LDU2LDUsMjU1LDAsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNjgsMjQsMTgsMjM1LDE4LDE0MSwxMTYsMzgsMAorZGIgMTM4LDYsNzAsNjAsMTYsMTE1LDczLDgsMTkyLDExNiwyMjgsMTMxLDE5MiwzLDEzNywxOTMKK2RiIDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcsMjMsMTMxLDE5OSw0LDcyCitkYiAxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDM3LDE5MywyMzIsMiwxMzgsMzAKK2RiIDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcKK2RiIDEzOCw2NiwxLDEzNiw3MSwxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzNSwxMTkKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDMzLDIzMiwxMzgsMzAKK2RiIDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEsMTk0LDczLDU3LDIzMiwxMTUsNTYsMjM1LDEyMAorZGIgNSwyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDc2LDI0LDMzCitkYiA0OSwxOTIsMjM1LDE2LDE0MSwxMTYsMzgsMCw2MCwzMiwxMTQsMTI0LDEzMSwyMjQsMzEsMTE2CitkYiAyMjgsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMgorZGIgNDEsMTk0LDU3LDIzMiwxMTQsNjYsMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMQorZGIgMTk0LDQsMTM3LDcsMTMxLDE5OSw0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyCitkYiA2NiwxMzYsNyw3MSw3MywxMTcsMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiw0NiwyNTUKK2RiIDI1NSwyNTUsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2LDcwLDIzMywxMDkKK2RiIDI1NSwyNTUsMjU1LDE0NCwxNDEsMTE2LDM4LDAsMTM1LDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDIxNQorZGIgMTI5LDE5MywyNTUsMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExCitkYiA5LDIzNSwyNSwxNDQsMTQxLDExNiwzOCwwLDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyMSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMworZGIgMTE0LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEKK2RiIDEzMSwxOTksMiwyMzMsMTExLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDEzOSw4NAorZGIgMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgKK2RiIDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1CitkYiA5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwCitkYiAxODQsNCwwLDAsMCwyMzUsMjEzLDEzNywyNDYsMTQxLDE4OCwzOSwwLDAsMCwwCisKK2dsb2JhbGYoX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpCitnbG9iYWxmKEYobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSkpCitfbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZToKK0YobHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0MSw3MCwyNTMsMyw2OCwzNiw0NCwxMzcsNjgKK2RiIDM2LDQsMTM3LDI0OCwxMzksODQsMzYsNTIsMywyLDEzNyw0LDM2LDQ5LDE5Miw0OQorZGIgMjE5LDE3Miw2MCwxNywxMTgsODcsNDQsMTcsNjAsNCwxMTUsOTIsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwxMzAsMiwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDExMCwyLDAsMCwxMzcsMTkzLDIzNSwxMTAsNSwyNTUsMCwwLDAsMTQxLDg0CitkYiA2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDg3LDIsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNjgsMjQsMTgsMjM1LDMxLDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDU3LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTI3LDgsMTkyLDExNiwyMTUsMTMxLDE5MiwzLDE0MSw4NCw3LDAsNTcsMjAsMzYsMTUKK2RiIDEzMCwzNywyLDAsMCwxNDEsODQsNiwwLDU3LDg0LDM2LDQsMTUsMTMwLDE2CitkYiAyLDAsMCwxMzcsMTkzLDE5MywyMzIsMiwzMywyMzMsMTM5LDIyLDEzMSwxOTgsNCwxMzcKK2RiIDIzLDEzMSwxOTksNCw3MiwxMTcsMjQzLDI0MywxNjQsMTM4LDYsNzAsNjAsMTYsMTE1LDY0CitkYiAxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjM4LDEsMCwwLDE5MywyMzIsMiwxMzgKK2RiIDMwLDE0MSwxNTEsMjU1LDI1MSwyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYKK2RiIDQ4LDE1LDEzMCwyMTgsMSwwLDAsMTM4LDIsMTM2LDcsMTM4LDY2LDEsMTM2LDcxCitkYiAxLDEzOCw2NiwyLDEzNiw3MSwyLDEsMjM5LDIzMywxNjMsMCwwLDAsMTM3LDI0NgorZGIgNjAsNjQsMTE0LDY4LDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMAorZGIgMTkzLDIzMyw0LDE0MSw0LDE1Miw3MCw0MSwxOTQsNzMsNTcsMjMyLDExNSw3NiwyMzMsMTgxCitkYiAwLDAsMCw1LDI1NSwwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTI2LDEsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzMworZGIgNDksMTkyLDIzNSwyMCwxNDEsMTE2LDM4LDAsNjAsMzIsMTUsMTMwLDIwMCwwLDAsMAorZGIgMTMxLDIyNCwzMSwxMTYsMjI0LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIKK2RiIDIsMTMxLDE5OCwyLDQxLDE5NCw1NywyMzIsMTE0LDExMCw1OSw4NCwzNiw0OCwxNSwxMzAKK2RiIDc3LDEsMCwwLDE0MSw0LDE1LDU3LDQsMzYsMTUsMTMwLDU4LDEsMCwwCitkYiAxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxLDE5NCw0LDEzNyw3LDEzMSwxOTkKK2RiIDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIsNjYsMTM2LDcsNzEsNzMsMTE3CitkYiAyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDE5NiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDIsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNQorZGIgMTMwLDIzOCwwLDAsMCwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYKK2RiIDcwLDIzMyw0MiwyNTUsMjU1LDI1NSwxMzcsMjQ2LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMjMsMAorZGIgMCwwLDE0MSw2OCwxNSwwLDU3LDQsMzYsMTUsMTMwLDIwMywwLDAsMCwxMzUKK2RiIDIxNCwyNDMsMTY0LDEzNywyMTQsMjM1LDE3MCwxMjksMTkzLDI1NSwwLDAsMCwxNDEsODYsMworZGIgNTcsODQsMzYsNCwxNSwxMzAsMTY5LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYKK2RiIDIzMCwxNDEsNzYsMTEsOSwyMzUsMjEsMTQ0LDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQKK2RiIDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2LDIyNSwxMzEsMTkzLDIsMTAyLDEzOSw2LDEzMQorZGIgMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1LDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMworZGIgMzgsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYKK2RiIDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0CitkYiAzNiw0OCwxMTQsOTMsMTM4LDIsMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OQorZGIgMiwyMzMsNDMsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5CitkYiA1NywxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MworZGIgMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5CitkYiA5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwLDAKK2RiIDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNQorZGIgMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTksMTQ0LDE0MSwxODAsMzgsMCwwLDAsMAorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9hc21pbml0LmRlZiBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2FzbWluaXQuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5NDJhODEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9hc21pbml0LmRlZgpAQCAtMCwwICsxLDU1IEBACis7ICBhc21pbml0LmRlZiAtLQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKyVkZWZpbmUgRihuYW1lKSBuYW1lCislaWZpZG5pIF9fT1VUUFVUX0ZPUk1BVF9fLGVsZgorJWRlZmluZSBnbG9iYWxmKHgpIGdsb2JhbCB4OmZ1bmN0aW9uCislZWxzZQorJWRlZmluZSBnbG9iYWxmKHgpIGdsb2JhbCB4CislZW5kaWYKKworYml0cyAzMgorJWlmaWRuaSBfX09VVFBVVF9GT1JNQVRfXyxlbGYKK3NlY3Rpb24gLm5vdGUuR05VLXN0YWNrIG5vYWxsb2Mgbm9leGVjIG5vd3JpdGUgcHJvZ2JpdHMKKyVlbmRpZgorJWlmaWRuaSBfX09VVFBVVF9GT1JNQVRfXyxvYmoKK3NlZ21lbnQgX1RFWFQgY2xhc3M9Q09ERSBwdWJsaWMgdXNlMzIgZmxhdCBhbGlnbj0xNgorJWVsc2UKK3NlY3Rpb24gLnRleHQKKyVlbmRpZgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMWNfczEuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMWNfczEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTNhNTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xY19zMS5hc20KQEAgLTAsMCArMSw2NCBAQAorOyAgbHpvMWNfczEuYXNtIC0tIGx6bzFjX2RlY29tcHJlc3NfYXNtCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworJWluY2x1ZGUgImFzbWluaXQuZGVmIgorZ2xvYmFsZihfbHpvMWNfZGVjb21wcmVzc19hc20pCitnbG9iYWxmKEYobHpvMWNfZGVjb21wcmVzc19hc20pKQorX2x6bzFjX2RlY29tcHJlc3NfYXNtOgorRihsem8xY19kZWNvbXByZXNzX2FzbSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0NCw0OSwxOTIsMTM4LDYsNzAsNjAsMzIsMTE1CitkYiAxNSw4LDE5MiwxMTYsNTEsMTM3LDE5MywyNDMsMTY0LDEzOCw2LDcwLDYwLDMyLDExNCw3MgorZGIgNjAsNjQsMTE0LDkzLDEzNywxOTMsMzYsMzEsMTQxLDg3LDI1NSwxOTMsMjMzLDUsNDEsMTk0CitkYiAxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDY1LDEzNSwyNDIsMjQzLDE2NCwxMzcsMjE0LDIzNQorZGIgMTk5LDE0MSwxODAsMzgsMCwwLDAsMCwxMzgsNiw3MCwxNDEsNzIsMzIsNjAsMjQ4CitkYiAxMTQsMTk3LDE4NSwyNCwxLDAsMCw0NCwyNDgsMTE2LDYsMTQ1LDQ4LDE5MiwyMTEsMjI0CitkYiAxNDUsMjQzLDE2NCwyMzUsMTYzLDE0MSwxMTgsMCwxNDEsODcsMjU1LDQxLDE5NCwxMzgsNiw3MAorZGIgMTkzLDIyNCw1LDQxLDE5NCwxMzUsMjQyLDE2NCwxNjQsMTY0LDEzNywyMTQsMTY0LDQ5LDE5MiwyMzUKK2RiIDE1MiwzNiwzMSwxMzcsMTkzLDExNywxOSwxNzcsMzEsMTM4LDYsNzAsOCwxOTIsMTE3LDgKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMSwxOTMsMTM4LDYsNzAsMTM3LDE5NSwzNgorZGIgNjMsMTM3LDI1MCw0MSwxOTQsMTM4LDYsNzAsMTkzLDIyNCw2LDQxLDE5NCw1NywyNTAsMTE2CitkYiAyNywxMzUsMjE0LDE0MSw3MywzLDI0MywxNjQsMTM3LDIxNCw0OSwxOTIsMTkzLDIzNSw2LDEzNworZGIgMjE3LDE1LDEzMyw4MCwyNTUsMjU1LDI1NSwyMzMsNjAsMjU1LDI1NSwyNTUsMTMxLDI0OSwxLDE1CitkYiAxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5CitkYiA0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAKK2RiIDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAKK2RiIDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0LDE0MSwxMTYsMzgsMApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMWNfczIuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMWNfczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGM4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xY19zMi5hc20KQEAgLTAsMCArMSw3NSBAQAorOyAgbHpvMWNfczIuYXNtIC0tIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUKKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCislaW5jbHVkZSAiYXNtaW5pdC5kZWYiCitnbG9iYWxmKF9sem8xY19kZWNvbXByZXNzX2FzbV9zYWZlKQorZ2xvYmFsZihGKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpKQorX2x6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmU6CitGKGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiwxNDEsMTE4LDAKK2RiIDQ5LDE5MiwxMzgsNiw3MCw2MCwzMiwxMTUsNDAsOCwxOTIsMTE2LDk5LDEzNywxOTMsMTQxCitkYiAyOCwxNSw1NywyOCwzNiwxNSwxMzAsMTA3LDEsMCwwLDE0MSwyOCwxNCw1Nyw5MgorZGIgMzYsNCwxNSwxMzAsODcsMSwwLDAsMjQzLDE2NCwxMzgsNiw3MCw2MCwzMiwxMTQKK2RiIDEyNyw2MCw2NCwxNSwxMzAsMTY5LDAsMCwwLDEzNywxOTMsMzYsMzEsMTQxLDg3LDI1NQorZGIgMTkzLDIzMyw1LDQxLDE5NCwxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDY1LDEzNSwyNDIKK2RiIDU5LDExNiwzNiw0OCwxNSwxMzAsNTEsMSwwLDAsMTQxLDI4LDE1LDU3LDI4LDM2CitkYiAxNSwxMzAsMzIsMSwwLDAsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNDgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCwxNDEsNzIsMzIsNjAsMjQ4LDExNCwxNDksMTg1LDI0LDEsMCwwLDQ0CitkYiAyNDgsMTE2LDYsMTQ1LDQ4LDE5MiwyMTEsMjI0LDE0NSwxNDEsMjgsMTUsNTcsMjgsMzYsMTUKK2RiIDEzMCwyNDEsMCwwLDAsMTQxLDI4LDE0LDU3LDkyLDM2LDQsMTUsMTMwLDIyMSwwCitkYiAwLDAsMjQzLDE2NCwyMzMsODcsMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxNDEsODcsMjU1LDQxLDE5NCwxMzgsNiw3MCwxOTMsMjI0LDUsNDEsMTk0LDEzNSwyNDIsNTkKK2RiIDExNiwzNiw0OCwxNSwxMzAsMTk2LDAsMCwwLDE0MSw5NSw0LDU3LDI4LDM2LDE1CitkYiAxMzAsMTc3LDAsMCwwLDE2NCwxNjQsMTY0LDEzNywyMTQsMTY0LDQ5LDE5MiwyMzMsNzIsMjU1CitkYiAyNTUsMjU1LDM2LDMxLDEzNywxOTMsMTE3LDI2LDE3NywzMSwxMzgsNiw3MCw4LDE5MiwxMTcKK2RiIDE1LDEyOSwxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxLDE5MywxMzgsNiw3MCwxMzcsMTk1LDM2LDYzLDEzNywyNTAsNDEsMTk0LDEzOCw2LDcwCitkYiAxOTMsMjI0LDYsNDEsMTk0LDU3LDI1MCwxMTYsNDEsMTM1LDIxNCwxNDEsNzMsMyw1OSwxMTYKK2RiIDM2LDQ4LDExNCwxMDUsMTQxLDQsMTUsNTcsNCwzNiwxMTQsOTAsMjQzLDE2NCwxMzcsMjE0CitkYiA0OSwxOTIsMTkzLDIzNSw2LDEzNywyMTcsMTUsMTMzLDIxMCwyNTQsMjU1LDI1NSwyMzMsMTkwLDI1NAorZGIgMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTksNTcsMTM5LDg0LDM2CitkYiA0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzkKK2RiIDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMKK2RiIDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0CitkYiA0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1LDIwNiwxODQsNiwwCitkYiAwLDAsMjM1LDE5OSwxNDEsMTgyLDAsMCwwLDAsMTQxLDE5MSwwLDAsMCwwCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xZl9mMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xZl9mMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFiNGQ5NgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzFmX2YxLmFzbQpAQCAtMCwwICsxLDY2IEBACis7ICBsem8xZl9mMS5hc20gLS0gbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdAorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyVpbmNsdWRlICJhc21pbml0LmRlZiIKK2dsb2JhbGYoX2x6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWxmKEYobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCkpCitfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdDoKK0YobHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDE0NCw0OSwxOTIsMTM4LDYsNzAsNjAsMzEsMTE5CitkYiA1MSw4LDE5MiwxMzcsMTkzLDExNywxOSwxMzgsNiw3MCw4LDE5MiwxMTcsOCwxMjksMTkzCitkYiAyNTUsMCwwLDAsMjM1LDI0MSwxNDEsNzYsOCwzMSwxMzYsMjAwLDE5MywyMzMsMiwyNDMKK2RiIDE2NSwzNiwzLDExNiw4LDEzOSwzMCwxLDE5OCwxMzcsMzEsMSwxOTksMTM4LDYsNzAKK2RiIDYwLDMxLDExOCw4OCw2MCwyMjMsMTUsMTM1LDEzMiwwLDAsMCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwzNiw3LDE5MywyMzMsNSwxMzcsMTk1LDEzOCw2LDE0MSw0LDE5NQorZGIgNzAsNDEsMTk0LDEzMSwxOTMsMiwxMzUsMjE0LDEzMSwyNDksNiwxMTQsMTYsMTMxLDI0OCw0CitkYiAxMTQsMTEsMTM2LDIwMCwxOTMsMjMzLDIsMjQzLDE2NSwzNiwzLDEzNiwxOTMsMjQzLDE2NCwxMzcKK2RiIDIxNCwxMzgsNzgsMjU0LDEzMSwyMjUsMywxNSwxMzIsMTIzLDI1NSwyNTUsMjU1LDEzOSw2LDEKK2RiIDIwNiwxMzcsNywxLDIwNyw0OSwxOTIsMTM4LDYsNzAsMjM1LDE2NCwxOTMsMjMyLDIsMTQxCitkYiAxNTEsMjU1LDI0NywyNTUsMjU1LDEzNywxOTMsMTM4LDYsNzAsMTQxLDQsMTkzLDQxLDE5NCwxMzkKK2RiIDIsMTM3LDcsMTMxLDE5OSwzLDIzNSwyMDEsMTM4LDYsNzAsOCwxOTIsMTE3LDgsMTI5CitkYiAxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2LDgsMzEsMjM1LDksMTQxLDExOCwwCitkYiAzNiwzMSwxMzcsMTkzLDExNiwyMjYsMTM3LDI1MCwxMDIsMTM5LDYsMTMxLDE5OCwyLDE5MywyMzIKK2RiIDIsMTUsMTMzLDEyMiwyNTUsMjU1LDI1NSwxMzEsMjQ5LDEsMTUsMTQ5LDE5MiwxMzksODQsMzYKK2RiIDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOQorZGIgODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MworZGIgMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQKK2RiIDQsMCwwLDAsMjM1LDIxMywxNDEsMTE4LDAsMTQxLDE4OCwzOSwwLDAsMCwwCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xZl9mMi5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xZl9mMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTBkZTQyOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzFmX2YyLmFzbQpAQCAtMCwwICsxLDczIEBACis7ICBsem8xZl9mMi5hc20gLS0gbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworJWluY2x1ZGUgImFzbWluaXQuZGVmIgorZ2xvYmFsZihfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorZ2xvYmFsZihGKGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiwxNDEsMTE4LDAKK2RiIDQ5LDE5MiwxMzgsNiw3MCw2MCwzMSwxMTksNzYsOCwxOTIsMTM3LDE5MywxMTcsMTksMTM4CitkYiA2LDcwLDgsMTkyLDExNyw4LDEyOSwxOTMsMjU1LDAsMCwwLDIzNSwyNDEsMTQxLDc2CitkYiA4LDMxLDE0MSwyOCwxNSw1NywyOCwzNiwxNSwxMzAsNjEsMSwwLDAsMTQxLDI4CitkYiAxNCw1Nyw5MiwzNiw0LDE1LDEzMCw0MSwxLDAsMCwxMzYsMjAwLDE5MywyMzMsMgorZGIgMjQzLDE2NSwzNiwzLDExNiw4LDEzOSwzMCwxLDE5OCwxMzcsMzEsMSwxOTksMTM4LDYKK2RiIDcwLDYwLDMxLDExOCwxMTAsNjAsMjIzLDE1LDEzNSwxNzksMCwwLDAsMTM3LDE5MywxOTMKK2RiIDIzMiwyLDE0MSw4NywyNTUsMzYsNywxOTMsMjMzLDUsMTM3LDE5NSwxMzgsNiwxNDEsNAorZGIgMTk1LDcwLDQxLDE5NCwxMzEsMTkzLDIsMTM1LDIxNCw1OSwxMTYsMzYsNDgsMTUsMTMwLDIzOQorZGIgMCwwLDAsMTQxLDI4LDE1LDU3LDI4LDM2LDE1LDEzMCwyMjAsMCwwLDAsMTMxCitkYiAyNDksNiwxMTQsMTYsMTMxLDI0OCw0LDExNCwxMSwxMzYsMjAwLDE5MywyMzMsMiwyNDMsMTY1CitkYiAzNiwzLDEzNiwxOTMsMjQzLDE2NCwxMzcsMjE0LDEzOCw3OCwyNTQsMTMxLDIyNSwzLDE1LDEzMgorZGIgNzYsMjU1LDI1NSwyNTUsMTM5LDYsMSwyMDYsMTM3LDcsMSwyMDcsNDksMTkyLDEzOCw2CitkYiA3MCwyMzUsMTQyLDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwxNTYsMCwwLDAsMTkzCitkYiAyMzIsMiwxNDEsMTUxLDI1NSwyNDcsMjU1LDI1NSwxMzcsMTkzLDEzOCw2LDcwLDE0MSw0LDE5MworZGIgNDEsMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwxMzQsMCwwLDAsMTM5LDIsMTM3LDcKK2RiIDEzMSwxOTksMywyMzUsMTc5LDEzOCw2LDcwLDgsMTkyLDExNyw4LDEyOSwxOTMsMjU1LDAKK2RiIDAsMCwyMzUsMjQxLDE0MSw3Niw4LDMxLDIzNSwxMiwxNDEsMTgyLDAsMCwwLDAKK2RiIDM2LDMxLDEzNywxOTMsMTE2LDIyMywxMzcsMjUwLDEwMiwxMzksNiwxMzEsMTk4LDIsMTkzLDIzMgorZGIgMiwxNSwxMzMsNzUsMjU1LDI1NSwyNTUsMTMxLDI0OSwxLDE1LDE0OSwxOTIsNTksNjAsMzYKK2RiIDExOSw1NywxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQsMTE5LDM4LDExNCwyOQorZGIgNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwCitkYiA4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1LDIyNywxODQsOCwwCitkYiAwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE4NCw1LDAsMCwwCitkYiAyMzUsMjA2LDE4NCw2LDAsMCwwLDIzNSwxOTksMTQxLDE4MCwzOCwwLDAsMCwwCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeF9mMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeF9mMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNhMThmZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF4X2YxLmFzbQpAQCAtMCwwICsxLDc0IEBACis7ICBsem8xeF9mMS5hc20gLS0gbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdAorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyVpbmNsdWRlICJhc21pbml0LmRlZiIKK2dsb2JhbGYoX2x6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWxmKEYobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdDoKK0YobHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwyNworZGIgNDQsMTQsMjM1LDM0LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0CitkYiAxNDEsNjgsMjQsMjEsMjM1LDE2LDEzNywyNDYsMTM4LDYsNzAsNjAsMTYsMTE1LDY1LDgKK2RiIDE5MiwxMTYsMjMwLDEzMSwxOTIsNiwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOQorZGIgMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5CitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsMjUsMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNDcKK2RiIDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzksMTAsMTM3LDE1LDEsMjM5LDIzNSwxMTAKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDEzMSwyMjQsNywxMzgKK2RiIDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAsNDEsMTk0LDEzMSwxOTMsNCw1NywyMzIsMTE1CitkYiA1MywyMzUsMTA5LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MQorZGIgNzYsMjQsMzYsNDksMTkyLDIzNSwxMywxNDQsNjAsMzIsMTE0LDExNiwxMzEsMjI0LDMxLDExNgorZGIgMjMxLDE0MSw3Miw1LDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDU4LDE0MSw2OCwxNSwyNTMsMTkzLDIzMywyLDEzOSwyNiwxMzEKK2RiIDE5NCw0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAKK2RiIDI1NCwzMywyMzIsMTUsMTMyLDYzLDI1NSwyNTUsMjU1LDEzOSwyMiwxLDE5OCwxMzcsMjMsMQorZGIgMTk5LDEzOCw2LDcwLDIzMywxMTksMjU1LDI1NSwyNTUsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiAxMzUsMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDIxMiwxMjksMTkzLDI1NSwwLDAsMAorZGIgMTM4LDMwLDcwLDgsMjE5LDExNiwyNDMsMTQxLDc2LDExLDEyLDIzNSwyMywxNDEsMTE4LDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIyMywxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNDMsNDEsMTk0LDIzMywxMjIsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMgorZGIgMTM2LDcsMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywxMTAsMjU1LDI1NSwyNTUKK2RiIDEzMSwyNDksNiwxNSwxNDksMTkyLDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNAorZGIgMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2CitkYiAxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUKK2RiIDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTQ0CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeF9mMi5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeF9mMi5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxZGU4MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF4X2YyLmFzbQpAQCAtMCwwICsxLDg5IEBACis7ICBsem8xeF9mMi5hc20gLS0gbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworJWluY2x1ZGUgImFzbWluaXQuZGVmIgorZ2xvYmFsZihfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKQorZ2xvYmFsZihGKGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkpCitfbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDU1LDQ0LDE0LDIzNSw2Miw1LDI1NSwwLDAsMCwxNDEKK2RiIDg0LDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsNzgsMiwwLDAsMTM4LDMwLDcwCitkYiA4LDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwyMSwyMzUsMzAsMTQxLDE4MiwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNDksMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMTksOCwxOTIsMTE2LDIxNiwxMzEsMTkyLDYsMTQxLDg0LDcsMjUzLDU3LDIwLDM2LDE1CitkYiAxMzAsMjksMiwwLDAsMTQxLDg0LDYsMjUzLDU3LDg0LDM2LDQsMTUsMTMwLDgKK2RiIDIsMCwwLDEzNywxOTMsNDksMjMyLDE5MywyMzMsMiwzMywyMzIsMTM5LDIyLDEzMSwxOTgKK2RiIDQsMTM3LDIzLDEzMSwxOTksNCw3MywxMTcsMjQzLDQxLDE5OCw0MSwxOTksMTM4LDYsNzAKK2RiIDYwLDE2LDExNSw1MiwxNDEsODcsMyw1NywyMCwzNiwxNSwxMzAsMjI2LDEsMCwwCitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSwxNTEsMjU1LDI0NywyNTUsMjU1LDE0MSw0LDE1Miw3MCw0MQorZGIgMTk0LDU5LDg0LDM2LDQ4LDE1LDEzMCwyMDYsMSwwLDAsMTM5LDEwLDEzNywxNSwxCitkYiAyMzksMjMzLDE1MSwwLDAsMCwxMzcsMjQ2LDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIKK2RiIDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4LDMwLDE5MywyMzMsNSwxNDEsNCwyMTYsNzAKK2RiIDQxLDE5NCwxMzEsMTkzLDQsNTcsMjMyLDExNSw3MywyMzMsMTcwLDAsMCwwLDUsMjU1CitkYiAwLDAsMCwxNDEsODYsMyw1Nyw4NCwzNiw0LDE1LDEzMCwxMjMsMSwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjMxLDE0MSw3NiwyNCwzNiw0OSwxOTIsMjM1LDE3LDE0NAorZGIgNjAsMzIsMTUsMTMwLDIwMCwwLDAsMCwxMzEsMjI0LDMxLDExNiwyMjcsMTQxLDcyLDUKK2RiIDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMgorZGIgMTE0LDEwMiw1OSw4NCwzNiw0OCwxNSwxMzAsNzcsMSwwLDAsMTQxLDY4LDE1LDI1MworZGIgMTkzLDIzMywyLDU3LDQsMzYsMTUsMTMwLDU0LDEsMCwwLDEzOSwyNiwxMzEsMTk0CitkYiA0LDEzNywzMSwxMzEsMTk5LDQsNzMsMTE3LDI0MywxMzcsMTk5LDQ5LDIxOSwxMzgsNzAsMjU0CitkYiAzMywyMzIsMTUsMTMyLDIxNiwyNTQsMjU1LDI1NSwxNDEsMjAsNyw1NywyMCwzNiwxNSwxMzAKK2RiIDE0LDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUsMTMwLDI1MCwwLDAKK2RiIDAsMTM5LDIyLDEsMTk4LDEzNywyMywxLDE5OSwxMzgsNiw3MCwyMzMsNTUsMjU1LDI1NQorZGIgMjU1LDE0MSwxODAsMzgsMCwwLDAsMCw1OSw4NCwzNiw0OCwxNSwxMzAsMjMxLDAKK2RiIDAsMCwxNDEsNjgsMTUsMjUzLDU3LDQsMzYsMTUsMTMwLDIxMSwwLDAsMCwxMzUKK2RiIDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNjQsMTI5LDE5MywyNTUsMCwwLDAsMTQxCitkYiA4NiwzLDU3LDg0LDM2LDQsMTUsMTMwLDE3NSwwLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDc2LDExLDEyLDIzNSwyNywxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDYwLDE2LDExNCw0NCwxMzcsMTkzLDEzMSwyMjQsOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYKK2RiIDIxOSwxMzEsMTkzLDUsMTAyLDEzOSw2LDEzMSwxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUKK2RiIDE5MywyMzIsMiwxMTYsNTcsNDEsMTk0LDIzMywzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAKK2RiIDE0MSw4NywyLDU3LDIwLDM2LDExNCwxMDYsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNworZGIgMTM4LDkwLDEsMTM2LDk1LDEsMTMxLDE5OSwyLDIzMywzMSwyNTUsMjU1LDI1NSwxMzEsMjQ5CitkYiA2LDE1LDE0OSwxOTIsNTksNjAsMzYsMTE5LDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2CitkYiA0NCw1NywyMTQsMTE5LDM4LDExNCwyOSw0MywxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNworZGIgNTgsMjQ3LDIxNiwxMzEsMTk2LDEyLDkwLDg5LDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwCitkYiAwLDAsMjM1LDIyNywxODQsOCwwLDAsMCwyMzUsMjIwLDE4NCw0LDAsMCwwCitkYiAyMzUsMjEzLDE4NCw1LDAsMCwwLDIzNSwyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OQpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXhfczEuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXhfczEuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0MWY3ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeF9zMS5hc20KQEAgLTAsMCArMSw3NiBAQAorOyAgbHpvMXhfczEuYXNtIC0tIGx6bzF4X2RlY29tcHJlc3NfYXNtCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworJWluY2x1ZGUgImFzbWluaXQuZGVmIgorZ2xvYmFsZihfbHpvMXhfZGVjb21wcmVzc19hc20pCitnbG9iYWxmKEYobHpvMXhfZGVjb21wcmVzc19hc20pKQorX2x6bzF4X2RlY29tcHJlc3NfYXNtOgorRihsem8xeF9kZWNvbXByZXNzX2FzbSk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwzNQorZGIgNDQsMTcsNjAsNCwxMTUsNDAsMTM3LDE5MywyMzUsNTYsNSwyNTUsMCwwLDAsMTM4CitkYiAzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw2OCwyNCwxOCwyMzUsMTgsMTQxLDExNiwzOCwwCitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsNzMsOCwxOTIsMTE2LDIyOCwxMzEsMTkyLDMsMTM3LDE5MworZGIgMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzIKK2RiIDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsMzcsMTkzLDIzMiwyLDEzOCwzMAorZGIgMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNworZGIgMTM4LDY2LDEsMTM2LDcxLDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjM1LDExOQorZGIgNjAsNjQsMTE0LDUyLDEzNywxOTMsMTkzLDIzMiwyLDE0MSw4NywyNTUsMTMxLDIyNCw3LDEzOAorZGIgMzAsMTkzLDIzMyw1LDE0MSw0LDIxNiw3MCw0MSwxOTQsNjUsNTcsMjMyLDExNSw1NSwyMzUKK2RiIDExOSw1LDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0NCwxNDEsNzYsMjQKK2RiIDMzLDQ5LDE5MiwyMzUsMTUsMTQxLDExOCwwLDYwLDMyLDExNCwxMjQsMTMxLDIyNCwzMSwxMTYKK2RiIDIyOSwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw2NiwxMzcsMjAzLDE5MywyMzUsMiwxMTYsMTcsMTM5LDIsMTMxCitkYiAxOTQsNCwxMzcsNywxMzEsMTk5LDQsNzUsMTE3LDI0MywzMywyMzMsMTE2LDksMTM4LDIKK2RiIDY2LDEzNiw3LDcxLDczLDExNywyNDcsMTM4LDcwLDI1NCwzMywyMzIsMTUsMTMyLDQ2LDI1NQorZGIgMjU1LDI1NSwxMzgsMTQsNzAsMTM2LDE1LDcxLDcyLDExNywyNDcsMTM4LDYsNzAsMjMzLDEwOQorZGIgMjU1LDI1NSwyNTUsMTQ0LDE0MSwxMTYsMzgsMCwxMzUsMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMjE1CitkYiAxMjksMTkzLDI1NSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDI0MywxNDEsNzYsMTEKK2RiIDksMjM1LDI1LDE0NCwxNDEsMTE2LDM4LDAsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjIxLDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw0Myw0MSwxOTQsMjMzCitkYiAxMTQsMjU1LDI1NSwyNTUsMTQxLDExNiwzOCwwLDE5MywyMzIsMiwxMzgsMzAsMTQxLDg3LDI1NQorZGIgMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMQorZGIgMTMxLDE5OSwyLDIzMywxMTEsMjU1LDI1NSwyNTUsMTMxLDI0OSwzLDE1LDE0OSwxOTIsMTM5LDg0CitkYiAzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OAorZGIgMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUKK2RiIDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAKK2RiIDE4NCw0LDAsMCwwLDIzNSwyMTMsMTM3LDI0NiwxNDEsMTg4LDM5LDAsMCwwLDAKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF4X3MyLmFzbSBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF4X3MyLmFzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjNhY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXhfczIuYXNtCkBAIC0wLDAgKzEsOTIgQEAKKzsgIGx6bzF4X3MyLmFzbSAtLSBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlCis7Cis7ICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCis7Cis7ICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKzsgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCis7ICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorOyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzsgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCis7ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCis7ICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorOworOyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzsgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKzsgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKzsgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorOworOyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKzsgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKzsgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKzsKKworOyAvKioqKiogRE8gTk9UIEVESVQgLSBHRU5FUkFURUQgQVVUT01BVElDQUxMWSAqKioqKi8KKworJWluY2x1ZGUgImFzbWluaXQuZGVmIgorZ2xvYmFsZihfbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSkKK2dsb2JhbGYoRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKSkKK19sem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlOgorRihsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw4Nyw0NCwxNyw2MCw0LDExNSw5MiwxNDEsMjAsNyw1NworZGIgMjAsMzYsMTUsMTMwLDEzMCwyLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMTEwLDIsMCwwLDEzNywxOTMsMjM1LDExMCw1LDI1NSwwLDAsMCwxNDEsODQKK2RiIDYsMTgsNTcsODQsMzYsNCwxNSwxMzAsODcsMiwwLDAsMTM4LDMwLDcwLDgKK2RiIDIxOSwxMTYsMjMwLDE0MSw2OCwyNCwxOCwyMzUsMzEsMTQxLDE4MCwzOCwwLDAsMCwwCitkYiA1NywxMTYsMzYsNCwxNSwxMzAsNTcsMiwwLDAsMTM4LDYsNzAsNjAsMTYsMTE1CitkYiAxMjcsOCwxOTIsMTE2LDIxNSwxMzEsMTkyLDMsMTQxLDg0LDcsMCw1NywyMCwzNiwxNQorZGIgMTMwLDM3LDIsMCwwLDE0MSw4NCw2LDAsNTcsODQsMzYsNCwxNSwxMzAsMTYKK2RiIDIsMCwwLDEzNywxOTMsMTkzLDIzMiwyLDMzLDIzMywxMzksMjIsMTMxLDE5OCw0LDEzNworZGIgMjMsMTMxLDE5OSw0LDcyLDExNywyNDMsMjQzLDE2NCwxMzgsNiw3MCw2MCwxNiwxMTUsNjQKK2RiIDE0MSw4NywzLDU3LDIwLDM2LDE1LDEzMCwyMzgsMSwwLDAsMTkzLDIzMiwyLDEzOAorZGIgMzAsMTQxLDE1MSwyNTUsMjQ3LDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NCwzNgorZGIgNDgsMTUsMTMwLDIxOCwxLDAsMCwxMzgsMiwxMzYsNywxMzgsNjYsMSwxMzYsNzEKK2RiIDEsMTM4LDY2LDIsMTM2LDcxLDIsMSwyMzksMjMzLDE2MywwLDAsMCwxMzcsMjQ2CitkYiA2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwxMzEsMjI0LDcsMTM4CitkYiAzMCwxOTMsMjMzLDUsMTQxLDQsMjE2LDcwLDQxLDE5NCw2NSw1NywyMzIsMTE1LDc1LDIzMworZGIgMTgwLDAsMCwwLDUsMjU1LDAsMCwwLDE0MSw4NiwzLDU3LDg0LDM2LDQKK2RiIDE1LDEzMCwxMjUsMSwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNiwyMzEsMTQxLDc2LDI0CitkYiAzMyw0OSwxOTIsMjM1LDE5LDE0MSwxMTgsMCw2MCwzMiwxNSwxMzAsMjAwLDAsMCwwCitkYiAxMzEsMjI0LDMxLDExNiwyMjUsMTQxLDcyLDIsMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMgorZGIgMiwxMzEsMTk4LDIsNDEsMTk0LDU3LDIzMiwxMTQsMTEwLDU5LDg0LDM2LDQ4LDE1LDEzMAorZGIgNzcsMSwwLDAsMTQxLDQsMTUsNTcsNCwzNiwxNSwxMzAsNTgsMSwwLDAKK2RiIDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEsMTk0LDQsMTM3LDcsMTMxLDE5OQorZGIgNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMiw2NiwxMzYsNyw3MSw3MywxMTcKK2RiIDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsMTk2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMiwxLDAsMCwxNDEsMjAsNiw1Nyw4NCwzNiw0LDE1CitkYiAxMzAsMjM4LDAsMCwwLDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNgorZGIgNzAsMjMzLDQyLDI1NSwyNTUsMjU1LDEzNywyNDYsNTksODQsMzYsNDgsMTUsMTMwLDIyMywwCitkYiAwLDAsMTQxLDY4LDE1LDAsNTcsNCwzNiwxNSwxMzAsMjAzLDAsMCwwLDEzNQorZGIgMjE0LDI0MywxNjQsMTM3LDIxNCwyMzUsMTcwLDEyOSwxOTMsMjU1LDAsMCwwLDE0MSw4NiwzCitkYiA1Nyw4NCwzNiw0LDE1LDEzMCwxNjksMCwwLDAsMTM4LDMwLDcwLDgsMjE5LDExNgorZGIgMjMwLDE0MSw3NiwxMSw5LDIzNSwyMSwxNDQsNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNAorZGIgOCwxOTMsMjI0LDEzLDEzMSwyMjUsNywxMTYsMjI1LDEzMSwxOTMsMiwxMDIsMTM5LDYsMTMxCitkYiAxOTgsMiwxNDEsMTUxLDAsMTkyLDI1NSwyNTUsMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzCitkYiAzOCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNgorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQKK2RiIDM2LDQ4LDExNCw5MywxMzgsMiwxMzYsNywxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5CitkYiAyLDIzMyw0MywyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTkKK2RiIDU3LDEzOSw4NCwzNiw0MCwzLDg0LDM2LDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzCitkYiAxMjQsMzYsNDgsMTM5LDg0LDM2LDUyLDEzNyw1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODkKK2RiIDkxLDk0LDk1LDkzLDE5NSwxODQsMSwwLDAsMCwyMzUsMjI3LDE4NCw4LDAsMAorZGIgMCwyMzUsMjIwLDE4NCw0LDAsMCwwLDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1CitkYiAyMDYsMTg0LDYsMCwwLDAsMjM1LDE5OSwxNDQsMTQxLDE4MCwzOCwwLDAsMCwwCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9mMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9mMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQyM2RlMwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF5X2YxLmFzbQpAQCAtMCwwICsxLDc0IEBACis7ICBsem8xeV9mMS5hc20gLS0gbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdAorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyVpbmNsdWRlICJhc21pbml0LmRlZiIKK2dsb2JhbGYoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QpCitnbG9iYWxmKEYobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCkpCitfbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdDoKK0YobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCk6CitkYiA4NSw4Nyw4Niw4Myw4MSw4MiwxMzEsMjM2LDEyLDI1MiwxMzksMTE2LDM2LDQwLDEzOSwxMjQKK2RiIDM2LDQ4LDE4OSwzLDAsMCwwLDQ5LDE5Miw0OSwyMTksMTcyLDYwLDE3LDExOCwyNworZGIgNDQsMTQsMjM1LDM0LDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0CitkYiAxNDEsNjgsMjQsMjEsMjM1LDE2LDEzNywyNDYsMTM4LDYsNzAsNjAsMTYsMTE1LDY1LDgKK2RiIDE5MiwxMTYsMjMwLDEzMSwxOTIsNiwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOQorZGIgMjIsMTMxLDE5OCw0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5CitkYiAxMzgsNiw3MCw2MCwxNiwxMTUsMjUsMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNTEKK2RiIDI1NSwyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCwxMzksMTAsMTM3LDE1LDEsMjM5LDIzNSwxMTAKK2RiIDYwLDY0LDExNCw1MiwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDMzLDIzMiwxMzgsMzAKK2RiIDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzMSwxOTMsMiw1NywyMzIsMTE1LDU0CitkYiAyMzUsMTEwLDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw3NgorZGIgMjQsMzYsNDksMTkyLDIzNSwxNCwxMzcsMjQ2LDYwLDMyLDExNCwxMTYsMTMxLDIyNCwzMSwxMTYKK2RiIDIzMCwxNDEsNzIsNSwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyLDIsMTMxLDE5OCwyCitkYiA0MSwxOTQsNTcsMjMyLDExNCw1OCwxNDEsNjgsMTUsMjUzLDE5MywyMzMsMiwxMzksMjYsMTMxCitkYiAxOTQsNCwxMzcsMzEsMTMxLDE5OSw0LDczLDExNywyNDMsMTM3LDE5OSw0OSwyMTksMTM4LDcwCitkYiAyNTQsMzMsMjMyLDE1LDEzMiw2MywyNTUsMjU1LDI1NSwxMzksMjIsMSwxOTgsMTM3LDIzLDEKK2RiIDE5OSwxMzgsNiw3MCwyMzMsMTE5LDI1NSwyNTUsMjU1LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgMTM1LDIxNCw0MSwyMzMsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTIsMTI5LDE5MywyNTUsMCwwLDAKK2RiIDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMSwxMiwyMzUsMjMsMTQxLDExOCwwCitkYiA2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0LDgsMTkzLDIyNCwxMywxMzEsMjI1LDcsMTE2CitkYiAyMjMsMTMxLDE5Myw1LDEwMiwxMzksNiwxMzEsMTk4LDIsMTQxLDE1MSwwLDE5MiwyNTUsMjU1CitkYiAxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMsMTIyLDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1LDE0MSw0LDE1Miw3MCw0MSwxOTQsMTM4LDIKK2RiIDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTksMiwyMzMsMTEwLDI1NSwyNTUsMjU1CitkYiAxMzEsMjQ5LDYsMTUsMTQ5LDE5MiwxMzksODQsMzYsNDAsMyw4NCwzNiw0NCw1NywyMTQKK2RiIDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4LDEzOSw4NCwzNiw1MiwxMzcsNTgsMjQ3LDIxNgorZGIgMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NSw5MywxOTUsMTg0LDEsMCwwLDAsMjM1CitkYiAyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMCwxODQsNCwwLDAsMCwyMzUsMjEzLDE0NApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXlfZjIuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXlfZjIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NjQ0NDQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9mMi5hc20KQEAgLTAsMCArMSw4OSBAQAorOyAgbHpvMXlfZjIuYXNtIC0tIGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZQorOworOyAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorOworOyAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCis7Cis7ICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCis7ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworOyAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKzsgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCis7ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOyAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOyAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKzsKKzsgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCis7ICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCis7ICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCis7ICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKzsKKzsgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCis7ICA8bWFya3VzQG9iZXJodW1lci5jb20+Cis7ICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCis7CisKKzsgLyoqKioqIERPIE5PVCBFRElUIC0gR0VORVJBVEVEIEFVVE9NQVRJQ0FMTFkgKioqKiovCisKKyVpbmNsdWRlICJhc21pbml0LmRlZiIKK2dsb2JhbGYoX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSkKK2dsb2JhbGYoRihsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpKQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZToKK0YobHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsMTQxLDcwLDI1MywzLDY4LDM2LDQ0LDEzNyw2OAorZGIgMzYsNCwxMzcsMjQ4LDEzOSw4NCwzNiw1MiwzLDIsMTM3LDQsMzYsNDksMTkyLDQ5CitkYiAyMTksMTcyLDYwLDE3LDExOCw1NSw0NCwxNCwyMzUsNjIsNSwyNTUsMCwwLDAsMTQxCitkYiA4NCw2LDE4LDU3LDg0LDM2LDQsMTUsMTMwLDc4LDIsMCwwLDEzOCwzMCw3MAorZGIgOCwyMTksMTE2LDIzMCwxNDEsNjgsMjQsMjEsMjM1LDMwLDE0MSwxODIsMCwwLDAsMAorZGIgNTcsMTE2LDM2LDQsMTUsMTMwLDQ5LDIsMCwwLDEzOCw2LDcwLDYwLDE2LDExNQorZGIgMTE5LDgsMTkyLDExNiwyMTYsMTMxLDE5Miw2LDE0MSw4NCw3LDI1Myw1NywyMCwzNiwxNQorZGIgMTMwLDI5LDIsMCwwLDE0MSw4NCw2LDI1Myw1Nyw4NCwzNiw0LDE1LDEzMCw4CitkYiAyLDAsMCwxMzcsMTkzLDQ5LDIzMiwxOTMsMjMzLDIsMzMsMjMyLDEzOSwyMiwxMzEsMTk4CitkYiA0LDEzNywyMywxMzEsMTk5LDQsNzMsMTE3LDI0Myw0MSwxOTgsNDEsMTk5LDEzOCw2LDcwCitkYiA2MCwxNiwxMTUsNTIsMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIyNiwxLDAsMAorZGIgMTkzLDIzMiwyLDEzOCwzMCwxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEKK2RiIDE5NCw1OSw4NCwzNiw0OCwxNSwxMzAsMjA2LDEsMCwwLDEzOSwxMCwxMzcsMTUsMQorZGIgMjM5LDIzMywxNTEsMCwwLDAsMTM3LDI0Niw2MCw2NCwxMTQsNjgsMTM3LDE5MywxOTMsMjMyCitkYiAyLDE0MSw4NywyNTUsMzMsMjMyLDEzOCwzMCwxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxCitkYiAxOTQsMTMxLDE5MywyLDU3LDIzMiwxMTUsNzQsMjMzLDE3MSwwLDAsMCw1LDI1NSwwCitkYiAwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTI0LDEsMCwwLDEzOAorZGIgMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzYsNDksMTkyLDIzNSwxOCwxMzcsMjQ2CitkYiA2MCwzMiwxNSwxMzAsMjAwLDAsMCwwLDEzMSwyMjQsMzEsMTE2LDIyNiwxNDEsNzIsNQorZGIgMTAyLDEzOSw2LDE0MSw4NywyNTUsMTkzLDIzMiwyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyCitkYiAxMTQsMTAyLDU5LDg0LDM2LDQ4LDE1LDEzMCw3NywxLDAsMCwxNDEsNjgsMTUsMjUzCitkYiAxOTMsMjMzLDIsNTcsNCwzNiwxNSwxMzAsNTQsMSwwLDAsMTM5LDI2LDEzMSwxOTQKK2RiIDQsMTM3LDMxLDEzMSwxOTksNCw3MywxMTcsMjQzLDEzNywxOTksNDksMjE5LDEzOCw3MCwyNTQKK2RiIDMzLDIzMiwxNSwxMzIsMjE2LDI1NCwyNTUsMjU1LDE0MSwyMCw3LDU3LDIwLDM2LDE1LDEzMAorZGIgMTQsMSwwLDAsMTQxLDIwLDYsNTcsODQsMzYsNCwxNSwxMzAsMjUwLDAsMAorZGIgMCwxMzksMjIsMSwxOTgsMTM3LDIzLDEsMTk5LDEzOCw2LDcwLDIzMyw1NSwyNTUsMjU1CitkYiAyNTUsMTQxLDE4MCwzOCwwLDAsMCwwLDU5LDg0LDM2LDQ4LDE1LDEzMCwyMzEsMAorZGIgMCwwLDE0MSw2OCwxNSwyNTMsNTcsNCwzNiwxNSwxMzAsMjExLDAsMCwwLDEzNQorZGIgMjE0LDQxLDIzMywyNDMsMTY0LDEzNywyMTQsMjM1LDE2NCwxMjksMTkzLDI1NSwwLDAsMCwxNDEKK2RiIDg2LDMsNTcsODQsMzYsNCwxNSwxMzAsMTc1LDAsMCwwLDEzOCwzMCw3MCw4CitkYiAyMTksMTE2LDIzMCwxNDEsNzYsMTEsMTIsMjM1LDI3LDE0MSwxODAsMzgsMCwwLDAsMAorZGIgNjAsMTYsMTE0LDQ0LDEzNywxOTMsMTMxLDIyNCw4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNgorZGIgMjE5LDEzMSwxOTMsNSwxMDIsMTM5LDYsMTMxLDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NQorZGIgMTkzLDIzMiwyLDExNiw1Nyw0MSwxOTQsMjMzLDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMAorZGIgMTQxLDg3LDIsNTcsMjAsMzYsMTE0LDEwNiwxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUKK2RiIDE0MSw0LDE1Miw3MCw0MSwxOTQsNTksODQsMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3CitkYiAxMzgsOTAsMSwxMzYsOTUsMSwxMzEsMTk5LDIsMjMzLDMxLDI1NSwyNTUsMjU1LDEzMSwyNDkKK2RiIDYsMTUsMTQ5LDE5Miw1OSw2MCwzNiwxMTksNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYKK2RiIDQ0LDU3LDIxNCwxMTksMzgsMTE0LDI5LDQzLDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3CitkYiA1OCwyNDcsMjE2LDEzMSwxOTYsMTIsOTAsODksOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAKK2RiIDAsMCwyMzUsMjI3LDE4NCw4LDAsMCwwLDIzNSwyMjAsMTg0LDQsMCwwLDAKK2RiIDIzNSwyMTMsMTg0LDUsMCwwLDAsMjM1LDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9zMS5hc20gYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9zMS5hc20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTAyZjVhOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2FzbS9pMzg2L3NyY19uYXNtL2x6bzF5X3MxLmFzbQpAQCAtMCwwICsxLDc2IEBACis7ICBsem8xeV9zMS5hc20gLS0gbHpvMXlfZGVjb21wcmVzc19hc20KKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCislaW5jbHVkZSAiYXNtaW5pdC5kZWYiCitnbG9iYWxmKF9sem8xeV9kZWNvbXByZXNzX2FzbSkKK2dsb2JhbGYoRihsem8xeV9kZWNvbXByZXNzX2FzbSkpCitfbHpvMXlfZGVjb21wcmVzc19hc206CitGKGx6bzF5X2RlY29tcHJlc3NfYXNtKToKK2RiIDg1LDg3LDg2LDgzLDgxLDgyLDEzMSwyMzYsMTIsMjUyLDEzOSwxMTYsMzYsNDAsMTM5LDEyNAorZGIgMzYsNDgsMTg5LDMsMCwwLDAsNDksMTkyLDQ5LDIxOSwxNzIsNjAsMTcsMTE4LDM1CitkYiA0NCwxNyw2MCw0LDExNSw0MCwxMzcsMTkzLDIzNSw1Niw1LDI1NSwwLDAsMCwxMzgKK2RiIDMwLDcwLDgsMjE5LDExNiwyNDQsMTQxLDY4LDI0LDE4LDIzNSwxOCwxNDEsMTE2LDM4LDAKK2RiIDEzOCw2LDcwLDYwLDE2LDExNSw3Myw4LDE5MiwxMTYsMjI4LDEzMSwxOTIsMywxMzcsMTkzCitkYiAxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3LDIzLDEzMSwxOTksNCw3MgorZGIgMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSwzNywxOTMsMjMyLDIsMTM4LDMwCitkYiAxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3CitkYiAxMzgsNjYsMSwxMzYsNzEsMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzUsMTE5CitkYiA2MCw2NCwxMTQsNTIsMTM3LDE5MywxOTMsMjMyLDIsMTQxLDg3LDI1NSwzMywyMzIsMTM4LDMwCitkYiAxOTMsMjMzLDQsMTQxLDQsMTUyLDcwLDQxLDE5NCw3Myw1NywyMzIsMTE1LDU2LDIzNSwxMjAKK2RiIDUsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQ0LDE0MSw3NiwyNCwzMworZGIgNDksMTkyLDIzNSwxNiwxNDEsMTE2LDM4LDAsNjAsMzIsMTE0LDEyNCwxMzEsMjI0LDMxLDExNgorZGIgMjI4LDE0MSw3MiwyLDEwMiwxMzksNiwxNDEsODcsMjU1LDE5MywyMzIsMiwxMzEsMTk4LDIKK2RiIDQxLDE5NCw1NywyMzIsMTE0LDY2LDEzNywyMDMsMTkzLDIzNSwyLDExNiwxNywxMzksMiwxMzEKK2RiIDE5NCw0LDEzNyw3LDEzMSwxOTksNCw3NSwxMTcsMjQzLDMzLDIzMywxMTYsOSwxMzgsMgorZGIgNjYsMTM2LDcsNzEsNzMsMTE3LDI0NywxMzgsNzAsMjU0LDMzLDIzMiwxNSwxMzIsNDYsMjU1CitkYiAyNTUsMjU1LDEzOCwxNCw3MCwxMzYsMTUsNzEsNzIsMTE3LDI0NywxMzgsNiw3MCwyMzMsMTA5CitkYiAyNTUsMjU1LDI1NSwxNDQsMTQxLDExNiwzOCwwLDEzNSwyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwyMTUKK2RiIDEyOSwxOTMsMjU1LDAsMCwwLDEzOCwzMCw3MCw4LDIxOSwxMTYsMjQzLDE0MSw3NiwxMQorZGIgOSwyMzUsMjUsMTQ0LDE0MSwxMTYsMzgsMCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjEsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDQzLDQxLDE5NCwyMzMKK2RiIDExNCwyNTUsMjU1LDI1NSwxNDEsMTE2LDM4LDAsMTkzLDIzMiwyLDEzOCwzMCwxNDEsODcsMjU1CitkYiAxNDEsNCwxNTIsNzAsNDEsMTk0LDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxCitkYiAxMzEsMTk5LDIsMjMzLDExMSwyNTUsMjU1LDI1NSwxMzEsMjQ5LDMsMTUsMTQ5LDE5MiwxMzksODQKK2RiIDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMsMTI0LDM2LDQ4CitkYiAxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OSw5MSw5NCw5NQorZGIgOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwLDAsMjM1LDIyMAorZGIgMTg0LDQsMCwwLDAsMjM1LDIxMywxMzcsMjQ2LDE0MSwxODgsMzksMCwwLDAsMApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXlfczIuYXNtIGIvbHpvLTIuMDMvYXNtL2kzODYvc3JjX25hc20vbHpvMXlfczIuYXNtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjI0ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hc20vaTM4Ni9zcmNfbmFzbS9sem8xeV9zMi5hc20KQEAgLTAsMCArMSw5MiBAQAorOyAgbHpvMXlfczIuYXNtIC0tIGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUKKzsKKzsgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKzsKKzsgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorOyAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKzsgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCis7ICBBbGwgUmlnaHRzIFJlc2VydmVkLgorOworOyAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorOyAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKzsgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCis7ICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKzsKKzsgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorOyAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKzsgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKzsgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCis7Cis7ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorOyAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorOyAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorOyAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCis7Cis7ICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorOyAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorOyAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworOworCis7IC8qKioqKiBETyBOT1QgRURJVCAtIEdFTkVSQVRFRCBBVVRPTUFUSUNBTExZICoqKioqLworCislaW5jbHVkZSAiYXNtaW5pdC5kZWYiCitnbG9iYWxmKF9sem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlKQorZ2xvYmFsZihGKGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpKQorX2x6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmU6CitGKGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUpOgorZGIgODUsODcsODYsODMsODEsODIsMTMxLDIzNiwxMiwyNTIsMTM5LDExNiwzNiw0MCwxMzksMTI0CitkYiAzNiw0OCwxODksMywwLDAsMCwxNDEsNzAsMjUzLDMsNjgsMzYsNDQsMTM3LDY4CitkYiAzNiw0LDEzNywyNDgsMTM5LDg0LDM2LDUyLDMsMiwxMzcsNCwzNiw0OSwxOTIsNDkKK2RiIDIxOSwxNzIsNjAsMTcsMTE4LDg3LDQ0LDE3LDYwLDQsMTE1LDkyLDE0MSwyMCw3LDU3CitkYiAyMCwzNiwxNSwxMzAsMTMwLDIsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwxMTAsMiwwLDAsMTM3LDE5MywyMzUsMTEwLDUsMjU1LDAsMCwwLDE0MSw4NAorZGIgNiwxOCw1Nyw4NCwzNiw0LDE1LDEzMCw4NywyLDAsMCwxMzgsMzAsNzAsOAorZGIgMjE5LDExNiwyMzAsMTQxLDY4LDI0LDE4LDIzNSwzMSwxNDEsMTgwLDM4LDAsMCwwLDAKK2RiIDU3LDExNiwzNiw0LDE1LDEzMCw1NywyLDAsMCwxMzgsNiw3MCw2MCwxNiwxMTUKK2RiIDEyNyw4LDE5MiwxMTYsMjE1LDEzMSwxOTIsMywxNDEsODQsNywwLDU3LDIwLDM2LDE1CitkYiAxMzAsMzcsMiwwLDAsMTQxLDg0LDYsMCw1Nyw4NCwzNiw0LDE1LDEzMCwxNgorZGIgMiwwLDAsMTM3LDE5MywxOTMsMjMyLDIsMzMsMjMzLDEzOSwyMiwxMzEsMTk4LDQsMTM3CitkYiAyMywxMzEsMTk5LDQsNzIsMTE3LDI0MywyNDMsMTY0LDEzOCw2LDcwLDYwLDE2LDExNSw2NAorZGIgMTQxLDg3LDMsNTcsMjAsMzYsMTUsMTMwLDIzOCwxLDAsMCwxOTMsMjMyLDIsMTM4CitkYiAzMCwxNDEsMTUxLDI1NSwyNTEsMjU1LDI1NSwxNDEsNCwxNTIsNzAsNDEsMTk0LDU5LDg0LDM2CitkYiA0OCwxNSwxMzAsMjE4LDEsMCwwLDEzOCwyLDEzNiw3LDEzOCw2NiwxLDEzNiw3MQorZGIgMSwxMzgsNjYsMiwxMzYsNzEsMiwxLDIzOSwyMzMsMTYzLDAsMCwwLDEzNywyNDYKK2RiIDYwLDY0LDExNCw2OCwxMzcsMTkzLDE5MywyMzIsMiwxNDEsODcsMjU1LDMzLDIzMiwxMzgsMzAKK2RiIDE5MywyMzMsNCwxNDEsNCwxNTIsNzAsNDEsMTk0LDczLDU3LDIzMiwxMTUsNzYsMjMzLDE4MQorZGIgMCwwLDAsNSwyNTUsMCwwLDAsMTQxLDg2LDMsNTcsODQsMzYsNCwxNQorZGIgMTMwLDEyNiwxLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2LDIzMSwxNDEsNzYsMjQsMzMKK2RiIDQ5LDE5MiwyMzUsMjAsMTQxLDExNiwzOCwwLDYwLDMyLDE1LDEzMCwyMDAsMCwwLDAKK2RiIDEzMSwyMjQsMzEsMTE2LDIyNCwxNDEsNzIsMiwxMDIsMTM5LDYsMTQxLDg3LDI1NSwxOTMsMjMyCitkYiAyLDEzMSwxOTgsMiw0MSwxOTQsNTcsMjMyLDExNCwxMTAsNTksODQsMzYsNDgsMTUsMTMwCitkYiA3NywxLDAsMCwxNDEsNCwxNSw1Nyw0LDM2LDE1LDEzMCw1OCwxLDAsMAorZGIgMTM3LDIwMywxOTMsMjM1LDIsMTE2LDE3LDEzOSwyLDEzMSwxOTQsNCwxMzcsNywxMzEsMTk5CitkYiA0LDc1LDExNywyNDMsMzMsMjMzLDExNiw5LDEzOCwyLDY2LDEzNiw3LDcxLDczLDExNworZGIgMjQ3LDEzOCw3MCwyNTQsMzMsMjMyLDE1LDEzMiwxOTYsMjU0LDI1NSwyNTUsMTQxLDIwLDcsNTcKK2RiIDIwLDM2LDE1LDEzMCwyLDEsMCwwLDE0MSwyMCw2LDU3LDg0LDM2LDQsMTUKK2RiIDEzMCwyMzgsMCwwLDAsMTM4LDE0LDcwLDEzNiwxNSw3MSw3MiwxMTcsMjQ3LDEzOCw2CitkYiA3MCwyMzMsNDIsMjU1LDI1NSwyNTUsMTM3LDI0Niw1OSw4NCwzNiw0OCwxNSwxMzAsMjIzLDAKK2RiIDAsMCwxNDEsNjgsMTUsMCw1Nyw0LDM2LDE1LDEzMCwyMDMsMCwwLDAsMTM1CitkYiAyMTQsMjQzLDE2NCwxMzcsMjE0LDIzNSwxNzAsMTI5LDE5MywyNTUsMCwwLDAsMTQxLDg2LDMKK2RiIDU3LDg0LDM2LDQsMTUsMTMwLDE2OSwwLDAsMCwxMzgsMzAsNzAsOCwyMTksMTE2CitkYiAyMzAsMTQxLDc2LDExLDksMjM1LDIxLDE0NCw2MCwxNiwxMTQsNDQsMTM3LDE5MywxMzEsMjI0CitkYiA4LDE5MywyMjQsMTMsMTMxLDIyNSw3LDExNiwyMjUsMTMxLDE5MywyLDEwMiwxMzksNiwxMzEKK2RiIDE5OCwyLDE0MSwxNTEsMCwxOTIsMjU1LDI1NSwxOTMsMjMyLDIsMTE2LDU3LDQxLDE5NCwyMzMKK2RiIDM4LDI1NSwyNTUsMjU1LDE0MSwxMTYsMzgsMCwxNDEsODcsMiw1NywyMCwzNiwxMTQsMTA2CitkYiAxOTMsMjMyLDIsMTM4LDMwLDE0MSw4NywyNTUsMTQxLDQsMTUyLDcwLDQxLDE5NCw1OSw4NAorZGIgMzYsNDgsMTE0LDkzLDEzOCwyLDEzNiw3LDEzOCw5MCwxLDEzNiw5NSwxLDEzMSwxOTkKK2RiIDIsMjMzLDQzLDI1NSwyNTUsMjU1LDEzMSwyNDksMywxNSwxNDksMTkyLDU5LDYwLDM2LDExOQorZGIgNTcsMTM5LDg0LDM2LDQwLDMsODQsMzYsNDQsNTcsMjE0LDExOSwzOCwxMTQsMjksNDMKK2RiIDEyNCwzNiw0OCwxMzksODQsMzYsNTIsMTM3LDU4LDI0NywyMTYsMTMxLDE5NiwxMiw5MCw4OQorZGIgOTEsOTQsOTUsOTMsMTk1LDE4NCwxLDAsMCwwLDIzNSwyMjcsMTg0LDgsMCwwCitkYiAwLDIzNSwyMjAsMTg0LDQsMCwwLDAsMjM1LDIxMywxODQsNSwwLDAsMCwyMzUKK2RiIDIwNiwxODQsNiwwLDAsMCwyMzUsMTk5LDE0NCwxNDEsMTgwLDM4LDAsMCwwLDAKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL2NvbXBpbGUgYi9sem8tMi4wMy9hdXRvY29uZi9jb21waWxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjM1YWY4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hdXRvY29uZi9jb21waWxlCkBAIC0wLDAgKzEsMTQxIEBACisjISAvYmluL3NoCisjIFdyYXBwZXIgZm9yIGNvbXBpbGVycyB3aGljaCBkbyBub3QgdW5kZXJzdGFuZCBgLWMgLW8nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDUtMDUtMTQuMjIKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFdyaXR0ZW4gYnkgVG9tIFRyb21leSA8dHJvbWV5QGN5Z251cy5jb20+LgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGNvbW1hbmQuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBQUk9HUkFNIFtBUkdTXQorCitXcmFwcGVyIGZvciBjb21waWxlcnMgd2hpY2ggZG8gbm90IHVuZGVyc3RhbmQgYC1jIC1vJy4KK1JlbW92ZSBgLW8gZGVzdC5vJyBmcm9tIEFSR1MsIHJ1biBQUk9HUkFNIHdpdGggdGhlIHJlbWFpbmluZworYXJndW1lbnRzLCBhbmQgcmVuYW1lIHRoZSBvdXRwdXQgYXMgZXhwZWN0ZWQuCisKK0lmIHlvdSBhcmUgdHJ5aW5nIHRvIGJ1aWxkIGEgd2hvbGUgcGFja2FnZSB0aGlzIGlzIG5vdCB0aGUKK3JpZ2h0IHNjcmlwdCB0byBydW46IHBsZWFzZSBzdGFydCBieSByZWFkaW5nIHRoZSBmaWxlIGBJTlNUQUxMJy4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdiB8IC0tdiopCisgICAgZWNobyAiY29tcGlsZSAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworb2ZpbGU9CitjZmlsZT0KK2VhdD0KKworZm9yIGFyZworZG8KKyAgaWYgdGVzdCAtbiAiJGVhdCI7IHRoZW4KKyAgICBlYXQ9CisgIGVsc2UKKyAgICBjYXNlICQxIGluCisgICAgICAtbykKKwkjIGNvbmZpZ3VyZSBtaWdodCBjaG9vc2UgdG8gcnVuIGNvbXBpbGUgYXMgYGNvbXBpbGUgY2MgLW8gZm9vIGZvby5jJy4KKwkjIFNvIHdlIHN0cmlwIGAtbyBhcmcnIG9ubHkgaWYgYXJnIGlzIGFuIG9iamVjdC4KKwllYXQ9MQorCWNhc2UgJDIgaW4KKwkgICoubyB8ICoub2JqKQorCSAgICBvZmlsZT0kMgorCSAgICA7OworCSAgKikKKwkgICAgc2V0IHggIiRAIiAtbyAiJDIiCisJICAgIHNoaWZ0CisJICAgIDs7CisJZXNhYworCTs7CisgICAgICAqLmMpCisJY2ZpbGU9JDEKKwlzZXQgeCAiJEAiICIkMSIKKwlzaGlmdAorCTs7CisgICAgICAqKQorCXNldCB4ICIkQCIgIiQxIgorCXNoaWZ0CisJOzsKKyAgICBlc2FjCisgIGZpCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgLXogIiRvZmlsZSIgfHwgdGVzdCAteiAiJGNmaWxlIjsgdGhlbgorICAjIElmIG5vIGAtbycgb3B0aW9uIHdhcyBzZWVuIHRoZW4gd2UgbWlnaHQgaGF2ZSBiZWVuIGludm9rZWQgZnJvbSBhCisgICMgcGF0dGVybiBydWxlIHdoZXJlIHdlIGRvbid0IG5lZWQgb25lLiAgVGhhdCBpcyBvayAtLSB0aGlzIGlzIGEKKyAgIyBub3JtYWwgY29tcGlsYXRpb24gdGhhdCB0aGUgbG9zaW5nIGNvbXBpbGVyIGNhbiBoYW5kbGUuICBJZiBubworICAjIGAuYycgZmlsZSB3YXMgc2VlbiB0aGVuIHdlIGFyZSBwcm9iYWJseSBsaW5raW5nLiAgVGhhdCBpcyBhbHNvCisgICMgb2suCisgIGV4ZWMgIiRAIgorZmkKKworIyBOYW1lIG9mIGZpbGUgd2UgZXhwZWN0IGNvbXBpbGVyIHRvIGNyZWF0ZS4KK2NvZmlsZT1gZWNobyAiJGNmaWxlIiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wuYyQvLm8vJ2AKKworIyBDcmVhdGUgdGhlIGxvY2sgZGlyZWN0b3J5LgorIyBOb3RlOiB1c2UgYFsvLi1dJyBoZXJlIHRvIGVuc3VyZSB0aGF0IHdlIGRvbid0IHVzZSB0aGUgc2FtZSBuYW1lCisjIHRoYXQgd2UgYXJlIHVzaW5nIGZvciB0aGUgLm8gZmlsZS4gIEFsc28sIGJhc2UgdGhlIG5hbWUgb24gdGhlIGV4cGVjdGVkCisjIG9iamVjdCBmaWxlIG5hbWUsIHNpbmNlIHRoYXQgaXMgd2hhdCBtYXR0ZXJzIHdpdGggYSBwYXJhbGxlbCBidWlsZC4KK2xvY2tkaXI9YGVjaG8gIiRjb2ZpbGUiIHwgc2VkIC1lICdzfFsvLi1dfF98ZydgLmQKK3doaWxlIHRydWU7IGRvCisgIGlmIG1rZGlyICIkbG9ja2RpciIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgYnJlYWsKKyAgZmkKKyAgc2xlZXAgMQorZG9uZQorIyBGSVhNRTogcmFjZSBjb25kaXRpb24gaGVyZSBpZiB1c2VyIGtpbGxzIGJldHdlZW4gbWtkaXIgYW5kIHRyYXAuCit0cmFwICJybWRpciAnJGxvY2tkaXInOyBleGl0IDEiIDEgMiAxNQorCisjIFJ1biB0aGUgY29tcGlsZS4KKyIkQCIKK3JldD0kPworCitpZiB0ZXN0IC1mICIkY29maWxlIjsgdGhlbgorICBtdiAiJGNvZmlsZSIgIiRvZmlsZSIKK2VsaWYgdGVzdCAtZiAiJHtjb2ZpbGV9YmoiOyB0aGVuCisgIG12ICIke2NvZmlsZX1iaiIgIiRvZmlsZSIKK2ZpCisKK3JtZGlyICIkbG9ja2RpciIKK2V4aXQgJHJldAorCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9jb25maWcuZ3Vlc3MgYi9sem8tMi4wMy9hdXRvY29uZi9jb25maWcuZ3Vlc3MKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYzc2MDdjNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2F1dG9jb25mL2NvbmZpZy5ndWVzcwpAQCAtMCwwICsxLDE1MjYgQEAKKyMhIC9iaW4vc2gKKyMgQXR0ZW1wdCB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZS4KKyMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCisjICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorIyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCit0aW1lc3RhbXA9JzIwMDgtMDQtMTQnCisKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisjIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgUGVyIEJvdGhuZXIgPHBlckBib3RobmVyLmNvbT4uCisjIFBsZWFzZSBzZW5kIHBhdGNoZXMgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+LiAgU3VibWl0IGEgY29udGV4dAorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBDaGFuZ2VMb2cgZW50cnkuCisjCisjIFRoaXMgc2NyaXB0IGF0dGVtcHRzIHRvIGd1ZXNzIGEgY2Fub25pY2FsIHN5c3RlbSBuYW1lIHNpbWlsYXIgdG8KKyMgY29uZmlnLnN1Yi4gIElmIGl0IHN1Y2NlZWRzLCBpdCBwcmludHMgdGhlIHN5c3RlbSBuYW1lIG9uIHN0ZG91dCwgYW5kCisjIGV4aXRzIHdpdGggMC4gIE90aGVyd2lzZSwgaXQgZXhpdHMgd2l0aCAxLgorIworIyBUaGUgcGxhbiBpcyB0aGF0IHRoaXMgY2FuIGJlIGNhbGxlZCBieSBjb25maWd1cmUgc2NyaXB0cyBpZiB5b3UKKyMgZG9uJ3Qgc3BlY2lmeSBhbiBleHBsaWNpdCBidWlsZCBzeXN0ZW0gdHlwZS4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0KKworT3V0cHV0IHRoZSBjb25maWd1cmF0aW9uIG5hbWUgb2YgdGhlIHN5c3RlbSBcYCRtZScgaXMgcnVuIG9uLgorCitPcGVyYXRpb24gbW9kZXM6CisgIC1oLCAtLWhlbHAgICAgICAgICBwcmludCB0aGlzIGhlbHAsIHRoZW4gZXhpdAorICAtdCwgLS10aW1lLXN0YW1wICAgcHJpbnQgZGF0ZSBvZiBsYXN0IG1vZGlmaWNhdGlvbiwgdGhlbiBleGl0CisgIC12LCAtLXZlcnNpb24gICAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisKK1JlcG9ydCBidWdzIGFuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4iCisKK3ZlcnNpb249IlwKK0dOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCisKK09yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KK0NvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKKzIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK1RoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCit3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCisKK2hlbHA9IgorVHJ5IFxgJG1lIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorCisjIFBhcnNlIGNvbW1hbmQgbGluZQord2hpbGUgdGVzdCAkIyAtZ3QgMCA7IGRvCisgIGNhc2UgJDEgaW4KKyAgICAtLXRpbWUtc3RhbXAgfCAtLXRpbWUqIHwgLXQgKQorICAgICAgIGVjaG8gIiR0aW1lc3RhbXAiIDsgZXhpdCA7OworICAgIC0tdmVyc2lvbiB8IC12ICkKKyAgICAgICBlY2hvICIkdmVyc2lvbiIgOyBleGl0IDs7CisgICAgLS1oZWxwIHwgLS1oKiB8IC1oICkKKyAgICAgICBlY2hvICIkdXNhZ2UiOyBleGl0IDs7CisgICAgLS0gKSAgICAgIyBTdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICAgc2hpZnQ7IGJyZWFrIDs7CisgICAgLSApCSMgVXNlIHN0ZGluIGFzIGlucHV0LgorICAgICAgIGJyZWFrIDs7CisgICAgLSogKQorICAgICAgIGVjaG8gIiRtZTogaW52YWxpZCBvcHRpb24gJDEkaGVscCIgPiYyCisgICAgICAgZXhpdCAxIDs7CisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgZWNobyAiJG1lOiB0b28gbWFueSBhcmd1bWVudHMkaGVscCIgPiYyCisgIGV4aXQgMQorZmkKKwordHJhcCAnZXhpdCAxJyAxIDIgMTUKKworIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQorIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcworIyB0ZW1wb3JhcnkgZmlsZXMgdG8gYmUgY3JlYXRlZCBhbmQsIGFzIHlvdSBjYW4gc2VlIGJlbG93LCBpdCBpcyBhCisjIGhlYWRhY2hlIHRvIGRlYWwgd2l0aCBpbiBhIHBvcnRhYmxlIGZhc2hpb24uCisKKyMgSGlzdG9yaWNhbGx5LCBgQ0NfRk9SX0JVSUxEJyB1c2VkIHRvIGJlIG5hbWVkIGBIT1NUX0NDJy4gV2Ugc3RpbGwKKyMgdXNlIGBIT1NUX0NDJyBpZiBkZWZpbmVkLCBidXQgaXQgaXMgZGVwcmVjYXRlZC4KKworIyBQb3J0YWJsZSB0bXAgZGlyZWN0b3J5IGNyZWF0aW9uIGluc3BpcmVkIGJ5IHRoZSBBdXRvY29uZiB0ZWFtLgorCitzZXRfY2NfZm9yX2J1aWxkPScKK3RyYXAgImV4aXRjb2RlPVwkPzsgKHJtIC1mIFwkdG1wZmlsZXMgMj4vZGV2L251bGw7IHJtZGlyIFwkdG1wIDI+L2Rldi9udWxsKSAmJiBleGl0IFwkZXhpdGNvZGUiIDAgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgMSAyIDEzIDE1IDsKKzogJHtUTVBESVI9L3RtcH0gOworIHsgdG1wPWAodW1hc2sgMDc3ICYmIG1rdGVtcCAtZCAiJFRNUERJUi9jZ1hYWFhYWCIpIDI+L2Rldi9udWxsYCAmJiB0ZXN0IC1uICIkdG1wIiAmJiB0ZXN0IC1kICIkdG1wIiA7IH0gfHwKKyB7IHRlc3QgLW4gIiRSQU5ET00iICYmIHRtcD0kVE1QRElSL2NnJCQtJFJBTkRPTSAmJiAodW1hc2sgMDc3ICYmIG1rZGlyICR0bXApIDsgfSB8fAorIHsgdG1wPSRUTVBESVIvY2ctJCQgJiYgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKSAmJiBlY2hvICJXYXJuaW5nOiBjcmVhdGluZyBpbnNlY3VyZSB0ZW1wIGRpcmVjdG9yeSIgPiYyIDsgfSB8fAorIHsgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAkVE1QRElSIiA+JjIgOyBleGl0IDEgOyB9IDsKK2R1bW15PSR0bXAvZHVtbXkgOwordG1wZmlsZXM9IiRkdW1teS5jICRkdW1teS5vICRkdW1teS5yZWwgJGR1bW15IiA7CitjYXNlICRDQ19GT1JfQlVJTEQsJEhPU1RfQ0MsJENDIGluCisgLCwpICAgIGVjaG8gImludCB4OyIgPiAkZHVtbXkuYyA7CisJZm9yIGMgaW4gY2MgZ2NjIGM4OSBjOTkgOyBkbworCSAgaWYgKCRjIC1jIC1vICRkdW1teS5vICRkdW1teS5jKSA+L2Rldi9udWxsIDI+JjEgOyB0aGVuCisJICAgICBDQ19GT1JfQlVJTEQ9IiRjIjsgYnJlYWsgOworCSAgZmkgOworCWRvbmUgOworCWlmIHRlc3QgeCIkQ0NfRk9SX0JVSUxEIiA9IHggOyB0aGVuCisJICBDQ19GT1JfQlVJTEQ9bm9fY29tcGlsZXJfZm91bmQgOworCWZpCisJOzsKKyAsLCopICAgQ0NfRk9SX0JVSUxEPSRDQyA7OworICwqLCopICBDQ19GT1JfQlVJTEQ9JEhPU1RfQ0MgOzsKK2VzYWMgOyBzZXRfY2NfZm9yX2J1aWxkPSA7JworCisjIFRoaXMgaXMgbmVlZGVkIHRvIGZpbmQgdW5hbWUgb24gYSBQeXJhbWlkIE9TeCB3aGVuIHJ1biBpbiB0aGUgQlNEIHVuaXZlcnNlLgorIyAoZ2hhemlAbm9jLnJ1dGdlcnMuZWR1IDE5OTQtMDgtMjQpCitpZiAodGVzdCAtZiAvLmF0dGJpbi91bmFtZSkgPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCVBBVEg9JFBBVEg6Ly5hdHRiaW4gOyBleHBvcnQgUEFUSAorZmkKKworVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHwgVU5BTUVfTUFDSElORT11bmtub3duCitVTkFNRV9SRUxFQVNFPWAodW5hbWUgLXIpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9SRUxFQVNFPXVua25vd24KK1VOQU1FX1NZU1RFTT1gKHVuYW1lIC1zKSAyPi9kZXYvbnVsbGAgIHx8IFVOQU1FX1NZU1RFTT11bmtub3duCitVTkFNRV9WRVJTSU9OPWAodW5hbWUgLXYpIDI+L2Rldi9udWxsYCB8fCBVTkFNRV9WRVJTSU9OPXVua25vd24KKworIyBOb3RlOiBvcmRlciBpcyBzaWduaWZpY2FudCAtIHRoZSBjYXNlIGJyYW5jaGVzIGFyZSBub3QgZXhjbHVzaXZlLgorCitjYXNlICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIGluCisgICAgKjpOZXRCU0Q6KjoqKQorCSMgTmV0QlNEIChuYnNkKSB0YXJnZXRzIHNob3VsZCAod2hlcmUgYXBwbGljYWJsZSkgbWF0Y2ggb25lIG9yCisJIyBtb3JlIG9mIHRoZSB0dXBwbGVzOiAqLSotbmV0YnNkZWxmKiwgKi0qLW5ldGJzZGFvdXQqLAorCSMgKi0qLW5ldGJzZGVjb2ZmKiBhbmQgKi0qLW5ldGJzZCouICBGb3IgdGFyZ2V0cyB0aGF0IHJlY2VudGx5CisJIyBzd2l0Y2hlZCB0byBFTEYsICotKi1uZXRic2QqIHdvdWxkIHNlbGVjdCB0aGUgb2xkCisJIyBvYmplY3QgZmlsZSBmb3JtYXQuICBUaGlzIHByb3ZpZGVzIGJvdGggZm9yd2FyZAorCSMgY29tcGF0aWJpbGl0eSBhbmQgYSBjb25zaXN0ZW50IG1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIHRoZQorCSMgb2JqZWN0IGZpbGUgZm9ybWF0LgorCSMKKwkjIE5vdGU6IE5ldEJTRCBkb2Vzbid0IHBhcnRpY3VsYXJseSBjYXJlIGFib3V0IHRoZSB2ZW5kb3IKKwkjIHBvcnRpb24gb2YgdGhlIG5hbWUuICBXZSBhbHdheXMgc2V0IGl0IHRvICJ1bmtub3duIi4KKwlzeXNjdGw9InN5c2N0bCAtbiBody5tYWNoaW5lX2FyY2giCisJVU5BTUVfTUFDSElORV9BUkNIPWAoL3NiaW4vJHN5c2N0bCAyPi9kZXYvbnVsbCB8fCBcCisJICAgIC91c3Ivc2Jpbi8kc3lzY3RsIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bilgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FX0FSQ0h9IiBpbgorCSAgICBhcm1lYikgbWFjaGluZT1hcm1lYi11bmtub3duIDs7CisJICAgIGFybSopIG1hY2hpbmU9YXJtLXVua25vd24gOzsKKwkgICAgc2gzZWwpIG1hY2hpbmU9c2hsLXVua25vd24gOzsKKwkgICAgc2gzZWIpIG1hY2hpbmU9c2gtdW5rbm93biA7OworCSAgICBzaDVlbCkgbWFjaGluZT1zaDVsZS11bmtub3duIDs7CisJICAgICopIG1hY2hpbmU9JHtVTkFNRV9NQUNISU5FX0FSQ0h9LXVua25vd24gOzsKKwllc2FjCisJIyBUaGUgT3BlcmF0aW5nIFN5c3RlbSBpbmNsdWRpbmcgb2JqZWN0IGZvcm1hdCwgaWYgaXQgaGFzIHN3aXRjaGVkCisJIyB0byBFTEYgcmVjZW50bHksIG9yIHdpbGwgaW4gdGhlIGZ1dHVyZS4KKwljYXNlICIke1VOQU1FX01BQ0hJTkVfQVJDSH0iIGluCisJICAgIGFybSp8aTM4NnxtNjhrfG5zMzJrfHNoMyp8c3BhcmN8dmF4KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIGVjaG8gX19FTEZfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJCQl8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsCisJCXRoZW4KKwkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KKwkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPworCQkgICAgb3M9bmV0YnNkCisJCWVsc2UKKwkJICAgIG9zPW5ldGJzZGVsZgorCQlmaQorCQk7OworCSAgICAqKQorCSAgICAgICAgb3M9bmV0YnNkCisJCTs7CisJZXNhYworCSMgVGhlIE9TIHJlbGVhc2UKKwkjIERlYmlhbiBHTlUvTmV0QlNEIG1hY2hpbmVzIGhhdmUgYSBkaWZmZXJlbnQgdXNlcmxhbmQsIGFuZAorCSMgdGh1cywgbmVlZCBhIGRpc3RpbmN0IHRyaXBsZXQuIEhvd2V2ZXIsIHRoZXkgZG8gbm90IG5lZWQKKwkjIGtlcm5lbCB2ZXJzaW9uIGluZm9ybWF0aW9uLCBzbyBpdCBjYW4gYmUgcmVwbGFjZWQgd2l0aCBhCisJIyBzdWl0YWJsZSB0YWcsIGluIHRoZSBzdHlsZSBvZiBsaW51eC1nbnUuCisJY2FzZSAiJHtVTkFNRV9WRVJTSU9OfSIgaW4KKwkgICAgRGViaWFuKikKKwkJcmVsZWFzZT0nLWdudScKKwkJOzsKKwkgICAgKikKKwkJcmVsZWFzZT1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bLV9dLiovXC4vJ2AKKwkJOzsKKwllc2FjCisJIyBTaW5jZSBDUFVfVFlQRS1NQU5VRkFDVFVSRVItS0VSTkVMLU9QRVJBVElOR19TWVNURU06CisJIyBjb250YWlucyByZWR1bmRhbnQgaW5mb3JtYXRpb24sIHRoZSBzaG9ydGVyIGZvcm06CisJIyBDUFVfVFlQRS1NQU5VRkFDVFVSRVItT1BFUkFUSU5HX1NZU1RFTSBpcyB1c2VkLgorCWVjaG8gIiR7bWFjaGluZX0tJHtvc30ke3JlbGVhc2V9IgorCWV4aXQgOzsKKyAgICAqOk9wZW5CU0Q6KjoqKQorCVVOQU1FX01BQ0hJTkVfQVJDSD1gYXJjaCB8IHNlZCAncy9PcGVuQlNELi8vJ2AKKwllY2hvICR7VU5BTUVfTUFDSElORV9BUkNIfS11bmtub3duLW9wZW5ic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6ZWtrb0JTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZWtrb2JzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpTb2xpZEJTRDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tc29saWRic2Qke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1hY3BwYzpNaXJCU0Q6KjoqKQorCWVjaG8gcG93ZXJwYy11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpNaXJCU0Q6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW1pcmJzZCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYWxwaGE6T1NGMToqOiopCisJY2FzZSAkVU5BTUVfUkVMRUFTRSBpbgorCSo0LjApCisJCVVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQzfSdgCisJCTs7CisJKjUuKikKKwkgICAgICAgIFVOQU1FX1JFTEVBU0U9YC91c3Ivc2Jpbi9zaXplciAtdiB8IGF3ayAne3ByaW50ICQ0fSdgCisJCTs7CisJZXNhYworCSMgQWNjb3JkaW5nIHRvIENvbXBhcSwgL3Vzci9zYmluL3BzcmluZm8gaGFzIGJlZW4gYXZhaWxhYmxlIG9uCisJIyBPU0YvMSBhbmQgVHJ1NjQgc3lzdGVtcyBwcm9kdWNlZCBzaW5jZSAxOTk1LiAgSSBob3BlIHRoYXQKKwkjIGNvdmVycyBtb3N0IHN5c3RlbXMgcnVubmluZyB0b2RheS4gIFRoaXMgY29kZSBwaXBlcyB0aGUgQ1BVCisJIyB0eXBlcyB0aHJvdWdoIGhlYWQgLW4gMSwgc28gd2Ugb25seSBkZXRlY3QgdGhlIHR5cGUgb2YgQ1BVIDAuCisJQUxQSEFfQ1BVX1RZUEU9YC91c3Ivc2Jpbi9wc3JpbmZvIC12IHwgc2VkIC1uIC1lICdzL14gIFRoZSBhbHBoYSBcKC4qXCkgcHJvY2Vzc29yLiokL1wxL3AnIHwgaGVhZCAtbiAxYAorCWNhc2UgIiRBTFBIQV9DUFVfVFlQRSIgaW4KKwkgICAgIkVWNCAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJFVjQuNSAoMjEwNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGEiIDs7CisJICAgICJMQ0E0ICgyMTA2Ni8yMTA2OCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYSIgOzsKKwkgICAgIkVWNSAoMjExNjQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjUiIDs7CisJICAgICJFVjUuNiAoMjExNjRBKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY1NiIgOzsKKwkgICAgIkVWNS42ICgyMTE2NFBDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhcGNhNTYiIDs7CisJICAgICJFVjUuNyAoMjExNjRQQykiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYXBjYTU3IiA7OworCSAgICAiRVY2ICgyMTI2NCkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NiIgOzsKKwkgICAgIkVWNi43ICgyMTI2NEEpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY3IiA7OworCSAgICAiRVY2LjhDQiAoMjEyNjRDKSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY2OCIgOzsKKwkgICAgIkVWNi44QUwgKDIxMjY0QikiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjgiIDs7CisJICAgICJFVjYuOENYICgyMTI2NEQpIikKKwkJVU5BTUVfTUFDSElORT0iYWxwaGFldjY4IiA7OworCSAgICAiRVY2LjlBICgyMTI2NC9FVjY5QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NjkiIDs7CisJICAgICJFVjcgKDIxMzY0KSIpCisJCVVOQU1FX01BQ0hJTkU9ImFscGhhZXY3IiA7OworCSAgICAiRVY3LjkgKDIxMzY0QSkiKQorCQlVTkFNRV9NQUNISU5FPSJhbHBoYWV2NzkiIDs7CisJZXNhYworCSMgQSBQbi5uIHZlcnNpb24gaXMgYSBwYXRjaGVkIHZlcnNpb24uCisJIyBBIFZuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIHZlcnNpb24uCisJIyBBIFRuLm4gdmVyc2lvbiBpcyBhIHJlbGVhc2VkIGZpZWxkIHRlc3QgdmVyc2lvbi4KKwkjIEEgWG4ubiB2ZXJzaW9uIGlzIGFuIHVucmVsZWFzZWQgZXhwZXJpbWVudGFsIGJhc2VsZXZlbC4KKwkjIDEuMiB1c2VzICIxLjIiIGZvciB1bmFtZSAtci4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tZGVjLW9zZmBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXltQVlRYXS8vJyB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKwlleGl0IDs7CisgICAgQWxwaGFcICo6V2luZG93c19OVCo6KikKKwkjIEhvdyBkbyB3ZSBrbm93IGl0J3MgSW50ZXJpeCByYXRoZXIgdGhhbiB0aGUgZ2VuZXJpYyBQT1NJWCBzdWJzeXN0ZW0/CisJIyBTaG91bGQgd2UgY2hhbmdlIFVOQU1FX01BQ0hJTkUgYmFzZWQgb24gdGhlIG91dHB1dCBvZiB1bmFtZSBpbnN0ZWFkCisJIyBvZiB0aGUgc3BlY2lmaWMgQWxwaGEgbW9kZWw/CisJZWNobyBhbHBoYS1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIDIxMDY0OldpbmRvd3NfTlQ6NTA6MykKKwllY2hvIGFscGhhLWRlYy13aW5udDMuNQorCWV4aXQgOzsKKyAgICBBbWlnYSo6VU5JWF9TeXN0ZW1fVjo0LjA6KikKKwllY2hvIG02OGstdW5rbm93bi1zeXN2NAorCWV4aXQgOzsKKyAgICAqOltBYV1taWdhW09vXVtTc106KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWFtaWdhb3MKKwlleGl0IDs7CisgICAgKjpbTW1db3JwaFtPb11bU3NdOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1tb3JwaG9zCisJZXhpdCA7OworICAgICo6T1MvMzkwOio6KikKKwllY2hvIGkzNzAtaWJtLW9wZW5lZGl0aW9uCisJZXhpdCA7OworICAgICo6ei9WTToqOiopCisJZWNobyBzMzkwLWlibS16dm1vZQorCWV4aXQgOzsKKyAgICAqOk9TNDAwOio6KikKKyAgICAgICAgZWNobyBwb3dlcnBjLWlibS1vczQwMAorCWV4aXQgOzsKKyAgICBhcm06UklTQyo6MS5bMDEyXSo6Knxhcm06cmlzY2l4OjEuWzAxMl0qOiopCisJZWNobyBhcm0tYWNvcm4tcmlzY2l4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBhcm06cmlzY29zOio6Knxhcm06UklTQ09TOio6KikKKwllY2hvIGFybS11bmtub3duLXJpc2NvcworCWV4aXQgOzsKKyAgICBTUjI/MDE6SEktVVgvTVBQOio6KiB8IFNSODAwMDpISS1VWC9NUFA6KjoqKQorCWVjaG8gaHBwYTEuMS1oaXRhY2hpLWhpdXhtcHAKKwlleGl0IDs7CisgICAgUHlyYW1pZCo6T1N4KjoqOiogfCBNSVMqOk9TeCo6KjoqIHwgTUlTKjpTTVBfREMtT1N4KjoqOiopCisJIyBha2VlQHdwZGlzMDMud3BhZmIuYWYubWlsIChFYXJsZSBGLiBBa2UpIGNvbnRyaWJ1dGVkIE1JUyBhbmQgTklMRS4KKwlpZiB0ZXN0ICJgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsYCIgPSBhdHQgOyB0aGVuCisJCWVjaG8gcHlyYW1pZC1weXJhbWlkLXN5c3YzCisJZWxzZQorCQllY2hvIHB5cmFtaWQtcHlyYW1pZC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBOSUxFKjoqOio6ZGNvc3gpCisJZWNobyBweXJhbWlkLXB5cmFtaWQtc3ZyNAorCWV4aXQgOzsKKyAgICBEUlM/NjAwMDp1bml4OjQuMDo2KikKKwllY2hvIHNwYXJjLWljbC1ueDYKKwlleGl0IDs7CisgICAgRFJTPzYwMDA6VU5JWF9TVjo0LjIqOjcqIHwgRFJTPzYwMDA6aXNpczo0LjIqOjcqKQorCWNhc2UgYC91c3IvYmluL3VuYW1lIC1wYCBpbgorCSAgICBzcGFyYykgZWNobyBzcGFyYy1pY2wtbng3OyBleGl0IDs7CisJZXNhYyA7OworICAgIHN1bjRIOlN1bk9TOjUuKjoqKQorCWVjaG8gc3BhcmMtaGFsLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjUuKjoqIHwgdGFkcG9sZSo6U3VuT1M6NS4qOiopCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCisJZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXhpdCA7OworICAgIHN1bjQqOlN1bk9TOjYqOiopCisJIyBBY2NvcmRpbmcgdG8gY29uZmlnLnN1YiwgdGhpcyBpcyB0aGUgcHJvcGVyIHdheSB0byBjYW5vbmljYWxpemUKKwkjIFN1bk9TNi4gIEhhcmQgdG8gZ3Vlc3MgZXhhY3RseSB3aGF0IFN1bk9TNiB3aWxsIGJlIGxpa2UsIGJ1dAorCSMgaXQncyBsaWtlbHkgdG8gYmUgbW9yZSBsaWtlIFNvbGFyaXMgdGhhbiBTdW5PUzQuCisJZWNobyBzcGFyYy1zdW4tc29sYXJpczNgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgc3VuNCo6U3VuT1M6KjoqKQorCWNhc2UgImAvdXNyL2Jpbi9hcmNoIC1rYCIgaW4KKwkgICAgU2VyaWVzKnxTNCopCisJCVVOQU1FX1JFTEVBU0U9YHVuYW1lIC12YAorCQk7OworCWVzYWMKKwkjIEphcGFuZXNlIExhbmd1YWdlIHZlcnNpb25zIGhhdmUgYSB2ZXJzaW9uIG51bWJlciBsaWtlIGA0LjEuMy1KTCcuCisJZWNobyBzcGFyYy1zdW4tc3Vub3NgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vJ2AKKwlleGl0IDs7CisgICAgc3VuMyo6U3VuT1M6KjoqKQorCWVjaG8gbTY4ay1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHN1bio6Kjo0LjJCU0Q6KikKKwlVTkFNRV9SRUxFQVNFPWAoc2VkIDFxIC9ldGMvbW90ZCB8IGF3ayAne3ByaW50IHN1YnN0cigkNSwxLDMpfScpIDI+L2Rldi9udWxsYAorCXRlc3QgIngke1VOQU1FX1JFTEVBU0V9IiA9ICJ4IiAmJiBVTkFNRV9SRUxFQVNFPTMKKwljYXNlICJgL2Jpbi9hcmNoYCIgaW4KKwkgICAgc3VuMykKKwkJZWNobyBtNjhrLXN1bi1zdW5vcyR7VU5BTUVfUkVMRUFTRX0KKwkJOzsKKwkgICAgc3VuNCkKKwkJZWNobyBzcGFyYy1zdW4tc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJCTs7CisJZXNhYworCWV4aXQgOzsKKyAgICBhdXNocDpTdW5PUzoqOiopCisJZWNobyBzcGFyYy1hdXNwZXgtc3Vub3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICMgVGhlIHNpdHVhdGlvbiBmb3IgTWlOVCBpcyBhIGxpdHRsZSBjb25mdXNpbmcuICBUaGUgbWFjaGluZSBuYW1lCisgICAgIyBjYW4gYmUgdmlydHVhbGx5IGV2ZXJ5dGhpbmcgKGV2ZXJ5dGhpbmcgd2hpY2ggaXMgbm90CisgICAgIyAiYXRhcmlzdCIgb3IgImF0YXJpc3RlIiBhdCBsZWFzdCBzaG91bGQgaGF2ZSBhIHByb2Nlc3NvcgorICAgICMgPiBtNjgwMDApLiAgVGhlIHN5c3RlbSBuYW1lIHJhbmdlcyBmcm9tICJNaU5UIiBvdmVyICJGcmVlTWlOVCIKKyAgICAjIHRvIHRoZSBsb3dlcmNhc2UgdmVyc2lvbiAibWludCIgKG9yICJmcmVlbWludCIpLiAgRmluYWxseQorICAgICMgdGhlIHN5c3RlbSBuYW1lICJUT1MiIGRlbm90ZXMgYSBzeXN0ZW0gd2hpY2ggaXMgYWN0dWFsbHkgbm90CisgICAgIyBNaU5ULiAgQnV0IE1pTlQgaXMgZG93bndhcmQgY29tcGF0aWJsZSB0byBUT1MsIHNvIHRoaXMgc2hvdWxkCisgICAgIyBiZSBubyBwcm9ibGVtLgorICAgIGF0YXJpc3RbZV06Kk1pTlQ6KjoqIHwgYXRhcmlzdFtlXToqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstYXRhcmktbWludCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgYXRhcmkqOipNaU5UOio6KiB8IGF0YXJpKjoqbWludDoqOiogfCBhdGFyaXN0W2VdOipUT1M6KjoqKQorCWVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgKmZhbGNvbio6Kk1pTlQ6KjoqIHwgKmZhbGNvbio6Km1pbnQ6KjoqIHwgKmZhbGNvbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1hdGFyaS1taW50JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBtaWxhbio6Kk1pTlQ6KjoqIHwgbWlsYW4qOiptaW50Oio6KiB8ICptaWxhbio6KlRPUzoqOiopCisgICAgICAgIGVjaG8gbTY4ay1taWxhbi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgaGFkZXMqOipNaU5UOio6KiB8IGhhZGVzKjoqbWludDoqOiogfCAqaGFkZXMqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstaGFkZXMtbWludCR7VU5BTUVfUkVMRUFTRX0KKyAgICAgICAgZXhpdCA7OworICAgICo6Kk1pTlQ6KjoqIHwgKjoqbWludDoqOiogfCAqOipUT1M6KjoqKQorICAgICAgICBlY2hvIG02OGstdW5rbm93bi1taW50JHtVTkFNRV9SRUxFQVNFfQorICAgICAgICBleGl0IDs7CisgICAgbTY4azptYWNodGVuOio6KikKKwllY2hvIG02OGstYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcG93ZXJwYzptYWNodGVuOio6KikKKwllY2hvIHBvd2VycGMtYXBwbGUtbWFjaHRlbiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUklTQyo6TWFjaDoqOiopCisJZWNobyBtaXBzLWRlYy1tYWNoX2JzZDQuMworCWV4aXQgOzsKKyAgICBSSVNDKjpVTFRSSVg6KjoqKQorCWVjaG8gbWlwcy1kZWMtdWx0cml4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBWQVgqOlVMVFJJWCo6KjoqKQorCWVjaG8gdmF4LWRlYy11bHRyaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIDIwMjA6Q0xJWDoqOiogfCAyNDMwOkNMSVg6KjoqKQorCWVjaG8gY2xpcHBlci1pbnRlcmdyYXBoLWNsaXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1pcHM6KjoqOlVNSVBTIHwgbWlwczoqOio6UklTQ29zKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworI2lmZGVmIF9fY3BsdXNwbHVzCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIGZvciBwcmludGYoKSBwcm90b3R5cGUgKi8KKwlpbnQgbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworI2Vsc2UKKwlpbnQgbWFpbiAoYXJnYywgYXJndikgaW50IGFyZ2M7IGNoYXIgKmFyZ3ZbXTsgeworI2VuZGlmCisJI2lmIGRlZmluZWQgKGhvc3RfbWlwcykgJiYgZGVmaW5lZCAoTUlQU0VCKQorCSNpZiBkZWZpbmVkIChTWVNUWVBFX1NZU1YpCisJICBwcmludGYgKCJtaXBzLW1pcHMtcmlzY29zJXNzeXN2XG4iLCBhcmd2WzFdKTsgZXhpdCAoMCk7CisJI2VuZGlmCisJI2lmIGRlZmluZWQgKFNZU1RZUEVfU1ZSNCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc3N2cjRcbiIsIGFyZ3ZbMV0pOyBleGl0ICgwKTsKKwkjZW5kaWYKKwkjaWYgZGVmaW5lZCAoU1lTVFlQRV9CU0Q0MykgfHwgZGVmaW5lZChTWVNUWVBFX0JTRCkKKwkgIHByaW50ZiAoIm1pcHMtbWlwcy1yaXNjb3Mlc2JzZFxuIiwgYXJndlsxXSk7IGV4aXQgKDApOworCSNlbmRpZgorCSNlbmRpZgorCSAgZXhpdCAoLTEpOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmCisJICBkdW1teWFyZz1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfCBzZWQgLW4gJ3MvXChbMC05XSpcKS4qL1wxL3AnYCAmJgorCSAgU1lTVEVNX05BTUU9YCRkdW1teSAkZHVtbXlhcmdgICYmCisJICAgIHsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gbWlwcy1taXBzLXJpc2NvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTW90b3JvbGE6UG93ZXJNQVhfT1M6KjoqKQorCWVjaG8gcG93ZXJwYy1tb3Rvcm9sYS1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBNb3Rvcm9sYToqOjQuMzpQTDgtKikKKwllY2hvIHBvd2VycGMtaGFycmlzLXBvd2VybWF4CisJZXhpdCA7OworICAgIE5pZ2h0X0hhd2s6KjoqOlBvd2VyTUFYX09TIHwgU3luZXJneTpQb3dlck1BWF9PUzoqOiopCisJZWNobyBwb3dlcnBjLWhhcnJpcy1wb3dlcm1heAorCWV4aXQgOzsKKyAgICBOaWdodF9IYXdrOlBvd2VyX1VOSVg6KjoqKQorCWVjaG8gcG93ZXJwYy1oYXJyaXMtcG93ZXJ1bml4CisJZXhpdCA7OworICAgIG04OGs6Q1gvVVg6Nyo6KikKKwllY2hvIG04OGstaGFycmlzLWN4dXg3CisJZXhpdCA7OworICAgIG04OGs6Kjo0KjpSNCopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3Y0CisJZXhpdCA7OworICAgIG04OGs6KjozKjpSMyopCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIEFWaWlPTjpkZ3V4Oio6KikKKyAgICAgICAgIyBERy9VWCByZXR1cm5zIEFWaWlPTiBmb3IgYWxsIGFyY2hpdGVjdHVyZXMKKyAgICAgICAgVU5BTUVfUFJPQ0VTU09SPWAvdXNyL2Jpbi91bmFtZSAtcGAKKwlpZiBbICRVTkFNRV9QUk9DRVNTT1IgPSBtYzg4MTAwIF0gfHwgWyAkVU5BTUVfUFJPQ0VTU09SID0gbWM4ODExMCBdCisJdGhlbgorCSAgICBpZiBbICR7VEFSR0VUX0JJTkFSWV9JTlRFUkZBQ0V9eCA9IG04OGtkZ3V4ZWxmeCBdIHx8IFwKKwkgICAgICAgWyAke1RBUkdFVF9CSU5BUllfSU5URVJGQUNFfXggPSB4IF0KKwkgICAgdGhlbgorCQllY2hvIG04OGstZGctZGd1eCR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZWxzZQorCQllY2hvIG04OGstZGctZGd1eGJjcyR7VU5BTUVfUkVMRUFTRX0KKwkgICAgZmkKKwllbHNlCisJICAgIGVjaG8gaTU4Ni1kZy1kZ3V4JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgCWV4aXQgOzsKKyAgICBNODgqOkRvbHBoaW5PUzoqOiopCSMgRG9scGhpbk9TIChTVlIzKQorCWVjaG8gbTg4ay1kb2xwaGluLXN5c3YzCisJZXhpdCA7OworICAgIE04OCo6KjpSMyo6KikKKwkjIERlbHRhIDg4ayBzeXN0ZW0gcnVubmluZyBTVlIzCisJZWNobyBtODhrLW1vdG9yb2xhLXN5c3YzCisJZXhpdCA7OworICAgIFhEODgqOio6KjoqKSAjIFRla3Ryb25peCBYRDg4IHN5c3RlbSBydW5uaW5nIFVUZWtWIChTVlIzKQorCWVjaG8gbTg4ay10ZWt0cm9uaXgtc3lzdjMKKwlleGl0IDs7CisgICAgVGVrNDNbMC05XVswLTldOlVUZWs6KjoqKSAjIFRla3Ryb25peCA0MzAwIHN5c3RlbSBydW5uaW5nIFVUZWsgKEJTRCkKKwllY2hvIG02OGstdGVrdHJvbml4LWJzZAorCWV4aXQgOzsKKyAgICAqOklSSVgqOio6KikKKwllY2hvIG1pcHMtc2dpLWlyaXhgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy8tL18vZydgCisJZXhpdCA7OworICAgID8/Pz8/Pz8/OkFJWD86WzEyXS4xOjIpICAgIyBBSVggMi4yLjEgb3IgQUlYIDIuMS4xIGlzIFJUL1BDIEFJWC4KKwllY2hvIHJvbXAtaWJtLWFpeCAgICAgIyB1bmFtZSAtbSBnaXZlcyBhbiA4IGhleC1jb2RlIENQVSBpZAorCWV4aXQgOzsgICAgICAgICAgICAgICAjIE5vdGUgdGhhdDogZWNobyAiJ2B1bmFtZSAtc2AnIiBnaXZlcyAnQUlYICcKKyAgICBpKjg2OkFJWDoqOiopCisJZWNobyBpMzg2LWlibS1haXgKKwlleGl0IDs7CisgICAgaWE2NDpBSVg6KjoqKQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1pYm0tYWl4JHtJQk1fUkVWfQorCWV4aXQgOzsKKyAgICAqOkFJWDoyOjMpCisJaWYgZ3JlcCBib3MzMjUgL3Vzci9pbmNsdWRlL3N0ZGlvLmggPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwkJc2VkICdzL14JCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJCSNpbmNsdWRlIDxzeXMvc3lzdGVtY2ZnLmg+CisKKwkJbWFpbigpCisJCQl7CisJCQlpZiAoIV9fcG93ZXJfcGMoKSkKKwkJCQlleGl0KDEpOworCQkJcHV0cygicG93ZXJwYy1pYm0tYWl4My4yLjUiKTsKKwkJCWV4aXQoMCk7CisJCQl9CitFT0YKKwkJaWYgJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAKKwkJdGhlbgorCQkJZWNobyAiJFNZU1RFTV9OQU1FIgorCQllbHNlCisJCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjUKKwkJZmkKKwllbGlmIGdyZXAgYm9zMzI0IC91c3IvaW5jbHVkZS9zdGRpby5oID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQllY2hvIHJzNjAwMC1pYm0tYWl4My4yLjQKKwllbHNlCisJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKKwlmaQorCWV4aXQgOzsKKyAgICAqOkFJWDoqOls0NTZdKQorCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAorCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlJQk1fQVJDSD1yczYwMDAKKwllbHNlCisJCUlCTV9BUkNIPXBvd2VycGMKKwlmaQorCWlmIFsgLXggL3Vzci9iaW4vb3NsZXZlbCBdIDsgdGhlbgorCQlJQk1fUkVWPWAvdXNyL2Jpbi9vc2xldmVsYAorCWVsc2UKKwkJSUJNX1JFVj0ke1VOQU1FX1ZFUlNJT059LiR7VU5BTUVfUkVMRUFTRX0KKwlmaQorCWVjaG8gJHtJQk1fQVJDSH0taWJtLWFpeCR7SUJNX1JFVn0KKwlleGl0IDs7CisgICAgKjpBSVg6KjoqKQorCWVjaG8gcnM2MDAwLWlibS1haXgKKwlleGl0IDs7CisgICAgaWJtcnQ6NC40QlNEOip8cm9tcC1pYm06QlNEOiopCisJZWNobyByb21wLWlibS1ic2Q0LjQKKwlleGl0IDs7CisgICAgaWJtcnQ6KkJTRDoqfHJvbXAtaWJtOkJTRDoqKSAgICAgICAgICAgICMgY292ZXJzIFJUL1BDIEJTRCBhbmQKKwllY2hvIHJvbXAtaWJtLWJzZCR7VU5BTUVfUkVMRUFTRX0gICAjIDQuMyB3aXRoIHVuYW1lIGFkZGVkIHRvCisJZXhpdCA7OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyByZXBvcnQ6IHJvbXAtaWJtIEJTRCA0LjMKKyAgICAqOkJPU1g6KjoqKQorCWVjaG8gcnM2MDAwLWJ1bGwtYm9zeAorCWV4aXQgOzsKKyAgICBEUFgvMj8wMDpCLk8uUy46KjoqKQorCWVjaG8gbTY4ay1idWxsLXN5c3YzCisJZXhpdCA7OworICAgIDkwMDAvWzM0XT8/OjQuM2JzZDoxLio6KikKKwllY2hvIG02OGstaHAtYnNkCisJZXhpdCA7OworICAgIGhwMzAwOjQuNEJTRDoqOiogfCA5MDAwL1szNF0/Pzo0LjNic2Q6Mi4qOiopCisJZWNobyBtNjhrLWhwLWJzZDQuNAorCWV4aXQgOzsKKyAgICA5MDAwL1szNDY3OF0/PzpIUC1VWDoqOiopCisJSFBVWF9SRVY9YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSouWzBCXSovLydgCisJY2FzZSAiJHtVTkFNRV9NQUNISU5FfSIgaW4KKwkgICAgOTAwMC8zMT8gKSAgICAgICAgICAgIEhQX0FSQ0g9bTY4MDAwIDs7CisJICAgIDkwMDAvWzM0XT8/ICkgICAgICAgICBIUF9BUkNIPW02OGsgOzsKKwkgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisJCWlmIFsgLXggL3Vzci9iaW4vZ2V0Y29uZiBdOyB0aGVuCisJCSAgICBzY19jcHVfdmVyc2lvbj1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19DUFVfVkVSU0lPTiAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgc2Nfa2VybmVsX2JpdHM9YC91c3IvYmluL2dldGNvbmYgU0NfS0VSTkVMX0JJVFMgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgICAgIGNhc2UgIiR7c2NfY3B1X3ZlcnNpb259IiBpbgorICAgICAgICAgICAgICAgICAgICAgIDUyMykgSFBfQVJDSD0iaHBwYTEuMCIgOzsgIyBDUFVfUEFfUklTQzFfMAorICAgICAgICAgICAgICAgICAgICAgIDUyOCkgSFBfQVJDSD0iaHBwYTEuMSIgOzsgIyBDUFVfUEFfUklTQzFfMQorICAgICAgICAgICAgICAgICAgICAgIDUzMikgICAgICAgICAgICAgICAgICAgICAgIyBDUFVfUEFfUklTQzJfMAorICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgIDMyKSBIUF9BUkNIPSJocHBhMi4wbiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjQpIEhQX0FSQ0g9ImhwcGEyLjB3IiA7OworCQkJICAnJykgSFBfQVJDSD0iaHBwYTIuMCIgOzsgICAjIEhQLVVYIDEwLjIwCisgICAgICAgICAgICAgICAgICAgICAgICBlc2FjIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKwkJZmkKKwkJaWYgWyAiJHtIUF9BUkNIfSIgPSAiIiBdOyB0aGVuCisJCSAgICBldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCSAgICBzZWQgJ3MvXiAgICAgICAgICAgICAgLy8nIDw8IEVPRiA+JGR1bW15LmMKKworICAgICAgICAgICAgICAjZGVmaW5lIF9IUFVYX1NPVVJDRQorICAgICAgICAgICAgICAjaW5jbHVkZSA8c3RkbGliLmg+CisgICAgICAgICAgICAgICNpbmNsdWRlIDx1bmlzdGQuaD4KKworICAgICAgICAgICAgICBpbnQgbWFpbiAoKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICNpZiBkZWZpbmVkKF9TQ19LRVJORUxfQklUUykKKyAgICAgICAgICAgICAgICAgIGxvbmcgYml0cyA9IHN5c2NvbmYoX1NDX0tFUk5FTF9CSVRTKTsKKyAgICAgICAgICAgICAgI2VuZGlmCisgICAgICAgICAgICAgICAgICBsb25nIGNwdSAgPSBzeXNjb25mIChfU0NfQ1BVX1ZFUlNJT04pOworCisgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNwdSkKKyAgICAgICAgICAgICAgCXsKKyAgICAgICAgICAgICAgCWNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJY2FzZSBDUFVfUEFfUklTQzFfMTogcHV0cyAoImhwcGExLjEiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAljYXNlIENQVV9QQV9SSVNDMl8wOgorICAgICAgICAgICAgICAjaWYgZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpCisgICAgICAgICAgICAgIAkgICAgc3dpdGNoIChiaXRzKQorICAgICAgICAgICAgICAJCXsKKyAgICAgICAgICAgICAgCQljYXNlIDY0OiBwdXRzICgiaHBwYTIuMHciKTsgYnJlYWs7CisgICAgICAgICAgICAgIAkJY2FzZSAzMjogcHV0cyAoImhwcGEyLjBuIik7IGJyZWFrOworICAgICAgICAgICAgICAJCWRlZmF1bHQ6IHB1dHMgKCJocHBhMi4wIik7IGJyZWFrOworICAgICAgICAgICAgICAJCX0gYnJlYWs7CisgICAgICAgICAgICAgICNlbHNlICAvKiAhZGVmaW5lZChfU0NfS0VSTkVMX0JJVFMpICovCisgICAgICAgICAgICAgIAkgICAgcHV0cyAoImhwcGEyLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgICNlbmRpZgorICAgICAgICAgICAgICAJZGVmYXVsdDogcHV0cyAoImhwcGExLjAiKTsgYnJlYWs7CisgICAgICAgICAgICAgIAl9CisgICAgICAgICAgICAgICAgICBleGl0ICgwKTsKKyAgICAgICAgICAgICAgfQorRU9GCisJCSAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1vICRkdW1teSAkZHVtbXkuYyAyPi9kZXYvbnVsbCkgJiYgSFBfQVJDSD1gJGR1bW15YAorCQkgICAgdGVzdCAteiAiJEhQX0FSQ0giICYmIEhQX0FSQ0g9aHBwYQorCQlmaSA7OworCWVzYWMKKwlpZiBbICR7SFBfQVJDSH0gPSAiaHBwYTIuMHciIF0KKwl0aGVuCisJICAgIGV2YWwgJHNldF9jY19mb3JfYnVpbGQKKworCSAgICAjIGhwcGEyLjB3LWhwLWhwdXgqIGhhcyBhIDY0LWJpdCBrZXJuZWwgYW5kIGEgY29tcGlsZXIgZ2VuZXJhdGluZworCSAgICAjIDMyLWJpdCBjb2RlLiAgaHBwYTY0LWhwLWhwdXgqIGhhcyB0aGUgc2FtZSBrZXJuZWwgYW5kIGEgY29tcGlsZXIKKwkgICAgIyBnZW5lcmF0aW5nIDY0LWJpdCBjb2RlLiAgR05VIGFuZCBIUCB1c2UgZGlmZmVyZW50IG5vbWVuY2xhdHVyZToKKwkgICAgIworCSAgICAjICQgQ0NfRk9SX0JVSUxEPWNjIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTIuMHctaHAtaHB1eDExLjIzCisJICAgICMgJCBDQ19GT1JfQlVJTEQ9ImNjICtEQTIuMHciIC4vY29uZmlnLmd1ZXNzCisJICAgICMgPT4gaHBwYTY0LWhwLWhwdXgxMS4yMworCisJICAgIGlmIGVjaG8gX19MUDY0X18gfCAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwKKwkJZ3JlcCBfX0xQNjRfXyA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJSFBfQVJDSD0iaHBwYTIuMHciCisJICAgIGVsc2UKKwkJSFBfQVJDSD0iaHBwYTY0IgorCSAgICBmaQorCWZpCisJZWNobyAke0hQX0FSQ0h9LWhwLWhwdXgke0hQVVhfUkVWfQorCWV4aXQgOzsKKyAgICBpYTY0OkhQLVVYOio6KikKKwlIUFVYX1JFVj1gZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi5bMEJdKi8vJ2AKKwllY2hvIGlhNjQtaHAtaHB1eCR7SFBVWF9SRVZ9CisJZXhpdCA7OworICAgIDMwNTAqOkhJLVVYOio6KikKKwlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJc2VkICdzL14JLy8nIDw8IEVPRiA+JGR1bW15LmMKKwkjaW5jbHVkZSA8dW5pc3RkLmg+CisJaW50CisJbWFpbiAoKQorCXsKKwkgIGxvbmcgY3B1ID0gc3lzY29uZiAoX1NDX0NQVV9WRVJTSU9OKTsKKwkgIC8qIFRoZSBvcmRlciBtYXR0ZXJzLCBiZWNhdXNlIENQVV9JU19IUF9NQzY4SyBlcnJvbmVvdXNseSByZXR1cm5zCisJICAgICB0cnVlIGZvciBDUFVfUEFfUklTQzFfMC4gIENQVV9JU19QQV9SSVNDIHJldHVybnMgY29ycmVjdAorCSAgICAgcmVzdWx0cywgaG93ZXZlci4gICovCisJICBpZiAoQ1BVX0lTX1BBX1JJU0MgKGNwdSkpCisJICAgIHsKKwkgICAgICBzd2l0Y2ggKGNwdSkKKwkJeworCQkgIGNhc2UgQ1BVX1BBX1JJU0MxXzA6IHB1dHMgKCJocHBhMS4wLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJICBjYXNlIENQVV9QQV9SSVNDMV8xOiBwdXRzICgiaHBwYTEuMS1oaXRhY2hpLWhpdXh3ZTIiKTsgYnJlYWs7CisJCSAgY2FzZSBDUFVfUEFfUklTQzJfMDogcHV0cyAoImhwcGEyLjAtaGl0YWNoaS1oaXV4d2UyIik7IGJyZWFrOworCQkgIGRlZmF1bHQ6IHB1dHMgKCJocHBhLWhpdGFjaGktaGl1eHdlMiIpOyBicmVhazsKKwkJfQorCSAgICB9CisJICBlbHNlIGlmIChDUFVfSVNfSFBfTUM2OEsgKGNwdSkpCisJICAgIHB1dHMgKCJtNjhrLWhpdGFjaGktaGl1eHdlMiIpOworCSAgZWxzZSBwdXRzICgidW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIiKTsKKwkgIGV4aXQgKDApOworCX0KK0VPRgorCSRDQ19GT1JfQlVJTEQgLW8gJGR1bW15ICRkdW1teS5jICYmIFNZU1RFTV9OQU1FPWAkZHVtbXlgICYmCisJCXsgZWNobyAiJFNZU1RFTV9OQU1FIjsgZXhpdDsgfQorCWVjaG8gdW5rbm93bi1oaXRhY2hpLWhpdXh3ZTIKKwlleGl0IDs7CisgICAgOTAwMC83Pz86NC4zYnNkOio6KiB8IDkwMDAvOD9bNzldOjQuM2JzZDoqOiogKQorCWVjaG8gaHBwYTEuMS1ocC1ic2QKKwlleGl0IDs7CisgICAgOTAwMC84Pz86NC4zYnNkOio6KikKKwllY2hvIGhwcGExLjAtaHAtYnNkCisJZXhpdCA7OworICAgICo5Pz8qOk1QRS9pWDoqOiogfCAqMzAwMCo6TVBFL2lYOio6KikKKwllY2hvIGhwcGExLjAtaHAtbXBlaXgKKwlleGl0IDs7CisgICAgaHA3Pz86T1NGMToqOiogfCBocDg/Wzc5XTpPU0YxOio6KiApCisJZWNobyBocHBhMS4xLWhwLW9zZgorCWV4aXQgOzsKKyAgICBocDg/PzpPU0YxOio6KikKKwllY2hvIGhwcGExLjAtaHAtb3NmCisJZXhpdCA7OworICAgIGkqODY6T1NGMToqOiopCisJaWYgWyAteCAvdXNyL3NiaW4vc3lzdmVyc2lvbiBdIDsgdGhlbgorCSAgICBlY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1vc2YxbWsKKwllbHNlCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLW9zZjEKKwlmaQorCWV4aXQgOzsKKyAgICBwYXJpc2MqOkxpdGVzKjoqOiopCisJZWNobyBocHBhMS4xLWhwLWxpdGVzCisJZXhpdCA7OworICAgIEMxKjpDb252ZXhPUzoqOiogfCBjb252ZXg6Q29udmV4T1M6QzEqOiopCisJZWNobyBjMS1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMio6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMyKjoqKQorCWlmIGdldHN5c2luZm8gLWYgc2NhbGFyX2FjYworCXRoZW4gZWNobyBjMzItY29udmV4LWJzZAorCWVsc2UgZWNobyBjMi1jb252ZXgtYnNkCisJZmkKKyAgICAgICAgZXhpdCA7OworICAgIEMzNCo6Q29udmV4T1M6KjoqIHwgY29udmV4OkNvbnZleE9TOkMzNCo6KikKKwllY2hvIGMzNC1jb252ZXgtYnNkCisgICAgICAgIGV4aXQgOzsKKyAgICBDMzgqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDMzgqOiopCisJZWNobyBjMzgtY29udmV4LWJzZAorICAgICAgICBleGl0IDs7CisgICAgQzQqOkNvbnZleE9TOio6KiB8IGNvbnZleDpDb252ZXhPUzpDNCo6KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKyAgICAgICAgZXhpdCA7OworICAgIENSQVkqWS1NUDoqOio6KikKKwllY2hvIHltcC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKltBLVpdOTA6KjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWNyYXktdW5pY29zJHtVTkFNRV9SRUxFQVNFfSBcCisJfCBzZWQgLWUgJ3MvQ1JBWS4qXChbQS1aXTkwXCkvXDEvJyBcCisJICAgICAgLWUgeS9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei8gXAorCSAgICAgIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpUUzoqOio6KikKKwllY2hvIHQ5MC1jcmF5LXVuaWNvcyR7VU5BTUVfUkVMRUFTRX0gfCBzZWQgLWUgJ3MvXC5bXi5dKiQvLlgvJworCWV4aXQgOzsKKyAgICBDUkFZKlQzRToqOio6KikKKwllY2hvIGFscGhhZXY1LWNyYXktdW5pY29zbWske1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgQ1JBWSpTVjE6KjoqOiopCisJZWNobyBzdjEtY3JheS11bmljb3Mke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgKjpVTklDT1MvbXA6KjoqKQorCWVjaG8gY3JheW52LWNyYXktdW5pY29zbXAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzL1wuW14uXSokLy5YLycKKwlleGl0IDs7CisgICAgRjMwWzAxXTpVTklYX1N5c3RlbV9WOio6KiB8IEY3MDA6VU5JWF9TeXN0ZW1fVjoqOiopCisJRlVKSVRTVV9QUk9DPWB1bmFtZSAtbSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgICAgRlVKSVRTVV9TWVM9YHVuYW1lIC1wIHwgdHIgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJyAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonIHwgc2VkIC1lICdzL1wvLy8nYAorICAgICAgICBGVUpJVFNVX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkIC1lICdzLyAvXy8nYAorICAgICAgICBlY2hvICIke0ZVSklUU1VfUFJPQ30tZnVqaXRzdS0ke0ZVSklUU1VfU1lTfSR7RlVKSVRTVV9SRUx9IgorICAgICAgICBleGl0IDs7CisgICAgNTAwMDpVTklYX1N5c3RlbV9WOjQuKjoqKQorICAgICAgICBGVUpJVFNVX1NZUz1gdW5hbWUgLXAgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvXC8vLydgCisgICAgICAgIEZVSklUU1VfUkVMPWBlY2hvICR7VU5BTUVfUkVMRUFTRX0gfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgfCBzZWQgLWUgJ3MvIC9fLydgCisgICAgICAgIGVjaG8gInNwYXJjLWZ1aml0c3UtJHtGVUpJVFNVX1NZU30ke0ZVSklUU1VfUkVMfSIKKwlleGl0IDs7CisgICAgaSo4NjpCU0QvMzg2Oio6KiB8IGkqODY6QlNEL09TOio6KiB8ICo6QXNjZW5kXCBFbWJlZGRlZC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWJzZGkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIHNwYXJjKjpCU0QvT1M6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1ic2RpJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOkJTRC9PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYnNkaSR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpGcmVlQlNEOio6KikKKwljYXNlICR7VU5BTUVfTUFDSElORX0gaW4KKwkgICAgcGM5OCkKKwkJZWNobyBpMzg2LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgYW1kNjQpCisJCWVjaG8geDg2XzY0LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwkgICAgKikKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tZnJlZWJzZGBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AgOzsKKwllc2FjCisJZXhpdCA7OworICAgIGkqOkNZR1dJTio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtY3lnd2luCisJZXhpdCA7OworICAgICo6TUlOR1cqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbmd3MzIKKwlleGl0IDs7CisgICAgaSo6d2luZG93czMyKjoqKQorICAgIAkjIHVuYW1lIC1tIGluY2x1ZGVzICItcGMiIG9uIHRoaXMgc3lzdGVtLgorICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tbWluZ3czMgorCWV4aXQgOzsKKyAgICBpKjpQVyo6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtcHczMgorCWV4aXQgOzsKKyAgICAqOkludGVyaXgqOlszNDU2XSopCisgICAgCWNhc2UgJHtVTkFNRV9NQUNISU5FfSBpbgorCSAgICB4ODYpCisJCWVjaG8gaTU4Ni1wYy1pbnRlcml4JHtVTkFNRV9SRUxFQVNFfQorCQlleGl0IDs7CisJICAgIEVNNjRUIHwgYXV0aGVudGljYW1kKQorCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CisJCWV4aXQgOzsKKwkgICAgSUE2NCkKKwkJZWNobyBpYTY0LXVua25vd24taW50ZXJpeCR7VU5BTUVfUkVMRUFTRX0KKwkJZXhpdCA7OworCWVzYWMgOzsKKyAgICBbMzQ1XTg2OldpbmRvd3NfOTU6KiB8IFszNDVdODY6V2luZG93c185ODoqIHwgWzM0NV04NjpXaW5kb3dzX05UOiopCisJZWNobyBpJHtVTkFNRV9NQUNISU5FfS1wYy1ta3MKKwlleGl0IDs7CisgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCisJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPworCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCisJIyBVTkFNRV9NQUNISU5FIGJhc2VkIG9uIHRoZSBvdXRwdXQgb2YgdW5hbWUgaW5zdGVhZCBvZiBpMzg2PworCWVjaG8gaTU4Ni1wYy1pbnRlcml4CisJZXhpdCA7OworICAgIGkqOlVXSU4qOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXV3aW4KKwlleGl0IDs7CisgICAgYW1kNjQ6Q1lHV0lOKjoqOiogfCB4ODZfNjQ6Q1lHV0lOKjoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1jeWd3aW4KKwlleGl0IDs7CisgICAgcCo6Q1lHV0lOKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tY3lnd2luCisJZXhpdCA7OworICAgIHByZXAqOlN1bk9TOjUuKjoqKQorCWVjaG8gcG93ZXJwY2xlLXVua25vd24tc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKKwlleGl0IDs7CisgICAgKjpHTlU6KjoqKQorCSMgdGhlIEdOVSBzeXN0ZW0KKwllY2hvIGBlY2hvICR7VU5BTUVfTUFDSElORX18c2VkIC1lICdzLFstL10uKiQsLCdgLXVua25vd24tZ251YGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MsLy4qJCwsJ2AKKwlleGl0IDs7CisgICAgKjpHTlUvKjoqOiopCisJIyBvdGhlciBzeXN0ZW1zIHdpdGggR05VIGxpYmMgYW5kIHVzZXJsYW5kCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tYGVjaG8gJHtVTkFNRV9TWVNURU19IHwgc2VkICdzLF5bXi9dKi8sLCcgfCB0ciAnW0EtWl0nICdbYS16XSdgYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvWy0oXS4qLy8nYC1nbnUKKwlleGl0IDs7CisgICAgaSo4NjpNaW5peDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CisJZXhpdCA7OworICAgIGFybSo6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlpZiBlY2hvIF9fQVJNX0VBQklfXyB8ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCBcCisJICAgIHwgZ3JlcCAtcSBfX0FSTV9FQUJJX18KKwl0aGVuCisJICAgIGVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWVsc2UKKwkgICAgZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251ZWFiaQorCWZpCisJZXhpdCA7OworICAgIGF2cjMyKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGNyaXM6TGludXg6KjoqKQorCWVjaG8gY3Jpcy1heGlzLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBjcmlzdjMyOkxpbnV4Oio6KikKKwllY2hvIGNyaXN2MzItYXhpcy1saW51eC1nbnUKKwlleGl0IDs7CisgICAgZnJ2OkxpbnV4Oio6KikKKyAgICAJZWNobyBmcnYtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgaWE2NDpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG0zMnIqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgbTY4KjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIG1pcHM6TGludXg6KjoqKQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSN1bmRlZiBDUFUKKwkjdW5kZWYgbWlwcworCSN1bmRlZiBtaXBzZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzZWwKKwkjZWxzZQorCSNpZiBkZWZpbmVkKF9fTUlQU0VCX18pIHx8IGRlZmluZWQoX19NSVBTRUIpIHx8IGRlZmluZWQoX01JUFNFQikgfHwgZGVmaW5lZChNSVBTRUIpCisJQ1BVPW1pcHMKKwkjZWxzZQorCUNQVT0KKwkjZW5kaWYKKwkjZW5kaWYKK0VPRgorCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKKwkgICAgL15DUFUveworCQlzOiA6OmcKKwkJcAorCSAgICB9J2AiCisJdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KKwk7OworICAgIG1pcHM2NDpMaW51eDoqOiopCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCisJI3VuZGVmIENQVQorCSN1bmRlZiBtaXBzNjQKKwkjdW5kZWYgbWlwczY0ZWwKKwkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQorCUNQVT1taXBzNjRlbAorCSNlbHNlCisJI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKKwlDUFU9bWlwczY0CisJI2Vsc2UKKwlDUFU9CisJI2VuZGlmCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eQ1BVL3sKKwkJczogOjpnCisJCXAKKwkgICAgfSdgIgorCXRlc3QgeCIke0NQVX0iICE9IHggJiYgeyBlY2hvICIke0NQVX0tdW5rbm93bi1saW51eC1nbnUiOyBleGl0OyB9CisJOzsKKyAgICBvcjMyOkxpbnV4Oio6KikKKwllY2hvIG9yMzItdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjNjQ6TGludXg6KjoqKQorCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIGxkLnNvLjEgPi9kZXYvbnVsbAorCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorCWV4aXQgOzsKKyAgICBwYXJpc2M6TGludXg6KjoqIHwgaHBwYTpMaW51eDoqOiopCisJIyBMb29rIGZvciBDUFUgbGV2ZWwKKwljYXNlIGBncmVwICdeY3B1W15hLXpdKjonIC9wcm9jL2NwdWluZm8gMj4vZGV2L251bGwgfCBjdXQgLWQnICcgLWYyYCBpbgorCSAgUEE3KikgZWNobyBocHBhMS4xLXVua25vd24tbGludXgtZ251IDs7CisJICBQQTgqKSBlY2hvIGhwcGEyLjAtdW5rbm93bi1saW51eC1nbnUgOzsKKwkgICopICAgIGVjaG8gaHBwYS11bmtub3duLWxpbnV4LWdudSA7OworCWVzYWMKKwlleGl0IDs7CisgICAgcGFyaXNjNjQ6TGludXg6KjoqIHwgaHBwYTY0OkxpbnV4Oio6KikKKwllY2hvIGhwcGE2NC11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBzMzkwOkxpbnV4Oio6KiB8IHMzOTB4OkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0taWJtLWxpbnV4CisJZXhpdCA7OworICAgIHNoNjQqOkxpbnV4Oio6KikKKyAgICAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNoKjpMaW51eDoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CisJZXhpdCA7OworICAgIHNwYXJjOkxpbnV4Oio6KiB8IHNwYXJjNjQ6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICB2YXg6TGludXg6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CisJZXhpdCA7OworICAgIHg4Nl82NDpMaW51eDoqOiopCisJZWNobyB4ODZfNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgeHRlbnNhKjpMaW51eDoqOiopCisgICAgCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudQorCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwkjIFRoZSBCRkQgbGlua2VyIGtub3dzIHdoYXQgdGhlIGRlZmF1bHQgb2JqZWN0IGZpbGUgZm9ybWF0IGlzLCBzbworCSMgZmlyc3Qgc2VlIGlmIGl0IHdpbGwgdGVsbCB1cy4gY2QgdG8gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHByZXZlbnQKKwkjIHByb2JsZW1zIHdpdGggb3RoZXIgcHJvZ3JhbXMgb3IgZGlyZWN0b3JpZXMgY2FsbGVkIGBsZCcgaW4gdGhlIHBhdGguCisJIyBTZXQgTENfQUxMPUMgdG8gZW5zdXJlIGxkIG91dHB1dHMgbWVzc2FnZXMgaW4gRW5nbGlzaC4KKwlsZF9zdXBwb3J0ZWRfdGFyZ2V0cz1gY2QgLzsgTENfQUxMPUMgbGQgLS1oZWxwIDI+JjEgXAorCQkJIHwgc2VkIC1uZSAnL3N1cHBvcnRlZCB0YXJnZXRzOi8hZAorCQkJCSAgICBzL1sgCV1bIAldKi8gL2cKKwkJCQkgICAgcy8uKnN1cHBvcnRlZCB0YXJnZXRzOiAqLy8KKwkJCQkgICAgcy8gLiovLworCQkJCSAgICBwJ2AKKyAgICAgICAgY2FzZSAiJGxkX3N1cHBvcnRlZF90YXJnZXRzIiBpbgorCSAgZWxmMzItaTM4NikKKwkJVEVOVEFUSVZFPSIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudSIKKwkJOzsKKwkgIGEub3V0LWkzODYtbGludXgpCisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtZ251YW91dCIKKwkJZXhpdCA7OworCSAgIiIpCisJCSMgRWl0aGVyIGEgcHJlLUJGRCBhLm91dCBsaW5rZXIgKGxpbnV4LWdudW9sZGxkKSBvcgorCQkjIG9uZSB0aGF0IGRvZXMgbm90IGdpdmUgdXMgdXNlZnVsIC0taGVscC4KKwkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVvbGRsZCIKKwkJZXhpdCA7OworCWVzYWMKKwkjIERldGVybWluZSB3aGV0aGVyIHRoZSBkZWZhdWx0IGNvbXBpbGVyIGlzIGEub3V0IG9yIGVsZgorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpbmNsdWRlIDxmZWF0dXJlcy5oPgorCSNpZmRlZiBfX0VMRl9fCisJIyBpZmRlZiBfX0dMSUJDX18KKwkjICBpZiBfX0dMSUJDX18gPj0gMgorCUxJQkM9Z251CisJIyAgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjICBlbmRpZgorCSMgZWxzZQorCUxJQkM9Z251bGliYzEKKwkjIGVuZGlmCisJI2Vsc2UKKwkjaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKSB8fCBkZWZpbmVkKF9fUEdJKSB8fCBkZWZpbmVkKF9fU1VOUFJPX0MpIHx8IGRlZmluZWQoX19TVU5QUk9fQ0MpCisJTElCQz1nbnUKKwkjZWxzZQorCUxJQkM9Z251YW91dAorCSNlbmRpZgorCSNlbmRpZgorCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCisJICAgIC9eTElCQy97CisJCXM6IDo6ZworCQlwCisJICAgIH0nYCIKKwl0ZXN0IHgiJHtMSUJDfSIgIT0geCAmJiB7CisJCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwkJZXhpdAorCX0KKwl0ZXN0IHgiJHtURU5UQVRJVkV9IiAhPSB4ICYmIHsgZWNobyAiJHtURU5UQVRJVkV9IjsgZXhpdDsgfQorCTs7CisgICAgaSo4NjpEWU5JWC9wdHg6NCo6KikKKwkjIHB0eCA0LjAgZG9lcyB1bmFtZSAtcyBjb3JyZWN0bHksIHdpdGggRFlOSVgvcHR4IGluIHRoZXJlLgorCSMgZWFybGllciB2ZXJzaW9ucyBhcmUgbWVzc2VkIHVwIGFuZCBwdXQgdGhlIG5vZGVuYW1lIGluIGJvdGgKKwkjIHN5c25hbWUgYW5kIG5vZGVuYW1lLgorCWVjaG8gaTM4Ni1zZXF1ZW50LXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6VU5JWF9TVjo0LjJNUDoyLiopCisgICAgICAgICMgVW5peHdhcmUgaXMgYW4gb2Zmc2hvb3Qgb2YgU1ZSNCwgYnV0IGl0IGhhcyBpdHMgb3duIHZlcnNpb24KKyAgICAgICAgIyBudW1iZXIgc2VyaWVzIHN0YXJ0aW5nIHdpdGggMi4uLgorICAgICAgICAjIEkgYW0gbm90IHBvc2l0aXZlIHRoYXQgb3RoZXIgU1ZSNCBzeXN0ZW1zIHdvbid0IG1hdGNoIHRoaXMsCisJIyBJIGp1c3QgaGF2ZSB0byBob3BlLiAgLS0gcm1zLgorICAgICAgICAjIFVzZSBzeXN2NC4ydXcuLi4gc28gdGhhdCBzeXN2NCogbWF0Y2hlcyBpdC4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lzdjQuMnV3JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Ok9TLzI6KjoqKQorCSMgSWYgd2Ugd2VyZSBhYmxlIHRvIGZpbmQgYHVuYW1lJywgdGhlbiBFTVggVW5peCBjb21wYXRpYmlsaXR5CisJIyBpcyBwcm9iYWJseSBpbnN0YWxsZWQuCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW9zMi1lbXgKKwlleGl0IDs7CisgICAgaSo4NjpYVFMtMzAwOio6U1RPUCkKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1zdG9wCisJZXhpdCA7OworICAgIGkqODY6YXRoZW9zOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1hdGhlb3MKKwlleGl0IDs7CisgICAgaSo4NjpzeWxsYWJsZToqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXN5bGxhYmxlCisJZXhpdCA7OworICAgIGkqODY6THlueE9TOjIuKjoqIHwgaSo4NjpMeW54T1M6My5bMDFdKjoqIHwgaSo4NjpMeW54T1M6NC4wKjoqKQorCWVjaG8gaTM4Ni11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgaSo4NjoqRE9TOio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtbXNkb3NkamdwcAorCWV4aXQgOzsKKyAgICBpKjg2Oio6NC4qOiogfCBpKjg2OlNZU1RFTV9WOjQuKjoqKQorCVVOQU1FX1JFTD1gZWNobyAke1VOQU1FX1JFTEVBU0V9IHwgc2VkICdzL1wvTVAkLy8nYAorCWlmIGdyZXAgTm92ZWxsIC91c3IvaW5jbHVkZS9saW5rLmggPi9kZXYvbnVsbCAyPi9kZXYvbnVsbDsgdGhlbgorCQllY2hvICR7VU5BTUVfTUFDSElORX0tdW5pdmVsLXN5c3Yke1VOQU1FX1JFTH0KKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2JHtVTkFNRV9SRUx9CisJZmkKKwlleGl0IDs7CisgICAgaSo4NjoqOjU6WzY3OF0qKQorICAgIAkjIFVuaXhXYXJlIDcueCwgT3BlblVOSVggYW5kIE9wZW5TZXJ2ZXIgNi4KKwljYXNlIGAvYmluL3VuYW1lIC1YIHwgZ3JlcCAiXk1hY2hpbmUiYCBpbgorCSAgICAqNDg2KikJICAgICBVTkFNRV9NQUNISU5FPWk0ODYgOzsKKwkgICAgKlBlbnRpdW0pCSAgICAgVU5BTUVfTUFDSElORT1pNTg2IDs7CisJICAgICpQZW50KnwqQ2VsZXJvbikgVU5BTUVfTUFDSElORT1pNjg2IDs7CisJZXNhYworCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9JHtVTkFNRV9TWVNURU19JHtVTkFNRV9WRVJTSU9OfQorCWV4aXQgOzsKKyAgICBpKjg2Oio6My4yOiopCisJaWYgdGVzdCAtZiAvdXNyL29wdGlvbnMvY2IubmFtZTsgdGhlbgorCQlVTkFNRV9SRUw9YHNlZCAtbiAncy8uKlZlcnNpb24gLy9wJyA8L3Vzci9vcHRpb25zL2NiLm5hbWVgCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1pc2MkVU5BTUVfUkVMCisJZWxpZiAvYmluL3VuYW1lIC1YIDI+L2Rldi9udWxsID4vZGV2L251bGwgOyB0aGVuCisJCVVOQU1FX1JFTD1gKC9iaW4vdW5hbWUgLVh8Z3JlcCBSZWxlYXNlfHNlZCAtZSAncy8uKj0gLy8nKWAKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCBpODA0ODYgPi9kZXYvbnVsbCkgJiYgVU5BTUVfTUFDSElORT1pNDg2CisJCSgvYmluL3VuYW1lIC1YfGdyZXAgJ15NYWNoaW5lLipQZW50aXVtJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk1ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnQgKklJJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJKC9iaW4vdW5hbWUgLVh8Z3JlcCAnXk1hY2hpbmUuKlBlbnRpdW0gUHJvJyA+L2Rldi9udWxsKSBcCisJCQkmJiBVTkFNRV9NQUNISU5FPWk2ODYKKwkJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNjbyRVTkFNRV9SRUwKKwllbHNlCisJCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1zeXN2MzIKKwlmaQorCWV4aXQgOzsKKyAgICBwYzoqOio6KikKKwkjIExlZnQgaGVyZSBmb3IgY29tcGF0aWJpbGl0eToKKyAgICAgICAgIyB1bmFtZSAtbSBwcmludHMgZm9yIERKR1BQIGFsd2F5cyAncGMnLCBidXQgaXQgcHJpbnRzIG5vdGhpbmcgYWJvdXQKKyAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTM4Ni4KKwllY2hvIGkzODYtcGMtbXNkb3NkamdwcAorICAgICAgICBleGl0IDs7CisgICAgSW50ZWw6TWFjaDozKjoqKQorCWVjaG8gaTM4Ni1wYy1tYWNoMworCWV4aXQgOzsKKyAgICBwYXJhZ29uOio6KjoqKQorCWVjaG8gaTg2MC1pbnRlbC1vc2YxCisJZXhpdCA7OworICAgIGk4NjA6Kjo0Lio6KikgIyBpODYwLVNWUjQKKwlpZiBncmVwIFN0YXJkZW50IC91c3IvaW5jbHVkZS9zeXMvdWFkbWluLmggPi9kZXYvbnVsbCAyPiYxIDsgdGhlbgorCSAgZWNobyBpODYwLXN0YXJkZW50LXN5c3Yke1VOQU1FX1JFTEVBU0V9ICMgU3RhcmRlbnQgVmlzdHJhIGk4NjAtU1ZSNAorCWVsc2UgIyBBZGQgb3RoZXIgaTg2MC1TVlI0IHZlbmRvcnMgYmVsb3cgYXMgdGhleSBhcmUgZGlzY292ZXJlZC4KKwkgIGVjaG8gaTg2MC11bmtub3duLXN5c3Yke1VOQU1FX1JFTEVBU0V9ICAjIFVua25vd24gaTg2MC1TVlI0CisJZmkKKwlleGl0IDs7CisgICAgbWluaSo6Q1RJWDpTWVMqNToqKQorCSMgIm1pbmlmcmFtZSIKKwllY2hvIG02ODAxMC1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgbWM2OGs6VU5JWDpTWVNURU01OjMuNTFtKQorCWVjaG8gbTY4ay1jb252ZXJnZW50LXN5c3YKKwlleGl0IDs7CisgICAgTTY4MD8wOkQtTklYOjUuMzoqKQorCWVjaG8gbTY4ay1kaWFiLWRuaXgKKwlleGl0IDs7CisgICAgTTY4KjoqOlIzVls1Njc4XSo6KikKKwl0ZXN0IC1yIC9zeXNWNjggJiYgeyBlY2hvICdtNjhrLW1vdG9yb2xhLXN5c3YnOyBleGl0OyB9IDs7CisgICAgM1szNDVdPz86Kjo0LjA6My4wIHwgM1szNF0/P0E6Kjo0LjA6My4wIHwgM1szNF0/PywqOio6NC4wOjMuMCB8IDNbMzRdPz8vKjoqOjQuMDozLjAgfCA0NDAwOio6NC4wOjMuMCB8IDQ4NTA6Kjo0LjA6My4wIHwgU0tBNDA6Kjo0LjA6My4wIHwgU0RTMjoqOjQuMDozLjAgfCBTSEcyOio6NC4wOjMuMCB8IFM3NTAxKjoqOjQuMDozLjApCisJT1NfUkVMPScnCisJdGVzdCAtciAvZXRjLy5yZWxpZCBcCisJJiYgT1NfUkVMPS5gc2VkIC1uICdzL1teIF0qIFteIF0qIFwoWzAtOV1bMC05XVwpLiovXDEvcCcgPCAvZXRjLy5yZWxpZGAKKwkvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKwkgICYmIHsgZWNobyBpNDg2LW5jci1zeXN2NC4zJHtPU19SRUx9OyBleGl0OyB9CisJL2Jpbi91bmFtZSAtcCAyPi9kZXYvbnVsbCB8IC9iaW4vZ3JlcCBlbnRpdW0gPi9kZXYvbnVsbCBcCisJICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OworICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQorICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKKyAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBtNjgqOkx5bnhPUzoyLio6KiB8IG02OCo6THlueE9TOjMuMCo6KikKKwllY2hvIG02OGstdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIG1jNjgwMzA6VU5JWF9TeXN0ZW1fVjo0Lio6KikKKwllY2hvIG02OGstYXRhcmktc3lzdjQKKwlleGl0IDs7CisgICAgVFNVTkFNSTpMeW54T1M6Mi4qOiopCisJZWNobyBzcGFyYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgcnM2MDAwOkx5bnhPUzoyLio6KikKKwllY2hvIHJzNjAwMC11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUG93ZXJQQzpMeW54T1M6Mi4qOiogfCBQb3dlclBDOkx5bnhPUzozLlswMV0qOiogfCBQb3dlclBDOkx5bnhPUzo0LjAqOiopCisJZWNobyBwb3dlcnBjLXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTTVtCRV1TOlVOSVhfU1Y6KjoqKQorCWVjaG8gbWlwcy1kZGUtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgUk0qOlJlbGlhbnRVTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgUk0qOlNJTklYLSo6KjoqKQorCWVjaG8gbWlwcy1zbmktc3lzdjQKKwlleGl0IDs7CisgICAgKjpTSU5JWC0qOio6KikKKwlpZiB1bmFtZSAtcCAyPi9kZXYvbnVsbCA+L2Rldi9udWxsIDsgdGhlbgorCQlVTkFNRV9NQUNISU5FPWAodW5hbWUgLXApIDI+L2Rldi9udWxsYAorCQllY2hvICR7VU5BTUVfTUFDSElORX0tc25pLXN5c3Y0CisJZWxzZQorCQllY2hvIG5zMzJrLXNuaS1zeXN2CisJZmkKKwlleGl0IDs7CisgICAgUEVOVElVTToqOjQuMCo6KikgIyBVbmlzeXMgYENsZWFyUGF0aCBITVAgSVggNDAwMCcgU1ZSNC9NUCBlZmZvcnQKKyAgICAgICAgICAgICAgICAgICAgICAjIHNheXMgPFJpY2hhcmQuTS5CYXJ0ZWxAY2NNYWlsLkNlbnN1cy5HT1Y+CisgICAgICAgIGVjaG8gaTU4Ni11bmlzeXMtc3lzdjQKKyAgICAgICAgZXhpdCA7OworICAgICo6VU5JWF9TeXN0ZW1fVjo0KjpGVFgqKQorCSMgRnJvbSBHZXJhbGQgSGV3ZXMgPGhld2VzQG9wZW5tYXJrZXQuY29tPi4KKwkjIEhvdyBhYm91dCBkaWZmZXJlbnRpYXRpbmcgYmV0d2VlbiBzdHJhdHVzIGFyY2hpdGVjdHVyZXM/IC1kam0KKwllY2hvIGhwcGExLjEtc3RyYXR1cy1zeXN2NAorCWV4aXQgOzsKKyAgICAqOio6KjpGVFgqKQorCSMgRnJvbSBzZWFuZkBzd2RjLnN0cmF0dXMuY29tLgorCWVjaG8gaTg2MC1zdHJhdHVzLXN5c3Y0CisJZXhpdCA7OworICAgIGkqODY6Vk9TOio6KikKKwkjIEZyb20gUGF1bC5HcmVlbkBzdHJhdHVzLmNvbS4KKwllY2hvICR7VU5BTUVfTUFDSElORX0tc3RyYXR1cy12b3MKKwlleGl0IDs7CisgICAgKjpWT1M6KjoqKQorCSMgRnJvbSBQYXVsLkdyZWVuQHN0cmF0dXMuY29tLgorCWVjaG8gaHBwYTEuMS1zdHJhdHVzLXZvcworCWV4aXQgOzsKKyAgICBtYzY4KjpBL1VYOio6KikKKwllY2hvIG02OGstYXBwbGUtYXV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBuZXdzKjpORVdTLU9TOjYqOiopCisJZWNobyBtaXBzLXNvbnktbmV3c29zNgorCWV4aXQgOzsKKyAgICBSWzM0XTAwMDoqU3lzdGVtX1YqOio6KiB8IFI0MDAwOlVOSVhfU1lTVjoqOiogfCBSKjAwMDpVTklYX1NWOio6KikKKwlpZiBbIC1kIC91c3IvbmVjIF07IHRoZW4KKwkgICAgICAgIGVjaG8gbWlwcy1uZWMtc3lzdiR7VU5BTUVfUkVMRUFTRX0KKwllbHNlCisJICAgICAgICBlY2hvIG1pcHMtdW5rbm93bi1zeXN2JHtVTkFNRV9SRUxFQVNFfQorCWZpCisgICAgICAgIGV4aXQgOzsKKyAgICBCZUJveDpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gaGFyZHdhcmUgbWFkZSBieSBCZSwgUFBDIG9ubHkuCisJZWNobyBwb3dlcnBjLWJlLWJlb3MKKwlleGl0IDs7CisgICAgQmVNYWM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIE1hYyBvciBNYWMgY2xvbmUsIFBQQyBvbmx5LgorCWVjaG8gcG93ZXJwYy1hcHBsZS1iZW9zCisJZXhpdCA7OworICAgIEJlUEM6QmVPUzoqOiopCSMgQmVPUyBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWJlb3MKKwlleGl0IDs7CisgICAgQmVQQzpIYWlrdToqOiopCSMgSGFpa3UgcnVubmluZyBvbiBJbnRlbCBQQyBjb21wYXRpYmxlLgorCWVjaG8gaTU4Ni1wYy1oYWlrdQorCWV4aXQgOzsKKyAgICBTWC00OlNVUEVSLVVYOio6KikKKwllY2hvIHN4NC1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtNTpTVVBFUi1VWDoqOiopCisJZWNobyBzeDUtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLTY6U1VQRVItVVg6KjoqKQorCWVjaG8gc3g2LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICBTWC03OlNVUEVSLVVYOio6KikKKwllY2hvIHN4Ny1uZWMtc3VwZXJ1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgU1gtODpTVVBFUi1VWDoqOiopCisJZWNobyBzeDgtbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFNYLThSOlNVUEVSLVVYOio6KikKKwllY2hvIHN4OHItbmVjLXN1cGVydXgke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgIFBvd2VyKjpSaGFwc29keToqOiopCisJZWNobyBwb3dlcnBjLWFwcGxlLXJoYXBzb2R5JHtVTkFNRV9SRUxFQVNFfQorCWV4aXQgOzsKKyAgICAqOlJoYXBzb2R5Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tYXBwbGUtcmhhcHNvZHkke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6RGFyd2luOio6KikKKwlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgorCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICB1bmtub3duKSBVTkFNRV9QUk9DRVNTT1I9cG93ZXJwYyA7OworCWVzYWMKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS1hcHBsZS1kYXJ3aW4ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6cHJvY250byo6KjoqIHwgKjpRTlg6WzAxMjM0NTY3ODldKjoqKQorCVVOQU1FX1BST0NFU1NPUj1gdW5hbWUgLXBgCisJaWYgdGVzdCAiJFVOQU1FX1BST0NFU1NPUiIgPSAieDg2IjsgdGhlbgorCQlVTkFNRV9QUk9DRVNTT1I9aTM4NgorCQlVTkFNRV9NQUNISU5FPXBjCisJZmkKKwllY2hvICR7VU5BTUVfUFJPQ0VTU09SfS0ke1VOQU1FX01BQ0hJTkV9LW50by1xbngke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UU5YOio6NCopCisJZWNobyBpMzg2LXBjLXFueAorCWV4aXQgOzsKKyAgICBOU0UtPzpOT05TVE9QX0tFUk5FTDoqOiopCisJZWNobyBuc2UtdGFuZGVtLW5zayR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgTlNSLT86Tk9OU1RPUF9LRVJORUw6KjoqKQorCWVjaG8gbnNyLXRhbmRlbS1uc2ske1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6Tm9uU3RvcC1VWDoqOiopCisJZWNobyBtaXBzLWNvbXBhcS1ub25zdG9wdXgKKwlleGl0IDs7CisgICAgQlMyMDAwOlBPU0lYKjoqOiopCisJZWNobyBiczIwMDAtc2llbWVucy1zeXN2CisJZXhpdCA7OworICAgIERTLyo6VU5JWF9TeXN0ZW1fVjoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LSR7VU5BTUVfU1lTVEVNfS0ke1VOQU1FX1JFTEVBU0V9CisJZXhpdCA7OworICAgICo6UGxhbjk6KjoqKQorCSMgInVuYW1lIC1tIiBpcyBub3QgY29uc2lzdGVudCwgc28gdXNlICRjcHV0eXBlIGluc3RlYWQuIDM4NgorCSMgaXMgY29udmVydGVkIHRvIGkzODYgZm9yIGNvbnNpc3RlbmN5IHdpdGggb3RoZXIgeDg2CisJIyBvcGVyYXRpbmcgc3lzdGVtcy4KKwlpZiB0ZXN0ICIkY3B1dHlwZSIgPSAiMzg2IjsgdGhlbgorCSAgICBVTkFNRV9NQUNISU5FPWkzODYKKwllbHNlCisJICAgIFVOQU1FX01BQ0hJTkU9IiRjcHV0eXBlIgorCWZpCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tcGxhbjkKKwlleGl0IDs7CisgICAgKjpUT1BTLTEwOio6KikKKwllY2hvIHBkcDEwLXVua25vd24tdG9wczEwCisJZXhpdCA7OworICAgICo6VEVORVg6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10ZW5leAorCWV4aXQgOzsKKyAgICBLUzEwOlRPUFMtMjA6KjoqIHwgS0wxMDpUT1BTLTIwOio6KiB8IFRZUEU0OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtZGVjLXRvcHMyMAorCWV4aXQgOzsKKyAgICBYS0wtMTpUT1BTLTIwOio6KiB8IFRZUEU1OlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAteGtsLXRvcHMyMAorCWV4aXQgOzsKKyAgICAqOlRPUFMtMjA6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi10b3BzMjAKKwlleGl0IDs7CisgICAgKjpJVFM6KjoqKQorCWVjaG8gcGRwMTAtdW5rbm93bi1pdHMKKwlleGl0IDs7CisgICAgU0VJOio6KjpTRUlVWCkKKyAgICAgICAgZWNobyBtaXBzLXNlaS1zZWl1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CisgICAgKjpEcmFnb25GbHk6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWRyYWdvbmZseWBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1stKF0uKi8vJ2AKKwlleGl0IDs7CisgICAgKjoqVk1TOio6KikKKyAgICAJVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKwljYXNlICIke1VOQU1FX01BQ0hJTkV9IiBpbgorCSAgICBBKikgZWNobyBhbHBoYS1kZWMtdm1zIDsgZXhpdCA7OworCSAgICBJKikgZWNobyBpYTY0LWRlYy12bXMgOyBleGl0IDs7CisJICAgIFYqKSBlY2hvIHZheC1kZWMtdm1zIDsgZXhpdCA7OworCWVzYWMgOzsKKyAgICAqOlhFTklYOio6U3lzVikKKwllY2hvIGkzODYtcGMteGVuaXgKKwlleGl0IDs7CisgICAgaSo4Njpza3lvczoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXNreW9zYGVjaG8gJHtVTkFNRV9SRUxFQVNFfWAgfCBzZWQgLWUgJ3MvIC4qJC8vJworCWV4aXQgOzsKKyAgICBpKjg2OnJkb3M6KjoqKQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCisJZXhpdCA7OworZXNhYworCisjZWNobyAnKE5vIHVuYW1lIGNvbW1hbmQgb3IgdW5hbWUgb3V0cHV0IG5vdCByZWNvZ25pemVkLiknIDE+JjIKKyNlY2hvICIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9OiR7VU5BTUVfVkVSU0lPTn0iIDE+JjIKKworZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorY2F0ID4kZHVtbXkuYyA8PEVPRgorI2lmZGVmIF9TRVFVRU5UXworIyBpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyMgaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKyNlbmRpZgorbWFpbiAoKQoreworI2lmIGRlZmluZWQgKHNvbnkpCisjaWYgZGVmaW5lZCAoTUlQU0VCKQorICAvKiBCRkQgd2FudHMgImJzZCIgaW5zdGVhZCBvZiAibmV3c29zIi4gIFBlcmhhcHMgQkZEIHNob3VsZCBiZSBjaGFuZ2VkLAorICAgICBJIGRvbid0IGtub3cuLi4uICAqLworICBwcmludGYgKCJtaXBzLXNvbnktYnNkXG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorICBwcmludGYgKCJtNjhrLXNvbnktbmV3c29zJXNcbiIsCisjaWZkZWYgTkVXU09TNAorICAgICAgICAgICI0IgorI2Vsc2UKKwkgICIiCisjZW5kaWYKKyAgICAgICAgICk7IGV4aXQgKDApOworI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fYXJtKSAmJiBkZWZpbmVkIChfX2Fjb3JuKSAmJiBkZWZpbmVkIChfX3VuaXgpCisgIHByaW50ZiAoImFybS1hY29ybi1yaXNjaXhcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoaHAzMDApICYmICFkZWZpbmVkIChocHV4KQorICBwcmludGYgKCJtNjhrLWhwLWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyNpZiBkZWZpbmVkIChOZVhUKQorI2lmICFkZWZpbmVkIChfX0FSQ0hJVEVDVFVSRV9fKQorI2RlZmluZSBfX0FSQ0hJVEVDVFVSRV9fICJtNjhrIgorI2VuZGlmCisgIGludCB2ZXJzaW9uOworICB2ZXJzaW9uPWAoaG9zdGluZm8gfCBzZWQgLW4gJ3MvLipOZVhUIE1hY2ggXChbMC05XSpcKS4qL1wxL3AnKSAyPi9kZXYvbnVsbGA7CisgIGlmICh2ZXJzaW9uIDwgNCkKKyAgICBwcmludGYgKCIlcy1uZXh0LW5leHRzdGVwJWRcbiIsIF9fQVJDSElURUNUVVJFX18sIHZlcnNpb24pOworICBlbHNlCisgICAgcHJpbnRmICgiJXMtbmV4dC1vcGVuc3RlcCVkXG4iLCBfX0FSQ0hJVEVDVFVSRV9fLCB2ZXJzaW9uKTsKKyAgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKE1VTFRJTUFYKSB8fCBkZWZpbmVkIChuMTYpCisjaWYgZGVmaW5lZCAoVU1BWFYpCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1zeXN2XG4iKTsgZXhpdCAoMCk7CisjZWxzZQorI2lmIGRlZmluZWQgKENNVSkKKyAgcHJpbnRmICgibnMzMmstZW5jb3JlLW1hY2hcbiIpOyBleGl0ICgwKTsKKyNlbHNlCisgIHByaW50ZiAoIm5zMzJrLWVuY29yZS1ic2RcbiIpOyBleGl0ICgwKTsKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fMzg2QlNEX18pCisgIHByaW50ZiAoImkzODYtcGMtYnNkXG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKHNlcXVlbnQpCisjaWYgZGVmaW5lZCAoaTM4NikKKyAgcHJpbnRmICgiaTM4Ni1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkIChuczMyMDAwKQorICBwcmludGYgKCJuczMyay1zZXF1ZW50LWR5bml4XG4iKTsgZXhpdCAoMCk7CisjZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1NFUVVFTlRfKQorICAgIHN0cnVjdCB1dHNuYW1lIHVuOworCisgICAgdW5hbWUoJnVuKTsKKworICAgIGlmIChzdHJuY21wKHVuLnZlcnNpb24sICJWMiIsIDIpID09IDApIHsKKwlwcmludGYgKCJpMzg2LXNlcXVlbnQtcHR4MlxuIik7IGV4aXQgKDApOworICAgIH0KKyAgICBpZiAoc3RybmNtcCh1bi52ZXJzaW9uLCAiVjEiLCAyKSA9PSAwKSB7IC8qIFhYWCBpcyBWMSBjb3JyZWN0PyAqLworCXByaW50ZiAoImkzODYtc2VxdWVudC1wdHgxXG4iKTsgZXhpdCAoMCk7CisgICAgfQorICAgIHByaW50ZiAoImkzODYtc2VxdWVudC1wdHhcbiIpOyBleGl0ICgwKTsKKworI2VuZGlmCisKKyNpZiBkZWZpbmVkICh2YXgpCisjIGlmICFkZWZpbmVkICh1bHRyaXgpCisjICBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyMgIGlmIGRlZmluZWQgKEJTRCkKKyMgICBpZiBCU0QgPT0gNDMKKyAgICAgIHByaW50ZiAoInZheC1kZWMtYnNkNC4zXG4iKTsgZXhpdCAoMCk7CisjICAgZWxzZQorIyAgICBpZiBCU0QgPT0gMTk5MDA2CisgICAgICBwcmludGYgKCJ2YXgtZGVjLWJzZDQuM3Jlbm9cbiIpOyBleGl0ICgwKTsKKyMgICAgZWxzZQorICAgICAgcHJpbnRmICgidmF4LWRlYy1ic2RcbiIpOyBleGl0ICgwKTsKKyMgICAgZW5kaWYKKyMgICBlbmRpZgorIyAgZWxzZQorICAgIHByaW50ZiAoInZheC1kZWMtYnNkXG4iKTsgZXhpdCAoMCk7CisjICBlbmRpZgorIyBlbHNlCisgICAgcHJpbnRmICgidmF4LWRlYy11bHRyaXhcbiIpOyBleGl0ICgwKTsKKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoYWxsaWFudCkgJiYgZGVmaW5lZCAoaTg2MCkKKyAgcHJpbnRmICgiaTg2MC1hbGxpYW50LWJzZFxuIik7IGV4aXQgKDApOworI2VuZGlmCisKKyAgZXhpdCAoMSk7Cit9CitFT0YKKworJENDX0ZPUl9CVUlMRCAtbyAkZHVtbXkgJGR1bW15LmMgMj4vZGV2L251bGwgJiYgU1lTVEVNX05BTUU9YCRkdW1teWAgJiYKKwl7IGVjaG8gIiRTWVNURU1fTkFNRSI7IGV4aXQ7IH0KKworIyBBcG9sbG9zIHB1dCB0aGUgc3lzdGVtIHR5cGUgaW4gdGhlIGVudmlyb25tZW50LgorCit0ZXN0IC1kIC91c3IvYXBvbGxvICYmIHsgZWNobyAke0lTUH0tYXBvbGxvLSR7U1lTVFlQRX07IGV4aXQ7IH0KKworIyBDb252ZXggdmVyc2lvbnMgdGhhdCBwcmVkYXRlIHVuYW1lIGNhbiB1c2UgZ2V0c3lzaW5mbygxKQorCitpZiBbIC14IC91c3IvY29udmV4L2dldHN5c2luZm8gXQordGhlbgorICAgIGNhc2UgYGdldHN5c2luZm8gLWYgY3B1X3R5cGVgIGluCisgICAgYzEqKQorCWVjaG8gYzEtY29udmV4LWJzZAorCWV4aXQgOzsKKyAgICBjMiopCisJaWYgZ2V0c3lzaW5mbyAtZiBzY2FsYXJfYWNjCisJdGhlbiBlY2hvIGMzMi1jb252ZXgtYnNkCisJZWxzZSBlY2hvIGMyLWNvbnZleC1ic2QKKwlmaQorCWV4aXQgOzsKKyAgICBjMzQqKQorCWVjaG8gYzM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgYzM4KikKKwllY2hvIGMzOC1jb252ZXgtYnNkCisJZXhpdCA7OworICAgIGM0KikKKwllY2hvIGM0LWNvbnZleC1ic2QKKwlleGl0IDs7CisgICAgZXNhYworZmkKKworY2F0ID4mMiA8PEVPRgorJDA6IHVuYWJsZSB0byBndWVzcyBzeXN0ZW0gdHlwZQorCitUaGlzIHNjcmlwdCwgbGFzdCBtb2RpZmllZCAkdGltZXN0YW1wLCBoYXMgZmFpbGVkIHRvIHJlY29nbml6ZQordGhlIG9wZXJhdGluZyBzeXN0ZW0geW91IGFyZSB1c2luZy4gSXQgaXMgYWR2aXNlZCB0aGF0IHlvdQorZG93bmxvYWQgdGhlIG1vc3QgdXAgdG8gZGF0ZSB2ZXJzaW9uIG9mIHRoZSBjb25maWcgc2NyaXB0cyBmcm9tCisKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5ndWVzcztoYj1IRUFECithbmQKKyAgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCitJZiB0aGUgdmVyc2lvbiB5b3UgcnVuICgkMCkgaXMgYWxyZWFkeSB1cCB0byBkYXRlLCBwbGVhc2UKK3NlbmQgdGhlIGZvbGxvd2luZyBkYXRhIGFuZCBhbnkgaW5mb3JtYXRpb24geW91IHRoaW5rIG1pZ2h0IGJlCitwZXJ0aW5lbnQgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIG5lZWRlZAoraW5mb3JtYXRpb24gdG8gaGFuZGxlIHlvdXIgc3lzdGVtLgorCitjb25maWcuZ3Vlc3MgdGltZXN0YW1wID0gJHRpbWVzdGFtcAorCit1bmFtZSAtbSA9IGAodW5hbWUgLW0pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1yID0gYCh1bmFtZSAtcikgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXMgPSBgKHVuYW1lIC1zKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtdiA9IGAodW5hbWUgLXYpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKKworL3Vzci9iaW4vdW5hbWUgLXAgPSBgKC91c3IvYmluL3VuYW1lIC1wKSAyPi9kZXYvbnVsbGAKKy9iaW4vdW5hbWUgLVggICAgID0gYCgvYmluL3VuYW1lIC1YKSAyPi9kZXYvbnVsbGAKKworaG9zdGluZm8gICAgICAgICAgICAgICA9IGAoaG9zdGluZm8pIDI+L2Rldi9udWxsYAorL2Jpbi91bml2ZXJzZSAgICAgICAgICA9IGAoL2Jpbi91bml2ZXJzZSkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9hcmNoIC1rICAgICAgID0gYCgvdXNyL2Jpbi9hcmNoIC1rKSAyPi9kZXYvbnVsbGAKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGxgCisvdXNyL2Jpbi9vc2xldmVsICAgICAgID0gYCgvdXNyL2Jpbi9vc2xldmVsKSAyPi9kZXYvbnVsbGAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsYAorCitVTkFNRV9NQUNISU5FID0gJHtVTkFNRV9NQUNISU5FfQorVU5BTUVfUkVMRUFTRSA9ICR7VU5BTUVfUkVMRUFTRX0KK1VOQU1FX1NZU1RFTSAgPSAke1VOQU1FX1NZU1RFTX0KK1VOQU1FX1ZFUlNJT04gPSAke1VOQU1FX1ZFUlNJT059CitFT0YKKworZXhpdCAxCisKKyMgTG9jYWwgdmFyaWFibGVzOgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJ0aW1lc3RhbXA9JyIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkIgorIyB0aW1lLXN0YW1wLWVuZDogIiciCisjIEVuZDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL2NvbmZpZy5ycGF0aCBiL2x6by0yLjAzL2F1dG9jb25mL2NvbmZpZy5ycGF0aApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zNWY5NTliCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYvY29uZmlnLnJwYXRoCkBAIC0wLDAgKzEsNjY2IEBACisjISAvYmluL3NoCisjIE91dHB1dCBhIHN5c3RlbSBkZXBlbmRlbnQgc2V0IG9mIHZhcmlhYmxlcywgZGVzY3JpYmluZyBob3cgdG8gc2V0IHRoZQorIyBydW4gdGltZSBzZWFyY2ggcGF0aCBvZiBzaGFyZWQgbGlicmFyaWVzIGluIGFuIGV4ZWN1dGFibGUuCisjCisjICAgQ29weXJpZ2h0IDE5OTYtMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgICBUYWtlbiBmcm9tIEdOVSBsaWJ0b29sLCAyMDAxCisjICAgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKyMKKyMgICBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyAgIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyAgIG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZmlsZSBpcyB0aGUgY2Fub25pY2FsIGhvc3Qgc3BlY2lmaWNhdGlvbiwKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLU9QRVJBVElOR19TWVNURU0KKyMgb3IKKyMgICAgQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIFRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZXMgQ0MsIEdDQywgTERGTEFHUywgTEQsIHdpdGhfZ251X2xkCisjIHNob3VsZCBiZSBzZXQgYnkgdGhlIGNhbGxlci4KKyMKKyMgVGhlIHNldCBvZiBkZWZpbmVkIHZhcmlhYmxlcyBpcyBhdCB0aGUgZW5kIG9mIHRoaXMgc2NyaXB0LgorCisjIEtub3duIGxpbWl0YXRpb25zOgorIyAtIE9uIElSSVggNi41IHdpdGggQ0M9ImNjIiwgdGhlIHJ1biB0aW1lIHNlYXJjaCBwYXRjaCBtdXN0IG5vdCBiZSBsb25nZXIKKyMgICB0aGFuIDI1NiBieXRlcywgb3RoZXJ3aXNlIHRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBkdW1wIGNvcmUuIFRoZSBvbmx5CisjICAga25vd24gd29ya2Fyb3VuZCBpcyB0byBjaG9vc2Ugc2hvcnRlciBkaXJlY3RvcnkgbmFtZXMgZm9yIHRoZSBidWlsZAorIyAgIGRpcmVjdG9yeSBhbmQvb3IgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKKyMgQWxsIGtub3duIGxpbmtlcnMgcmVxdWlyZSBhIGAuYScgYXJjaGl2ZSBmb3Igc3RhdGljIGxpbmtpbmcgKGV4Y2VwdCBNU1ZDLAorIyB3aGljaCBuZWVkcyAnLmxpYicpLgorbGliZXh0PWEKK3NocmV4dD0uc28KKworaG9zdD0iJDEiCitob3N0X2NwdT1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICIkaG9zdCIgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAoraG9zdF9vcz1gZWNobyAiJGhvc3QiIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworIyBDb2RlIHRha2VuIGZyb20gbGlidG9vbC5tNCdzIF9MVF9DQ19CQVNFTkFNRS4KKworZm9yIGNjX3RlbXAgaW4gJENDIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gZWNobyAiJGNjX3RlbXAiIHwgc2VkIC1lICdzJV4uKi8lJSdgCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDLgorCit3bD0KK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHdsPSctV2wsJworZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGRhcndpbiopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgICA7OworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgd2w9Jy1XbCwnCisgICAgICA7OworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgbmV3c29zNikKKyAgICAgIDs7CisgICAgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIGljYyogfCBlY2MqKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIHBnY2MgfCBwZ2Y3NyB8IHBnZjkwKQorICAgICAgICAgIHdsPSctV2wsJworICAgICAgICAgIDs7CisgICAgICAgIGNjYyopCisgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgOzsKKyAgICAgICAgY29tbykKKyAgICAgICAgICB3bD0nLWxvcHQ9JworICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisgICAgICAgICAgICAqU3VuXCBDKikKKyAgICAgICAgICAgICAgd2w9Jy1XbCwnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICByZG9zKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgc3Vub3M0KikKKyAgICAgIHdsPSctUW9wdGlvbiBsZCAnCisgICAgICA7OworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICBzeXN2NCpNUCopCisgICAgICA7OworICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisgICAgICB3bD0nLVdsLCcKKyAgICAgIDs7CisgICAgdW5pY29zKikKKyAgICAgIHdsPSctV2wsJworICAgICAgOzsKKyAgICB1dHM0KikKKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ29kZSB0YWtlbiBmcm9tIGxpYnRvb2wubTQncyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTLgorCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KK2hhcmRjb2RlX2RpcmVjdD1ubworaGFyZGNvZGVfbWludXNfTD1ubworCitjYXNlICIkaG9zdF9vcyIgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICMgRklYTUU6IHRoZSBNU1ZDKysgcG9ydCBoYXNuJ3QgYmVlbiB0ZXN0ZWQgaW4gYSBsb29vb25nIHRpbWUKKyAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICB3aXRoX2dudV9sZD1ubworICAgIGZpCisgICAgOzsKKyAgaW50ZXJpeCopCisgICAgIyB3ZSBqdXN0IGhvcGUvYXNzdW1lIHRoaXMgaXMgZ2NjIGFuZCBub3QgYzg5ICg9IE1TVkMrKykKKyAgICB3aXRoX2dudV9sZD15ZXMKKyAgICA7OworICBvcGVuYnNkKikKKyAgICB3aXRoX2dudV9sZD1ubworICAgIDs7Citlc2FjCisKK2xkX3NobGlicz15ZXMKK2lmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKKyAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgIyBVbmxpa2UgbGlidG9vbCwgd2UgdXNlIC1ycGF0aCBoZXJlLCBub3QgLS1ycGF0aCwgc2luY2UgdGhlIGRvY3VtZW50ZWQKKyAgIyBvcHRpb24gb2YgR05VIGxkIGlzIGNhbGxlZCAtcnBhdGgsIG5vdCAtLXJwYXRoLgorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgIGNhc2UgIiRob3N0X29zIiBpbgorICAgIGFpeFszLTldKikKKyAgICAgICMgT24gQUlYL1BQQywgdGhlIEdOVSBsaW5rZXIgaXMgdmVyeSBicm9rZW4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisgICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAorICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2Fubm90IHVzZQorICAgICAgIyB0aGVtLgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBpbnRlcml4WzMtOV0qKQorICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgOzsKKyAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICA6CisgICAgICBlbHNlCisgICAgICAgIGxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgbmV0YnNkKikKKyAgICAgIDs7CisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgOzsKKyAgICAgICAgKikKKyAgICAgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICBmaQorICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworICAgIHN1bm9zNCopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgOgorICAgICAgZWxzZQorICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGZpCisgICAgICA7OworICBlc2FjCisgIGlmIHRlc3QgIiRsZF9zaGxpYnMiID0gbm87IHRoZW4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICBmaQorZWxzZQorICBjYXNlICIkaG9zdF9vcyIgaW4KKyAgICBhaXgzKikKKyAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCisgICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisgICAgICAgICMgYnJva2VuIGNvbGxlY3QyLgorICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworICAgIGFpeFs0LTldKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICMgT24gSUE2NCwgdGhlIGxpbmtlciBkb2VzIHJ1biB0aW1lIGxpbmtpbmcgYnkgZGVmYXVsdCwgc28gd2UgZG9uJ3QKKyAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKyAgICAgIGVsc2UKKyAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKyAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKKyAgICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgIGRvbmUKKyAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMDEyXXxhaXg0LlswMTJdLiopCisgICAgICAgICAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorICAgICAgICAgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKKyAgICAgICAgICAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKyAgICAgICAgICB0aGVuCisgICAgICAgICAgICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgICAgICAgICAgIDoKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgICAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQorICAgICAgICAgIGZpCisgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgICMgQmVnaW4gX0xUX0FDX1NZU19MSUJQQVRIX0FJWC4KKyAgICAgIGVjaG8gJ2ludCBtYWluICgpIHsgcmV0dXJuIDA7IH0nID4gY29uZnRlc3QuYworICAgICAgJHtDQ30gJHtMREZMQUdTfSBjb25mdGVzdC5jIC1vIGNvbmZ0ZXN0CisgICAgICBhaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCAyPi9kZXYvbnVsbCB8IHNlZCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyAgICAgIGlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KKyAgICAgICAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QgMj4vZGV2L251bGwgfCBzZWQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisgICAgICBmaQorICAgICAgaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgorICAgICAgICBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiIKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC5jIGNvbmZ0ZXN0CisgICAgICAjIEVuZCBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYLgorICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisgICAgICAgIGVsc2UKKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBmaQorICAgICAgZmkKKyAgICAgIDs7CisgICAgYW1pZ2FvcyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGJzZGlbNDVdKikKKyAgICAgIDs7CisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKyAgICAgIGxpYmV4dD1saWIKKyAgICAgIDs7CisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgICAgICAgIDoKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICB4bGMqKQorICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKyAgICBkZ3V4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIDs7CisgICAgZnJlZWJzZDEqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGZyZWVic2QyLjIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBmcmVlYnNkMiopCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICA7OworICAgIGhwdXg5KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgOzsKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGZpCisgICAgICA7OworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCisgICAgICAgICAgICA7OworICAgICAgICAgICopCisgICAgICAgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICAgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKyAgICBuZXRic2QqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgOzsKKyAgICBuZXdzb3M2KQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIG9wZW5ic2QqKQorICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KKyAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICBlbHNlCisgICAgICAgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICAgICAgICBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorICAgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgICAgICAgICAgICA7OworICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBvczIqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgb3NmMyopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisgICAgb3NmNCogfCBvc2Y1KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKyAgICAgICAgIyBCb3RoIGNjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKyAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICA7OworICAgIHNvbGFyaXMqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLVIkbGliZGlyJworICAgICAgOzsKKyAgICBzdW5vczQqKQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIDs7CisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorICAgICAgICBzbmkpCisgICAgICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KKyAgICAgICAgICA7OworICAgICAgICBzaWVtZW5zKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgICAgIDs7CisgICAgICAgIG1vdG9yb2xhKQorICAgICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgc3lzdjQuMyopCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKyAgICAgICAgbGRfc2hsaWJzPXllcworICAgICAgZmkKKyAgICAgIDs7CisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKKyAgICAgIDs7CisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIDs7CisgICAgdXRzNCopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICA7OworICAgICopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisgIGVzYWMKK2ZpCisKKyMgQ2hlY2sgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzCisjIENvZGUgdGFrZW4gZnJvbSBsaWJ0b29sLm00J3MgQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIuCisjIFVubGlrZSBsaWJ0b29sLm00LCBoZXJlIHdlIGRvbid0IGNhcmUgYWJvdXQgX2FsbF8gbmFtZXMgb2YgdGhlIGxpYnJhcnksIGJ1dAorIyBvbmx5IGFib3V0IHRoZSBvbmUgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuIFRoaXMgaXMgdGhlIGxhc3QKKyMgZWxlbWVudCBvZiBsaWJyYXJ5X25hbWVzX3NwZWMgaW4gbGlidG9vbC5tNCwgb3IgcG9zc2libHkgdHdvIG9mIHRoZW0gaWYgdGhlCisjIGxpbmtlciBoYXMgc3BlY2lhbCBzZWFyY2ggcnVsZXMuCitsaWJyYXJ5X25hbWVzX3NwZWM9ICAgICAgIyB0aGUgbGFzdCBlbGVtZW50IG9mIGxpYnJhcnlfbmFtZXNfc3BlYyBpbiBsaWJ0b29sLm00CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworY2FzZSAiJGhvc3Rfb3MiIGluCisgIGFpeDMqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBhaXhbNC05XSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgYW1pZ2FvcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5hJworICAgIDs7CisgIGJlb3MqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGJzZGlbNDVdKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgc2hyZXh0PS5kbGwKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hICRsaWJuYW1lLmxpYicKKyAgICA7OworICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgIHNocmV4dD0uZHlsaWIKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBkZ3V4KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBmcmVlYnNkMSopCisgICAgOzsKKyAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAgIGNhc2UgIiRob3N0X29zIiBpbgorICAgICAgZnJlZWJzZFsxMjNdKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JyA7OworICAgICAgKikKKyAgICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnIDs7CisgICAgZXNhYworICAgIDs7CisgIGdudSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGlhNjQqKQorICAgICAgICBzaHJleHQ9LnNvCisgICAgICAgIDs7CisgICAgICBocHBhKjY0KikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgc2hyZXh0PS5zbAorICAgICAgICA7OworICAgIGVzYWMKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBpbnRlcml4WzMtOV0qKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgY2FzZSAiJGhvc3Rfb3MiIGluCisgICAgICBpcml4NSogfCBub25zdG9wdXgqKQorICAgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBjYXNlICRMRCBpbgorICAgICAgICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpIGxpYnN1ZmY9IHNobGlic3VmZj0gOzsKKyAgICAgICAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKSBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgOzsKKyAgICAgICAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgOzsKKyAgICAgICAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgICA7OworICBsaW51eCogfCBrKmJzZCotZ251KQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIGtuZXRic2QqLWdudSkKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBuZXRic2QqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUkc2hyZXh0JworICAgIDs7CisgIG5ld3NvczYpCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgbnRvLXFueCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQkdmVyc3VmZml4JworICAgIDs7CisgIG9zMiopCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzaHJleHQ9LmRsbAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuYScKKyAgICA7OworICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgcmRvcyopCisgICAgOzsKKyAgc29sYXJpcyopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3Vub3M0KikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCR2ZXJzdWZmaXgnCisgICAgOzsKKyAgc3lzdjQgfCBzeXN2NC4zKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHNocmV4dCcKKyAgICA7OworICBzeXN2NCpNUCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKKyAgdXRzNCopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSRzaHJleHQnCisgICAgOzsKK2VzYWMKKworc2VkX3F1b3RlX3N1YnN0PSdzL1woWyJgJFxcXVwpL1xcXDEvZycKK2VzY2FwZWRfd2w9YGVjaG8gIlgkd2wiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK3NobGliZXh0PWBlY2hvICIkc2hyZXh0IiB8IHNlZCAtZSAncyxeXC4sLCdgCitlc2NhcGVkX2xpYm5hbWVfc3BlYz1gZWNobyAiWCRsaWJuYW1lX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKK2VzY2FwZWRfbGlicmFyeV9uYW1lc19zcGVjPWBlY2hvICJYJGxpYnJhcnlfbmFtZXNfc3BlYyIgfCBzZWQgLWUgJ3MvXlgvLycgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPWBlY2hvICJYJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgc2VkIC1lICdzL15YLy8nIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworTENfQUxMPUMgc2VkIC1lICdzL15cKFthLXpBLVowLTlfXSpcKT0vYWNsX2N2X1wxPS8nIDw8RU9GCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSIkZXNjYXBlZF93bCIKKworIyBTdGF0aWMgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAic28iKS4KK3NobGliZXh0PSIkc2hsaWJleHQiCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9IiRlc2NhcGVkX2xpYm5hbWVfc3BlYyIKKworIyBMaWJyYXJ5IG5hbWVzIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aGVuIHBhc3NlZCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9IiRlc2NhcGVkX2xpYnJhcnlfbmFtZXNfc3BlYyIKKworIyBGbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuCisjIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSIkZXNjYXBlZF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIgorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0iJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRS5zbyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9kaXJlY3Q9IiRoYXJkY29kZV9kaXJlY3QiCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSIkaGFyZGNvZGVfbWludXNfTCIKKworRU9GCmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9jb25maWcuc3ViIGIvbHpvLTIuMDMvYXV0b2NvbmYvY29uZmlnLnN1YgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi42M2JmZmYwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYvY29uZmlnLnN1YgpAQCAtMCwwICsxLDE2NjkgQEAKKyMhIC9iaW4vc2gKKyMgQ29uZmlndXJhdGlvbiB2YWxpZGF0aW9uIHN1YnJvdXRpbmUgc2NyaXB0LgorIyAgIENvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4CisjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKK3RpbWVzdGFtcD0nMjAwOC0wNC0xNCcKKworIyBUaGlzIGZpbGUgaXMgKGluIHByaW5jaXBsZSkgY29tbW9uIHRvIEFMTCBHTlUgc29mdHdhcmUuCisjIFRoZSBwcmVzZW5jZSBvZiBhIG1hY2hpbmUgaW4gdGhpcyBmaWxlIHN1Z2dlc3RzIHRoYXQgU09NRSBHTlUgc29mdHdhcmUKKyMgY2FuIGhhbmRsZSB0aGF0IG1hY2hpbmUuICBJdCBkb2VzIG5vdCBpbXBseSBBTEwgR05VIHNvZnR3YXJlIGNhbi4KKyMKKyMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0IC0gRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKyMgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKworIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKKyMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIworIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KKyMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgorIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KKyMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KKworIyBUaGlzIGZpbGUgaXMgc3VwcG9zZWQgdG8gYmUgdGhlIHNhbWUgZm9yIGFsbCBHTlUgcGFja2FnZXMKKyMgYW5kIHJlY29nbml6ZSBhbGwgdGhlIENQVSB0eXBlcywgc3lzdGVtIHR5cGVzIGFuZCBhbGlhc2VzCisjIHRoYXQgYXJlIG1lYW5pbmdmdWwgd2l0aCAqYW55KiBHTlUgc29mdHdhcmUuCisjIEVhY2ggcGFja2FnZSBpcyByZXNwb25zaWJsZSBmb3IgcmVwb3J0aW5nIHdoaWNoIHZhbGlkIGNvbmZpZ3VyYXRpb25zCisjIGl0IGRvZXMgbm90IHN1cHBvcnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWJsZSB0byBkaXN0aW5ndWlzaAorIyBhIGZhaWx1cmUgdG8gc3VwcG9ydCBhIHZhbGlkIGNvbmZpZ3VyYXRpb24gZnJvbSBhIG1lYW5pbmdsZXNzCisjIGNvbmZpZ3VyYXRpb24uCisKKyMgVGhlIGdvYWwgb2YgdGhpcyBmaWxlIGlzIHRvIG1hcCBhbGwgdGhlIHZhcmlvdXMgdmFyaWF0aW9ucyBvZiBhIGdpdmVuCisjIG1hY2hpbmUgc3BlY2lmaWNhdGlvbiBpbnRvIGEgc2luZ2xlIHNwZWNpZmljYXRpb24gaW4gdGhlIGZvcm06CisjCUNQVV9UWVBFLU1BTlVGQUNUVVJFUi1PUEVSQVRJTkdfU1lTVEVNCisjIG9yIGluIHNvbWUgY2FzZXMsIHRoZSBuZXdlciBmb3VyLXBhcnQgZm9ybToKKyMJQ1BVX1RZUEUtTUFOVUZBQ1RVUkVSLUtFUk5FTC1PUEVSQVRJTkdfU1lTVEVNCisjIEl0IGlzIHdyb25nIHRvIGVjaG8gYW55IG90aGVyIHR5cGUgb2Ygc3BlY2lmaWNhdGlvbi4KKworbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCisKK3VzYWdlPSJcCitVc2FnZTogJDAgW09QVElPTl0gQ1BVLU1GUi1PUFNZUworICAgICAgICQwIFtPUFRJT05dIEFMSUFTCisKK0Nhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gbmFtZS4KKworT3BlcmF0aW9uIG1vZGVzOgorICAtaCwgLS1oZWxwICAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLXQsIC0tdGltZS1zdGFtcCAgIHByaW50IGRhdGUgb2YgbGFzdCBtb2RpZmljYXRpb24sIHRoZW4gZXhpdAorICAtdiwgLS12ZXJzaW9uICAgICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAorCitSZXBvcnQgYnVncyBhbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uIgorCit2ZXJzaW9uPSJcCitHTlUgY29uZmlnLnN1YiAoJHRpbWVzdGFtcCkKKworQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLAorMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KK3dhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKworaGVscD0iCitUcnkgXGAkbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCisKKyMgUGFyc2UgY29tbWFuZCBsaW5lCit3aGlsZSB0ZXN0ICQjIC1ndCAwIDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC0tdGltZS1zdGFtcCB8IC0tdGltZSogfCAtdCApCisgICAgICAgZWNobyAiJHRpbWVzdGFtcCIgOyBleGl0IDs7CisgICAgLS12ZXJzaW9uIHwgLXYgKQorICAgICAgIGVjaG8gIiR2ZXJzaW9uIiA7IGV4aXQgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgIGVjaG8gIiR1c2FnZSI7IGV4aXQgOzsKKyAgICAtLSApICAgICAjIFN0b3Agb3B0aW9uIHByb2Nlc3NpbmcKKyAgICAgICBzaGlmdDsgYnJlYWsgOzsKKyAgICAtICkJIyBVc2Ugc3RkaW4gYXMgaW5wdXQuCisgICAgICAgYnJlYWsgOzsKKyAgICAtKiApCisgICAgICAgZWNobyAiJG1lOiBpbnZhbGlkIG9wdGlvbiAkMSRoZWxwIgorICAgICAgIGV4aXQgMSA7OworCisgICAgKmxvY2FsKikKKyAgICAgICAjIEZpcnN0IHBhc3MgdGhyb3VnaCBhbnkgbG9jYWwgbWFjaGluZSB0eXBlcy4KKyAgICAgICBlY2hvICQxCisgICAgICAgZXhpdCA7OworCisgICAgKiApCisgICAgICAgYnJlYWsgOzsKKyAgZXNhYworZG9uZQorCitjYXNlICQjIGluCisgMCkgZWNobyAiJG1lOiBtaXNzaW5nIGFyZ3VtZW50JGhlbHAiID4mMgorICAgIGV4aXQgMTs7CisgMSkgOzsKKyAqKSBlY2hvICIkbWU6IHRvbyBtYW55IGFyZ3VtZW50cyRoZWxwIiA+JjIKKyAgICBleGl0IDE7OworZXNhYworCisjIFNlcGFyYXRlIHdoYXQgdGhlIHVzZXIgZ2F2ZSBpbnRvIENQVS1DT01QQU5ZIGFuZCBPUyBvciBLRVJORUwtT1MgKGlmIGFueSkuCisjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgorbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCitjYXNlICRtYXliZV9vcyBpbgorICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAorICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIHN0b3JtLWNoYW9zKiB8IG9zMi1lbXgqIHwgcnRtay1ub3ZhKikKKyAgICBvcz0tJG1heWJlX29zCisgICAgYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAncy9eXCguKlwpLVwoW14tXSotW14tXSpcKSQvXDEvJ2AKKyAgICA7OworICAqKQorICAgIGJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgJ3MvLVteLV0qJC8vJ2AKKyAgICBpZiBbICRiYXNpY19tYWNoaW5lICE9ICQxIF0KKyAgICB0aGVuIG9zPWBlY2hvICQxIHwgc2VkICdzLy4qLS8tLydgCisgICAgZWxzZSBvcz07IGZpCisgICAgOzsKK2VzYWMKKworIyMjIExldCdzIHJlY29nbml6ZSBjb21tb24gbWFjaGluZXMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zIHNvCisjIyMgdGhhdCB0aGluZ3MgbGlrZSBjb25maWcuc3ViIGRlY3N0YXRpb24tMzEwMCB3b3JrLiAgV2UgYWxzbworIyMjIHJlY29nbml6ZSBzb21lIG1hbnVmYWN0dXJlcnMgYXMgbm90IGJlaW5nIG9wZXJhdGluZyBzeXN0ZW1zLCBzbyB3ZQorIyMjIGNhbiBwcm92aWRlIGRlZmF1bHQgb3BlcmF0aW5nIHN5c3RlbXMgYmVsb3cuCitjYXNlICRvcyBpbgorCS1zdW4qb3MqKQorCQkjIFByZXZlbnQgZm9sbG93aW5nIGNsYXVzZSBmcm9tIGhhbmRsaW5nIHRoaXMgaW52YWxpZCBpbnB1dC4KKwkJOzsKKwktZGVjKiB8IC1taXBzKiB8IC1zZXF1ZW50KiB8IC1lbmNvcmUqIHwgLXBjNTMyKiB8IC1zZ2kqIHwgLXNvbnkqIHwgXAorCS1hdHQqIHwgLTczMDAqIHwgLTMzMDAqIHwgLWRlbHRhKiB8IC1tb3Rvcm9sYSogfCAtc3VuWzIzNF0qIHwgXAorCS11bmljb20qIHwgLWlibSogfCAtbmV4dCB8IC1ocCB8IC1pc2kqIHwgLWFwb2xsbyB8IC1hbHRvcyogfCBcCisJLWNvbnZlcmdlbnQqIHwgLW5jciogfCAtbmV3cyB8IC0zMiogfCAtMzYwMCogfCAtMzEwMCogfCAtaGl0YWNoaSogfFwKKwktY1sxMjNdKiB8IC1jb252ZXgqIHwgLXN1biB8IC1jcmRzIHwgLW9tcm9uKiB8IC1kZyB8IC11bHRyYSB8IC10dGkqIHwgXAorCS1oYXJyaXMgfCAtZG9scGhpbiB8IC1oaWdobGV2ZWwgfCAtZ291bGQgfCAtY2JtIHwgLW5zIHwgLW1hc3Njb21wIHwgXAorCS1hcHBsZSB8IC1heGlzIHwgLWtudXRoIHwgLWNyYXkpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCisJCW9zPQorCQliYXNpY19tYWNoaW5lPSQxCisJCTs7CisJLXNjb3V0KQorCQk7OworCS13cnMpCisJCW9zPS12eHdvcmtzCisJCWJhc2ljX21hY2hpbmU9JDEKKwkJOzsKKwktY2hvcnVzb3MqKQorCQlvcz0tY2hvcnVzb3MKKwkJYmFzaWNfbWFjaGluZT0kMQorCQk7OworIAktY2hvcnVzcmRiKQorIAkJb3M9LWNob3J1c3JkYgorCQliYXNpY19tYWNoaW5lPSQxCisgCQk7OworCS1oaXV4KikKKwkJb3M9LWhpdXh3ZTIKKwkJOzsKKwktc2NvNikKKwkJb3M9LXNjbzV2NgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzUpCisJCW9zPS1zY28zLjJ2NQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzQpCisJCW9zPS1zY28zLjJ2NAorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzMuMi5bNC05XSopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAncy9zY28zLjIuL3NjbzMuMnYvJ2AKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1zY28zLjJ2WzQtOV0qKQorCQkjIERvbid0IGZvcmdldCB2ZXJzaW9uIGlmIGl0IGlzIDMuMnY0IG9yIG5ld2VyLgorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXBjLydgCisJCTs7CisJLXNjbzV2NiopCisJCSMgRG9uJ3QgZm9yZ2V0IHZlcnNpb24gaWYgaXQgaXMgMy4ydjQgb3IgbmV3ZXIuCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktc2NvKikKKwkJb3M9LXNjbzMuMnYyCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYtLiovODYtcGMvJ2AKKwkJOzsKKwktdWRrKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1pc2MpCisJCW9zPS1pc2MyLjIKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1jbGl4KikKKwkJYmFzaWNfbWFjaGluZT1jbGlwcGVyLWludGVyZ3JhcGgKKwkJOzsKKwktaXNjKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni0uKi84Ni1wYy8nYAorCQk7OworCS1seW54KikKKwkJb3M9LWx5bnhvcworCQk7OworCS1wdHgqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LS4qLzg2LXNlcXVlbnQvJ2AKKwkJOzsKKwktd2luZG93c250KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzL3dpbmRvd3NudC93aW5udC8nYAorCQk7OworCS1wc29zKikKKwkJb3M9LXBzb3MKKwkJOzsKKwktbWludCB8IC1taW50WzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgYWxpYXNlcyBmb3IgY2VydGFpbiBDUFUtQ09NUEFOWSBjb21iaW5hdGlvbnMuCitjYXNlICRiYXNpY19tYWNoaW5lIGluCisJIyBSZWNvZ25pemUgdGhlIGJhc2ljIENQVSB0eXBlcyB3aXRob3V0IGNvbXBhbnkgbmFtZS4KKwkjIFNvbWUgYXJlIG9taXR0ZWQgaGVyZSBiZWNhdXNlIHRoZXkgaGF2ZSBzcGVjaWFsIG1lYW5pbmdzIGJlbG93LgorCTE3NTBhIHwgNTgwIFwKKwl8IGEyOWsgXAorCXwgYWxwaGEgfCBhbHBoYWV2WzQtOF0gfCBhbHBoYWV2NTYgfCBhbHBoYWV2Nls3OF0gfCBhbHBoYXBjYTVbNjddIFwKKwl8IGFscGhhNjQgfCBhbHBoYTY0ZXZbNC04XSB8IGFscGhhNjRldjU2IHwgYWxwaGE2NGV2Nls3OF0gfCBhbHBoYTY0cGNhNVs2N10gXAorCXwgYW0zM18yLjAgXAorCXwgYXJjIHwgYXJtIHwgYXJtW2JsXWUgfCBhcm1lW2xiXSB8IGFybXZbMjM0NV0gfCBhcm12WzM0NV1bbGJdIHwgYXZyIHwgYXZyMzIgXAorCXwgYmZpbiBcCisJfCBjNHggfCBjbGlwcGVyIFwKKwl8IGQxMHYgfCBkMzB2IHwgZGx4IHwgZHNwMTZ4eCBcCisJfCBmaWRvIHwgZnIzMCB8IGZydiBcCisJfCBoODMwMCB8IGg4NTAwIHwgaHBwYSB8IGhwcGExLlswMV0gfCBocHBhMi4wIHwgaHBwYTIuMFtud10gfCBocHBhNjQgXAorCXwgaTM3MCB8IGk4NjAgfCBpOTYwIHwgaWE2NCBcCisJfCBpcDJrIHwgaXEyMDAwIFwKKwl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAorCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIHwgbWV0YWcgXAorCXwgbWlwcyB8IG1pcHNiZSB8IG1pcHNlYiB8IG1pcHNlbCB8IG1pcHNsZSBcCisJfCBtaXBzMTYgXAorCXwgbWlwczY0IHwgbWlwczY0ZWwgXAorCXwgbWlwczY0b2N0ZW9uIHwgbWlwczY0b2N0ZW9uZWwgXAorCXwgbWlwczY0b3Jpb24gfCBtaXBzNjRvcmlvbmVsIFwKKwl8IG1pcHM2NHI1OTAwIHwgbWlwczY0cjU5MDBlbCBcCisJfCBtaXBzNjR2ciB8IG1pcHM2NHZyZWwgXAorCXwgbWlwczY0dnI0MTAwIHwgbWlwczY0dnI0MTAwZWwgXAorCXwgbWlwczY0dnI0MzAwIHwgbWlwczY0dnI0MzAwZWwgXAorCXwgbWlwczY0dnI1MDAwIHwgbWlwczY0dnI1MDAwZWwgXAorCXwgbWlwczY0dnI1OTAwIHwgbWlwczY0dnI1OTAwZWwgXAorCXwgbWlwc2lzYTMyIHwgbWlwc2lzYTMyZWwgXAorCXwgbWlwc2lzYTMycjIgfCBtaXBzaXNhMzJyMmVsIFwKKwl8IG1pcHNpc2E2NCB8IG1pcHNpc2E2NGVsIFwKKwl8IG1pcHNpc2E2NHIyIHwgbWlwc2lzYTY0cjJlbCBcCisJfCBtaXBzaXNhNjRzYjEgfCBtaXBzaXNhNjRzYjFlbCBcCisJfCBtaXBzaXNhNjRzcjcxayB8IG1pcHNpc2E2NHNyNzFrZWwgXAorCXwgbWlwc3R4MzkgfCBtaXBzdHgzOWVsIFwKKwl8IG1uMTAyMDAgfCBtbjEwMzAwIFwKKwl8IG10IFwKKwl8IG1zcDQzMCBcCisJfCBuaW9zIHwgbmlvczIgXAorCXwgbnMxNmsgfCBuczMyayBcCisJfCBvcjMyIFwKKwl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCisJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCisJfCBweXJhbWlkIFwKKwl8IHNjb3JlIFwKKwl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaDY0IHwgc2g2NGxlIFwKKwl8IHNwYXJjIHwgc3BhcmM2NCB8IHNwYXJjNjRiIHwgc3BhcmM2NHYgfCBzcGFyYzg2eCB8IHNwYXJjbGV0IHwgc3BhcmNsaXRlIFwKKwl8IHNwYXJjdjggfCBzcGFyY3Y5IHwgc3BhcmN2OWIgfCBzcGFyY3Y5diBcCisJfCBzcHUgfCBzdHJvbmdhcm0gXAorCXwgdGFob2UgfCB0aHVtYiB8IHRpYzR4IHwgdGljODAgfCB0cm9uIFwKKwl8IHY4NTAgfCB2ODUwZSBcCisJfCB3ZTMyayBcCisJfCB4ODYgfCB4YzE2eCB8IHhzY2FsZSB8IHhzY2FsZWVbYmxdIHwgeHN0b3JteTE2IHwgeHRlbnNhIFwKKwl8IHo4aykKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyKQorCQkjIE1vdG9yb2xhIDY4SEMxMS8xMi4KKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCW9zPS1ub25lCisJCTs7CisJbTg4MTEwIHwgbTY4MFsxMjM0Nl0wIHwgbTY4Mz8yIHwgbTY4MzYwIHwgbTUyMDAgfCB2NzAgfCB3NjUgfCB6OGspCisJCTs7CisJbXMxKQorCQliYXNpY19tYWNoaW5lPW10LXVua25vd24KKwkJOzsKKworCSMgV2UgdXNlIGBwYycgcmF0aGVyIHRoYW4gYHVua25vd24nCisJIyBiZWNhdXNlICgxKSB0aGF0J3Mgd2hhdCB0aGV5IG5vcm1hbGx5IGFyZSwgYW5kCisJIyAoMikgdGhlIHdvcmQgInVua25vd24iIHRlbmRzIHRvIGNvbmZ1c2UgYmVnaW5uaW5nIHVzZXJzLgorCWkqODYgfCB4ODZfNjQpCisJICBiYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXBjCisJICA7OworCSMgT2JqZWN0IGlmIG1vcmUgdGhhbiBvbmUgY29tcGFueSBuYW1lIHdvcmQuCisJKi0qLSopCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogbWFjaGluZSBcYCRiYXNpY19tYWNoaW5lXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGggY29tcGFueSBuYW1lLgorCTU4MC0qIFwKKwl8IGEyOWstKiBcCisJfCBhbHBoYS0qIHwgYWxwaGFldls0LThdLSogfCBhbHBoYWV2NTYtKiB8IGFscGhhZXY2Wzc4XS0qIFwKKwl8IGFscGhhNjQtKiB8IGFscGhhNjRldls0LThdLSogfCBhbHBoYTY0ZXY1Ni0qIHwgYWxwaGE2NGV2Nls3OF0tKiBcCisJfCBhbHBoYXBjYTVbNjddLSogfCBhbHBoYTY0cGNhNVs2N10tKiB8IGFyYy0qIFwKKwl8IGFybS0qICB8IGFybWJlLSogfCBhcm1sZS0qIHwgYXJtZWItKiB8IGFybXYqLSogXAorCXwgYXZyLSogfCBhdnIzMi0qIFwKKwl8IGJmaW4tKiB8IGJzMjAwMC0qIFwKKwl8IGNbMTIzXSogfCBjMzAtKiB8IFtjanRdOTAtKiB8IGM0eC0qIHwgYzU0eC0qIHwgYzU1eC0qIHwgYzZ4LSogXAorCXwgY2xpcHBlci0qIHwgY3JheW52LSogfCBjeWRyYS0qIFwKKwl8IGQxMHYtKiB8IGQzMHYtKiB8IGRseC0qIFwKKwl8IGVseHNpLSogXAorCXwgZjMwWzAxXS0qIHwgZjcwMC0qIHwgZmlkby0qIHwgZnIzMC0qIHwgZnJ2LSogfCBmeDgwLSogXAorCXwgaDgzMDAtKiB8IGg4NTAwLSogXAorCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKKwl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCisJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBtMzJjLSogfCBtMzJyLSogfCBtMzJybGUtKiBcCisJfCBtNjgwMDAtKiB8IG02ODBbMDEyMzQ2XTAtKiB8IG02ODM2MC0qIHwgbTY4Mz8yLSogfCBtNjhrLSogXAorCXwgbTg4MTEwLSogfCBtODhrLSogfCBtYXhxLSogfCBtY29yZS0qIHwgbWV0YWctKiBcCisJfCBtaXBzLSogfCBtaXBzYmUtKiB8IG1pcHNlYi0qIHwgbWlwc2VsLSogfCBtaXBzbGUtKiBcCisJfCBtaXBzMTYtKiBcCisJfCBtaXBzNjQtKiB8IG1pcHM2NGVsLSogXAorCXwgbWlwczY0b2N0ZW9uLSogfCBtaXBzNjRvY3Rlb25lbC0qIFwKKwl8IG1pcHM2NG9yaW9uLSogfCBtaXBzNjRvcmlvbmVsLSogXAorCXwgbWlwczY0cjU5MDAtKiB8IG1pcHM2NHI1OTAwZWwtKiBcCisJfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NHZyNDEwMC0qIHwgbWlwczY0dnI0MTAwZWwtKiBcCisJfCBtaXBzNjR2cjQzMDAtKiB8IG1pcHM2NHZyNDMwMGVsLSogXAorCXwgbWlwczY0dnI1MDAwLSogfCBtaXBzNjR2cjUwMDBlbC0qIFwKKwl8IG1pcHM2NHZyNTkwMC0qIHwgbWlwczY0dnI1OTAwZWwtKiBcCisJfCBtaXBzaXNhMzItKiB8IG1pcHNpc2EzMmVsLSogXAorCXwgbWlwc2lzYTMycjItKiB8IG1pcHNpc2EzMnIyZWwtKiBcCisJfCBtaXBzaXNhNjQtKiB8IG1pcHNpc2E2NGVsLSogXAorCXwgbWlwc2lzYTY0cjItKiB8IG1pcHNpc2E2NHIyZWwtKiBcCisJfCBtaXBzaXNhNjRzYjEtKiB8IG1pcHNpc2E2NHNiMWVsLSogXAorCXwgbWlwc2lzYTY0c3I3MWstKiB8IG1pcHNpc2E2NHNyNzFrZWwtKiBcCisJfCBtaXBzdHgzOS0qIHwgbWlwc3R4MzllbC0qIFwKKwl8IG1taXgtKiBcCisJfCBtdC0qIFwKKwl8IG1zcDQzMC0qIFwKKwl8IG5pb3MtKiB8IG5pb3MyLSogXAorCXwgbm9uZS0qIHwgbnAxLSogfCBuczE2ay0qIHwgbnMzMmstKiBcCisJfCBvcmlvbi0qIFwKKwl8IHBkcDEwLSogfCBwZHAxMS0qIHwgcGotKiB8IHBqbC0qIHwgcG4tKiB8IHBvd2VyLSogXAorCXwgcG93ZXJwYy0qIHwgcG93ZXJwYzY0LSogfCBwb3dlcnBjNjRsZS0qIHwgcG93ZXJwY2xlLSogfCBwcGNiZS0qIFwKKwl8IHB5cmFtaWQtKiBcCisJfCByb21wLSogfCByczYwMDAtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzIzXWUtKiB8IHNoWzM0XWViLSogfCBzaGViLSogfCBzaGJlLSogXAorCXwgc2hsZS0qIHwgc2hbMTIzNF1sZS0qIHwgc2gzZWxlLSogfCBzaDY0LSogfCBzaDY0bGUtKiBcCisJfCBzcGFyYy0qIHwgc3BhcmM2NC0qIHwgc3BhcmM2NGItKiB8IHNwYXJjNjR2LSogfCBzcGFyYzg2eC0qIHwgc3BhcmNsZXQtKiBcCisJfCBzcGFyY2xpdGUtKiBcCisJfCBzcGFyY3Y4LSogfCBzcGFyY3Y5LSogfCBzcGFyY3Y5Yi0qIHwgc3BhcmN2OXYtKiB8IHN0cm9uZ2FybS0qIHwgc3YxLSogfCBzeD8tKiBcCisJfCB0YWhvZS0qIHwgdGh1bWItKiBcCisJfCB0aWMzMC0qIHwgdGljNHgtKiB8IHRpYzU0eC0qIHwgdGljNTV4LSogfCB0aWM2eC0qIHwgdGljODAtKiB8IHRpbGUtKiBcCisJfCB0cm9uLSogXAorCXwgdjg1MC0qIHwgdjg1MGUtKiB8IHZheC0qIFwKKwl8IHdlMzJrLSogXAorCXwgeDg2LSogfCB4ODZfNjQtKiB8IHhjMTZ4LSogfCB4cHMxMDAtKiB8IHhzY2FsZS0qIHwgeHNjYWxlZVtibF0tKiBcCisJfCB4c3Rvcm15MTYtKiB8IHh0ZW5zYSotKiBcCisJfCB5bXAtKiBcCisJfCB6OGstKikKKwkJOzsKKwkjIFJlY29nbml6ZSB0aGUgYmFzaWMgQ1BVIHR5cGVzIHdpdGhvdXQgY29tcGFueSBuYW1lLCB3aXRoIGdsb2IgbWF0Y2guCisJeHRlbnNhKikKKwkJYmFzaWNfbWFjaGluZT0kYmFzaWNfbWFjaGluZS11bmtub3duCisJCTs7CisJIyBSZWNvZ25pemUgdGhlIHZhcmlvdXMgbWFjaGluZSBuYW1lcyBhbmQgYWxpYXNlcyB3aGljaCBzdGFuZAorCSMgZm9yIGEgQ1BVIHR5cGUgYW5kIGEgY29tcGFueSBhbmQgc29tZXRpbWVzIGV2ZW4gYW4gT1MuCisJMzg2YnNkKQorCQliYXNpY19tYWNoaW5lPWkzODYtdW5rbm93bgorCQlvcz0tYnNkCisJCTs7CisJM2IxIHwgNzMwMCB8IDczMDAtYXR0IHwgYXR0LTczMDAgfCBwYzczMDAgfCBzYWZhcmkgfCB1bml4cGMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWF0dAorCQk7OworCTNiKikKKwkJYmFzaWNfbWFjaGluZT13ZTMyay1hdHQKKwkJOzsKKwlhMjlraGlmKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS11ZGkKKwkJOzsKKyAgICAJYWJhY3VzKQorCQliYXNpY19tYWNoaW5lPWFiYWN1cy11bmtub3duCisJCTs7CisJYWRvYmU2OGspCisJCWJhc2ljX21hY2hpbmU9bTY4MDEwLWFkb2JlCisJCW9zPS1zY291dAorCQk7OworCWFsbGlhbnQgfCBmeDgwKQorCQliYXNpY19tYWNoaW5lPWZ4ODAtYWxsaWFudAorCQk7OworCWFsdG9zIHwgYWx0b3MzMDY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYWx0b3MKKwkJOzsKKwlhbTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLW5vbmUKKwkJb3M9LWJzZAorCQk7OworCWFtZDY0KQorCQliYXNpY19tYWNoaW5lPXg4Nl82NC1wYworCQk7OworCWFtZDY0LSopCisJCWJhc2ljX21hY2hpbmU9eDg2XzY0LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYW1kYWhsKQorCQliYXNpY19tYWNoaW5lPTU4MC1hbWRhaGwKKwkJb3M9LXN5c3YKKwkJOzsKKwlhbWlnYSB8IGFtaWdhLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCTs7CisJYW1pZ2FvcyB8IGFtaWdhZG9zKQorCQliYXNpY19tYWNoaW5lPW02OGstdW5rbm93bgorCQlvcz0tYW1pZ2FvcworCQk7OworCWFtaWdhdW5peCB8IGFtaXgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay11bmtub3duCisJCW9zPS1zeXN2NAorCQk7OworCWFwb2xsbzY4KQorCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCisJCW9zPS1zeXN2CisJCTs7CisJYXBvbGxvNjhic2QpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1hcG9sbG8KKwkJb3M9LWJzZAorCQk7OworCWF1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCW9zPS1hdXgKKwkJOzsKKwliYWxhbmNlKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXNlcXVlbnQKKwkJb3M9LWR5bml4CisJCTs7CisJYmxhY2tmaW4pCisJCWJhc2ljX21hY2hpbmU9YmZpbi11bmtub3duCisJCW9zPS1saW51eAorCQk7OworCWJsYWNrZmluLSopCisJCWJhc2ljX21hY2hpbmU9YmZpbi1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwljOTApCisJCWJhc2ljX21hY2hpbmU9YzkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNvbnZleC1jMSkKKwkJYmFzaWNfbWFjaGluZT1jMS1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMikKKwkJYmFzaWNfbWFjaGluZT1jMi1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNvbnZleC1jMzIpCisJCWJhc2ljX21hY2hpbmU9YzMyLWNvbnZleAorCQlvcz0tYnNkCisJCTs7CisJY29udmV4LWMzNCkKKwkJYmFzaWNfbWFjaGluZT1jMzQtY29udmV4CisJCW9zPS1ic2QKKwkJOzsKKwljb252ZXgtYzM4KQorCQliYXNpY19tYWNoaW5lPWMzOC1jb252ZXgKKwkJb3M9LWJzZAorCQk7OworCWNyYXkgfCBqOTApCisJCWJhc2ljX21hY2hpbmU9ajkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCWNyYXludikKKwkJYmFzaWNfbWFjaGluZT1jcmF5bnYtY3JheQorCQlvcz0tdW5pY29zbXAKKwkJOzsKKwljcjE2KQorCQliYXNpY19tYWNoaW5lPWNyMTYtdW5rbm93bgorCQlvcz0tZWxmCisJCTs7CisJY3JkcyB8IHVub3MpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1jcmRzCisJCTs7CisJY3Jpc3YzMiB8IGNyaXN2MzItKiB8IGV0cmF4ZnMqKQorCQliYXNpY19tYWNoaW5lPWNyaXN2MzItYXhpcworCQk7OworCWNyaXMgfCBjcmlzLSogfCBldHJheCopCisJCWJhc2ljX21hY2hpbmU9Y3Jpcy1heGlzCisJCTs7CisJY3J4KQorCQliYXNpY19tYWNoaW5lPWNyeC11bmtub3duCisJCW9zPS1lbGYKKwkJOzsKKwlkYTMwIHwgZGEzMC0qKQorCQliYXNpY19tYWNoaW5lPW02OGstZGEzMAorCQk7OworCWRlY3N0YXRpb24gfCBkZWNzdGF0aW9uLTMxMDAgfCBwbWF4IHwgcG1heC0qIHwgcG1pbiB8IGRlYzMxMDAgfCBkZWNzdGF0bikKKwkJYmFzaWNfbWFjaGluZT1taXBzLWRlYworCQk7OworCWRlY3N5c3RlbTEwKiB8IGRlYzEwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMxMAorCQk7OworCWRlY3N5c3RlbTIwKiB8IGRlYzIwKikKKwkJYmFzaWNfbWFjaGluZT1wZHAxMC1kZWMKKwkJb3M9LXRvcHMyMAorCQk7OworCWRlbHRhIHwgMzMwMCB8IG1vdG9yb2xhLTMzMDAgfCBtb3Rvcm9sYS1kZWx0YSBcCisJICAgICAgfCAzMzAwLW1vdG9yb2xhIHwgZGVsdGEtbW90b3JvbGEpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1tb3Rvcm9sYQorCQk7OworCWRlbHRhODgpCisJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQorCQlvcz0tc3lzdjMKKwkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OworCWRqZ3BwKQorCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKKwkJb3M9LW1zZG9zZGpncHAKKwkJOzsKKwlkcHgyMCB8IGRweDIwLSopCisJCWJhc2ljX21hY2hpbmU9cnM2MDAwLWJ1bGwKKwkJb3M9LWJvc3gKKwkJOzsKKwlkcHgyKiB8IGRweDIqLWJ1bGwpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1idWxsCisJCW9zPS1zeXN2MworCQk7OworCWVibW9uMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstYW1kCisJCW9zPS1lYm1vbgorCQk7OworCWVseHNpKQorCQliYXNpY19tYWNoaW5lPWVseHNpLWVseHNpCisJCW9zPS1ic2QKKwkJOzsKKwllbmNvcmUgfCB1bWF4IHwgbW1heCkKKwkJYmFzaWNfbWFjaGluZT1uczMyay1lbmNvcmUKKwkJOzsKKwllczE4MDAgfCBPU0U2OGsgfCBvc2U2OGsgfCBvc2UgfCBPU0UpCisJCWJhc2ljX21hY2hpbmU9bTY4ay1lcmljc3NvbgorCQlvcz0tb3NlCisJCTs7CisJZngyODAwKQorCQliYXNpY19tYWNoaW5lPWk4NjAtYWxsaWFudAorCQk7OworCWdlbml4KQorCQliYXNpY19tYWNoaW5lPW5zMzJrLW5zCisJCTs7CisJZ21pY3JvKQorCQliYXNpY19tYWNoaW5lPXRyb24tZ21pY3JvCisJCW9zPS1zeXN2CisJCTs7CisJZ28zMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1nbzMyCisJCTs7CisJaDMwNTByKiB8IGhpdXgqKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCWg4MzAwaG1zKQorCQliYXNpY19tYWNoaW5lPWg4MzAwLWhpdGFjaGkKKwkJb3M9LWhtcworCQk7OworCWg4MzAweHJheSkKKwkJYmFzaWNfbWFjaGluZT1oODMwMC1oaXRhY2hpCisJCW9zPS14cmF5CisJCTs7CisJaDg1MDBobXMpCisJCWJhc2ljX21hY2hpbmU9aDg1MDAtaGl0YWNoaQorCQlvcz0taG1zCisJCTs7CisJaGFycmlzKQorCQliYXNpY19tYWNoaW5lPW04OGstaGFycmlzCisJCW9zPS1zeXN2MworCQk7OworCWhwMzAwLSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1ocAorCQk7OworCWhwMzAwYnNkKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJb3M9LWJzZAorCQk7OworCWhwMzAwaHB1eCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhwCisJCW9zPS1ocHV4CisJCTs7CisJaHAzazlbMC05XVswLTldIHwgaHA5WzAtOV1bMC05XSkKKwkJYmFzaWNfbWFjaGluZT1ocHBhMS4wLWhwCisJCTs7CisJaHA5azJbMC05XVswLTldIHwgaHA5azMxWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLWhwCisJCTs7CisJaHA5azNbMi05XVswLTldKQorCQliYXNpY19tYWNoaW5lPW02OGstaHAKKwkJOzsKKwlocDlrNlswLTldWzAtOV0gfCBocDZbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocDlrN1swLTc5XVswLTldIHwgaHA3WzAtNzldWzAtOV0pCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs3OFswLTldIHwgaHA3OFswLTldKQorCQkjIEZJWE1FOiByZWFsbHkgaHBwYTIuMC1ocAorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFs2N10xIHwgaHA4WzY3XTEgfCBocDlrODBbMjRdIHwgaHA4MFsyNF0gfCBocDlrOFs3OF05IHwgaHA4Wzc4XTkgfCBocDlrODkzIHwgaHA4OTMpCisJCSMgRklYTUU6IHJlYWxseSBocHBhMi4wLWhwCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1ocAorCQk7OworCWhwOWs4WzAtOV1bMTM2NzldIHwgaHA4WzAtOV1bMTM2NzldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJOzsKKwlocDlrOFswLTldWzAtOV0gfCBocDhbMC05XVswLTldKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjAtaHAKKwkJOzsKKwlocHBhLW5leHQpCisJCW9zPS1uZXh0c3RlcDMKKwkJOzsKKwlocHBhb3NmKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LW9zZgorCQk7OworCWhwcHJvKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaHAKKwkJb3M9LXByb2VsZgorCQk7OworCWkzNzAtaWJtKiB8IGlibSopCisJCWJhc2ljX21hY2hpbmU9aTM3MC1pYm0KKwkJOzsKKyMgSSdtIG5vdCBzdXJlIHdoYXQgIlN5c3YzMiIgbWVhbnMuICBTaG91bGQgdGhpcyBiZSBzeXN2My4yPworCWkqODZ2MzIpCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJDEgfCBzZWQgLWUgJ3MvODYuKi84Ni1wYy8nYAorCQlvcz0tc3lzdjMyCisJCTs7CisJaSo4NnY0KikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zeXN2NAorCQk7OworCWkqODZ2KQorCQliYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkIC1lICdzLzg2LiovODYtcGMvJ2AKKwkJb3M9LXN5c3YKKwkJOzsKKwlpKjg2c29sMikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkMSB8IHNlZCAtZSAncy84Ni4qLzg2LXBjLydgCisJCW9zPS1zb2xhcmlzMgorCQk7OworCWkzODZtYWNoKQorCQliYXNpY19tYWNoaW5lPWkzODYtbWFjaAorCQlvcz0tbWFjaAorCQk7OworCWkzODYtdnN0YSB8IHZzdGEpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni11bmtub3duCisJCW9zPS12c3RhCisJCTs7CisJaXJpcyB8IGlyaXM0ZCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLXNnaQorCQljYXNlICRvcyBpbgorCQkgICAgLWlyaXgqKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0taXJpeDQKKwkJCTs7CisJCWVzYWMKKwkJOzsKKwlpc2k2OCB8IGlzaSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWlzaQorCQlvcz0tc3lzdgorCQk7OworCW02OGtub21tdSkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXVua25vd24KKwkJb3M9LWxpbnV4CisJCTs7CisJbTY4a25vbW11LSopCisJCWJhc2ljX21hY2hpbmU9bTY4ay1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQlvcz0tbGludXgKKwkJOzsKKwltODhrLW9tcm9uKikKKwkJYmFzaWNfbWFjaGluZT1tODhrLW9tcm9uCisJCTs7CisJbWFnbnVtIHwgbTMyMzApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1taXBzCisJCW9zPS1zeXN2CisJCTs7CisJbWVybGluKQorCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKKwkJb3M9LXN5c3YKKwkJOzsKKwltaW5ndzMyKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LW1pbmd3MzIKKwkJOzsKKwltaW5ndzMyY2UpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LW1pbmd3MzJjZQorCQk7OworCW1pbmlmcmFtZSkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtY29udmVyZ2VudAorCQk7OworCSptaW50IHwgLW1pbnRbMC05XSogfCAqTWlOVCB8ICpNaU5UWzAtOV0qKQorCQliYXNpY19tYWNoaW5lPW02OGstYXRhcmkKKwkJb3M9LW1pbnQKKwkJOzsKKwltaXBzMyotKikKKwkJYmFzaWNfbWFjaGluZT1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAtZSAncy9taXBzMy9taXBzNjQvJ2AKKwkJOzsKKwltaXBzMyopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgLWUgJ3MvbWlwczMvbWlwczY0LydgLXVua25vd24KKwkJOzsKKwltb25pdG9yKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJbW9ycGhvcykKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJb3M9LW1vcnBob3MKKwkJOzsKKwltc2RvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1tc2RvcworCQk7OworCW1zMS0qKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkIC1lICdzL21zMS0vbXQtLydgCisJCTs7CisJbXZzKQorCQliYXNpY19tYWNoaW5lPWkzNzAtaWJtCisJCW9zPS1tdnMKKwkJOzsKKwluY3IzMDAwKQorCQliYXNpY19tYWNoaW5lPWk0ODYtbmNyCisJCW9zPS1zeXN2NAorCQk7OworCW5ldGJzZDM4NikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXVua25vd24KKwkJb3M9LW5ldGJzZAorCQk7OworCW5ldHdpbmRlcikKKwkJYmFzaWNfbWFjaGluZT1hcm12NGwtcmViZWwKKwkJb3M9LWxpbnV4CisJCTs7CisJbmV3cyB8IG5ld3M3MDAgfCBuZXdzODAwIHwgbmV3czkwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXNvbnkKKwkJb3M9LW5ld3NvcworCQk7OworCW5ld3MxMDAwKQorCQliYXNpY19tYWNoaW5lPW02ODAzMC1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZXdzLTM2MDAgfCByaXNjLW5ld3MpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zb255CisJCW9zPS1uZXdzb3MKKwkJOzsKKwluZWN2NzApCisJCWJhc2ljX21hY2hpbmU9djcwLW5lYworCQlvcz0tc3lzdgorCQk7OworCW5leHQgfCBtKi1uZXh0ICkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5leHQKKwkJY2FzZSAkb3MgaW4KKwkJICAgIC1uZXh0c3RlcCogKQorCQkJOzsKKwkJICAgIC1uczIqKQorCQkgICAgICBvcz0tbmV4dHN0ZXAyCisJCQk7OworCQkgICAgKikKKwkJICAgICAgb3M9LW5leHRzdGVwMworCQkJOzsKKwkJZXNhYworCQk7OworCW5oMzAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5oWzQ1XTAwMCkKKwkJYmFzaWNfbWFjaGluZT1tODhrLWhhcnJpcworCQlvcz0tY3h1eAorCQk7OworCW5pbmR5OTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW5pbmR5CisJCTs7CisJbW9uOTYwKQorCQliYXNpY19tYWNoaW5lPWk5NjAtaW50ZWwKKwkJb3M9LW1vbjk2MAorCQk7OworCW5vbnN0b3B1eCkKKwkJYmFzaWNfbWFjaGluZT1taXBzLWNvbXBhcQorCQlvcz0tbm9uc3RvcHV4CisJCTs7CisJbnAxKQorCQliYXNpY19tYWNoaW5lPW5wMS1nb3VsZAorCQk7OworCW5zci10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQorCQk7OworCW9wNTBuLSogfCBvcDYwYy0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwlvcGVucmlzYyB8IG9wZW5yaXNjLSopCisJCWJhc2ljX21hY2hpbmU9b3IzMi11bmtub3duCisJCTs7CisJb3M0MDApCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwYy1pYm0KKwkJb3M9LW9zNDAwCisJCTs7CisJT1NFNjgwMDAgfCBvc2U2ODAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtZXJpY3Nzb24KKwkJb3M9LW9zZQorCQk7OworCW9zNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstbm9uZQorCQlvcz0tb3M2OGsKKwkJOzsKKwlwYS1oaXRhY2hpKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtaGl0YWNoaQorCQlvcz0taGl1eHdlMgorCQk7OworCXBhcmFnb24pCisJCWJhc2ljX21hY2hpbmU9aTg2MC1pbnRlbAorCQlvcz0tb3NmCisJCTs7CisJcGFyaXNjKQorCQliYXNpY19tYWNoaW5lPWhwcGEtdW5rbm93bgorCQlvcz0tbGludXgKKwkJOzsKKwlwYXJpc2MtKikKKwkJYmFzaWNfbWFjaGluZT1ocHBhLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCW9zPS1saW51eAorCQk7OworCXBiZCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy10dGkKKwkJOzsKKwlwYmIpCisJCWJhc2ljX21hY2hpbmU9bTY4ay10dGkKKwkJOzsKKwlwYzUzMiB8IHBjNTMyLSopCisJCWJhc2ljX21hY2hpbmU9bnMzMmstcGM1MzIKKwkJOzsKKwlwYzk4KQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJOzsKKwlwYzk4LSopCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBlbnRpdW0gfCBwNSB8IGs1IHwgazYgfCBuZXhnZW4gfCB2aWFjMykKKwkJYmFzaWNfbWFjaGluZT1pNTg2LXBjCisJCTs7CisJcGVudGl1bXBybyB8IHA2IHwgNng4NiB8IGF0aGxvbiB8IGF0aGxvbl8qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtcGMKKwkJOzsKKwlwZW50aXVtaWkgfCBwZW50aXVtMiB8IHBlbnRpdW1paWkgfCBwZW50aXVtMykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCTs7CisJcGVudGl1bTQpCisJCWJhc2ljX21hY2hpbmU9aTc4Ni1wYworCQk7OworCXBlbnRpdW0tKiB8IHA1LSogfCBrNS0qIHwgazYtKiB8IG5leGdlbi0qIHwgdmlhYzMtKikKKwkJYmFzaWNfbWFjaGluZT1pNTg2LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcGVudGl1bXByby0qIHwgcDYtKiB8IDZ4ODYtKiB8IGF0aGxvbi0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtaWktKiB8IHBlbnRpdW0yLSogfCBwZW50aXVtaWlpLSogfCBwZW50aXVtMy0qKQorCQliYXNpY19tYWNoaW5lPWk2ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwZW50aXVtNC0qKQorCQliYXNpY19tYWNoaW5lPWk3ODYtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwbikKKwkJYmFzaWNfbWFjaGluZT1wbi1nb3VsZAorCQk7OworCXBvd2VyKQliYXNpY19tYWNoaW5lPXBvd2VyLWlibQorCQk7OworCXBwYykJYmFzaWNfbWFjaGluZT1wb3dlcnBjLXVua25vd24KKwkJOzsKKwlwcGMtKikJYmFzaWNfbWFjaGluZT1wb3dlcnBjLWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJcHBjbGUgfCBwb3dlcnBjbGl0dGxlIHwgcHBjLWxlIHwgcG93ZXJwYy1saXR0bGUpCisJCWJhc2ljX21hY2hpbmU9cG93ZXJwY2xlLXVua25vd24KKwkJOzsKKwlwcGNsZS0qIHwgcG93ZXJwY2xpdHRsZS0qKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGNsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBwYzY0KQliYXNpY19tYWNoaW5lPXBvd2VycGM2NC11bmtub3duCisJCTs7CisJcHBjNjQtKikgYmFzaWNfbWFjaGluZT1wb3dlcnBjNjQtYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKKwkJOzsKKwlwcGM2NGxlIHwgcG93ZXJwYzY0bGl0dGxlIHwgcHBjNjQtbGUgfCBwb3dlcnBjNjQtbGl0dGxlKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGM2NGxlLXVua25vd24KKwkJOzsKKwlwcGM2NGxlLSogfCBwb3dlcnBjNjRsaXR0bGUtKikKKwkJYmFzaWNfbWFjaGluZT1wb3dlcnBjNjRsZS1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCXBzMikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LWlibQorCQk7OworCXB3MzIpCisJCWJhc2ljX21hY2hpbmU9aTU4Ni11bmtub3duCisJCW9zPS1wdzMyCisJCTs7CisJcmRvcykKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXBjCisJCW9zPS1yZG9zCisJCTs7CisJcm9tNjhrKQorCQliYXNpY19tYWNoaW5lPW02OGstcm9tNjhrCisJCW9zPS1jb2ZmCisJCTs7CisJcm1bNDZdMDApCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zaWVtZW5zCisJCTs7CisJcnRwYyB8IHJ0cGMtKikKKwkJYmFzaWNfbWFjaGluZT1yb21wLWlibQorCQk7OworCXMzOTAgfCBzMzkwLSopCisJCWJhc2ljX21hY2hpbmU9czM5MC1pYm0KKwkJOzsKKwlzMzkweCB8IHMzOTB4LSopCisJCWJhc2ljX21hY2hpbmU9czM5MHgtaWJtCisJCTs7CisJc2EyOTIwMCkKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJc2IxKQorCQliYXNpY19tYWNoaW5lPW1pcHNpc2E2NHNiMS11bmtub3duCisJCTs7CisJc2IxZWwpCisJCWJhc2ljX21hY2hpbmU9bWlwc2lzYTY0c2IxZWwtdW5rbm93bgorCQk7OworCXNkZSkKKwkJYmFzaWNfbWFjaGluZT1taXBzaXNhMzItc2RlCisJCW9zPS1lbGYKKwkJOzsKKwlzZWkpCisJCWJhc2ljX21hY2hpbmU9bWlwcy1zZWkKKwkJb3M9LXNlaXV4CisJCTs7CisJc2VxdWVudCkKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXNlcXVlbnQKKwkJOzsKKwlzaCkKKwkJYmFzaWNfbWFjaGluZT1zaC1oaXRhY2hpCisJCW9zPS1obXMKKwkJOzsKKwlzaDVlbCkKKwkJYmFzaWNfbWFjaGluZT1zaDVsZS11bmtub3duCisJCTs7CisJc2g2NCkKKwkJYmFzaWNfbWFjaGluZT1zaDY0LXVua25vd24KKwkJOzsKKwlzcGFyY2xpdGUtd3JzIHwgc2ltc28td3JzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjbGl0ZS13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwlzcHM3KQorCQliYXNpY19tYWNoaW5lPW02OGstYnVsbAorCQlvcz0tc3lzdjIKKwkJOzsKKwlzcHVyKQorCQliYXNpY19tYWNoaW5lPXNwdXItdW5rbm93bgorCQk7OworCXN0MjAwMCkKKwkJYmFzaWNfbWFjaGluZT1tNjhrLXRhbmRlbQorCQk7OworCXN0cmF0dXMpCisJCWJhc2ljX21hY2hpbmU9aTg2MC1zdHJhdHVzCisJCW9zPS1zeXN2NAorCQk7OworCXN1bjIpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQk7OworCXN1bjJvczMpCisJCWJhc2ljX21hY2hpbmU9bTY4MDAwLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuMm9zNCkKKwkJYmFzaWNfbWFjaGluZT1tNjgwMDAtc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW4zb3MzKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczMKKwkJOzsKKwlzdW4zb3M0KQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCW9zPS1zdW5vczQKKwkJOzsKKwlzdW40b3MzKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc3Vub3MzCisJCTs7CisJc3VuNG9zNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJb3M9LXN1bm9zNAorCQk7OworCXN1bjRzb2wyKQorCQliYXNpY19tYWNoaW5lPXNwYXJjLXN1bgorCQlvcz0tc29sYXJpczIKKwkJOzsKKwlzdW4zIHwgc3VuMy0qKQorCQliYXNpY19tYWNoaW5lPW02OGstc3VuCisJCTs7CisJc3VuNCkKKwkJYmFzaWNfbWFjaGluZT1zcGFyYy1zdW4KKwkJOzsKKwlzdW4zODYgfCBzdW4zODZpIHwgcm9hZHJ1bm5lcikKKwkJYmFzaWNfbWFjaGluZT1pMzg2LXN1bgorCQk7OworCXN2MSkKKwkJYmFzaWNfbWFjaGluZT1zdjEtY3JheQorCQlvcz0tdW5pY29zCisJCTs7CisJc3ltbWV0cnkpCisJCWJhc2ljX21hY2hpbmU9aTM4Ni1zZXF1ZW50CisJCW9zPS1keW5peAorCQk7OworCXQzZSkKKwkJYmFzaWNfbWFjaGluZT1hbHBoYWV2NS1jcmF5CisJCW9zPS11bmljb3MKKwkJOzsKKwl0OTApCisJCWJhc2ljX21hY2hpbmU9dDkwLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXRpYzU0eCB8IGM1NHgqKQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4IHwgYzU1eCopCisJCWJhc2ljX21hY2hpbmU9dGljNTV4LXVua25vd24KKwkJb3M9LWNvZmYKKwkJOzsKKwl0aWM2eCB8IGM2eCopCisJCWJhc2ljX21hY2hpbmU9dGljNngtdW5rbm93bgorCQlvcz0tY29mZgorCQk7OworCXRpbGUqKQorCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgorCQlvcz0tbGludXgtZ251CisJCTs7CisJdHgzOSkKKwkJYmFzaWNfbWFjaGluZT1taXBzdHgzOS11bmtub3duCisJCTs7CisJdHgzOWVsKQorCQliYXNpY19tYWNoaW5lPW1pcHN0eDM5ZWwtdW5rbm93bgorCQk7OworCXRvYWQxKQorCQliYXNpY19tYWNoaW5lPXBkcDEwLXhrbAorCQlvcz0tdG9wczIwCisJCTs7CisJdG93ZXIgfCB0b3dlci0zMikKKwkJYmFzaWNfbWFjaGluZT1tNjhrLW5jcgorCQk7OworCXRwZikKKwkJYmFzaWNfbWFjaGluZT1zMzkweC1pYm0KKwkJb3M9LXRwZgorCQk7OworCXVkaTI5aykKKwkJYmFzaWNfbWFjaGluZT1hMjlrLWFtZAorCQlvcz0tdWRpCisJCTs7CisJdWx0cmEzKQorCQliYXNpY19tYWNoaW5lPWEyOWstbnl1CisJCW9zPS1zeW0xCisJCTs7CisJdjgxMCB8IG5lY3Y4MTApCisJCWJhc2ljX21hY2hpbmU9djgxMC1uZWMKKwkJb3M9LW5vbmUKKwkJOzsKKwl2YXh2KQorCQliYXNpY19tYWNoaW5lPXZheC1kZWMKKwkJb3M9LXN5c3YKKwkJOzsKKwl2bXMpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQlvcz0tdm1zCisJCTs7CisJdnBwKnx2eHx2eC0qKQorCQliYXNpY19tYWNoaW5lPWYzMDEtZnVqaXRzdQorCQk7OworCXZ4d29ya3M5NjApCisJCWJhc2ljX21hY2hpbmU9aTk2MC13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzNjgpCisJCWJhc2ljX21hY2hpbmU9bTY4ay13cnMKKwkJb3M9LXZ4d29ya3MKKwkJOzsKKwl2eHdvcmtzMjlrKQorCQliYXNpY19tYWNoaW5lPWEyOWstd3JzCisJCW9zPS12eHdvcmtzCisJCTs7CisJdzY1KikKKwkJYmFzaWNfbWFjaGluZT13NjUtd2RjCisJCW9zPS1ub25lCisJCTs7CisJdzg5ay0qKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQlvcz0tcHJvZWxmCisJCTs7CisJeGJveCkKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1taW5ndzMyCisJCTs7CisJeHBzIHwgeHBzMTAwKQorCQliYXNpY19tYWNoaW5lPXhwczEwMC1ob25leXdlbGwKKwkJOzsKKwl5bXApCisJCWJhc2ljX21hY2hpbmU9eW1wLWNyYXkKKwkJb3M9LXVuaWNvcworCQk7OworCXo4ay0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KKwkJb3M9LXNpbQorCQk7OworCW5vbmUpCisJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCisJCW9zPS1ub25lCisJCTs7CisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGRlZmF1bHQgbWFudWZhY3R1cmVyIG9mIGNlcnRhaW4gQ1BVIHR5cGVzLiAgSXQgaXMgaW4KKyMgc29tZSBjYXNlcyB0aGUgb25seSBtYW51ZmFjdHVyZXIsIGluIG90aGVycywgaXQgaXMgdGhlIG1vc3QgcG9wdWxhci4KKwl3ODlrKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtd2luYm9uZAorCQk7OworCW9wNTBuKQorCQliYXNpY19tYWNoaW5lPWhwcGExLjEtb2tpCisJCTs7CisJb3A2MGMpCisJCWJhc2ljX21hY2hpbmU9aHBwYTEuMS1va2kKKwkJOzsKKwlyb21wKQorCQliYXNpY19tYWNoaW5lPXJvbXAtaWJtCisJCTs7CisJbW1peCkKKwkJYmFzaWNfbWFjaGluZT1tbWl4LWtudXRoCisJCTs7CisJcnM2MDAwKQorCQliYXNpY19tYWNoaW5lPXJzNjAwMC1pYm0KKwkJOzsKKwl2YXgpCisJCWJhc2ljX21hY2hpbmU9dmF4LWRlYworCQk7OworCXBkcDEwKQorCQkjIHRoZXJlIGFyZSBtYW55IGNsb25lcywgc28gREVDIGlzIG5vdCBhIHNhZmUgYmV0CisJCWJhc2ljX21hY2hpbmU9cGRwMTAtdW5rbm93bgorCQk7OworCXBkcDExKQorCQliYXNpY19tYWNoaW5lPXBkcDExLWRlYworCQk7OworCXdlMzJrKQorCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAorCQk7OworCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwkJYmFzaWNfbWFjaGluZT1zaC11bmtub3duCisJCTs7CisJc3BhcmMgfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYpCisJCWJhc2ljX21hY2hpbmU9c3BhcmMtc3VuCisJCTs7CisJY3lkcmEpCisJCWJhc2ljX21hY2hpbmU9Y3lkcmEtY3lkcm9tZQorCQk7OworCW9yaW9uKQorCQliYXNpY19tYWNoaW5lPW9yaW9uLWhpZ2hsZXZlbAorCQk7OworCW9yaW9uMTA1KQorCQliYXNpY19tYWNoaW5lPWNsaXBwZXItaGlnaGxldmVsCisJCTs7CisJbWFjIHwgbXB3IHwgbWFjLW1wdykKKwkJYmFzaWNfbWFjaGluZT1tNjhrLWFwcGxlCisJCTs7CisJcG1hYyB8IHBtYWMtbXB3KQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtYXBwbGUKKwkJOzsKKwkqLXVua25vd24pCisJCSMgTWFrZSBzdXJlIHRvIG1hdGNoIGFuIGFscmVhZHktY2Fub25pY2FsaXplZCBtYWNoaW5lIG5hbWUuCisJCTs7CisJKikKKwkJZWNobyBJbnZhbGlkIGNvbmZpZ3VyYXRpb24gXGAkMVwnOiBtYWNoaW5lIFxgJGJhc2ljX21hY2hpbmVcJyBub3QgcmVjb2duaXplZCAxPiYyCisJCWV4aXQgMQorCQk7OworZXNhYworCisjIEhlcmUgd2UgY2Fub25pY2FsaXplIGNlcnRhaW4gYWxpYXNlcyBmb3IgbWFudWZhY3R1cmVycy4KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLWRpZ2l0YWwqKQorCQliYXNpY19tYWNoaW5lPWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL2RpZ2l0YWwuKi9kZWMvJ2AKKwkJOzsKKwkqLWNvbW1vZG9yZSopCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvY29tbW9kb3JlLiovY2JtLydgCisJCTs7CisJKikKKwkJOzsKK2VzYWMKKworIyBEZWNvZGUgbWFudWZhY3R1cmVyLXNwZWNpZmljIGFsaWFzZXMgZm9yIGNlcnRhaW4gb3BlcmF0aW5nIHN5c3RlbXMuCisKK2lmIFsgeCIkb3MiICE9IHgiIiBdCit0aGVuCitjYXNlICRvcyBpbgorICAgICAgICAjIEZpcnN0IG1hdGNoIHNvbWUgc3lzdGVtIHR5cGUgYWxpYXNlcworICAgICAgICAjIHRoYXQgbWlnaHQgZ2V0IGNvbmZ1c2VkIHdpdGggdmFsaWQgc3lzdGVtIHR5cGVzLgorCSMgLXNvbGFyaXMqIGlzIGEgYmFzaWMgc3lzdGVtIHR5cGUsIHdpdGggdGhpcyBvbmUgZXhjZXB0aW9uLgorCS1zb2xhcmlzMSB8IC1zb2xhcmlzMS4qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c29sYXJpczF8c3Vub3M0fCdgCisJCTs7CisJLXNvbGFyaXMpCisJCW9zPS1zb2xhcmlzMgorCQk7OworCS1zdnI0KikKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXVuaXh3YXJlKikKKwkJb3M9LXN5c3Y0LjJ1dworCQk7OworCS1nbnUvbGludXgqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8Z251L2xpbnV4fGxpbnV4LWdudXwnYAorCQk7OworCSMgRmlyc3QgYWNjZXB0IHRoZSBiYXNpYyBzeXN0ZW0gdHlwZXMuCisJIyBUaGUgcG9ydGFibGUgc3lzdGVtcyBjb21lcyBmaXJzdC4KKwkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgorCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KKwktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCisJICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLXNvbGFyaXMqIHwgLXN5bSogXAorCSAgICAgIHwgLWFtaWdhb3MqIHwgLWFtaWdhZG9zKiB8IC1tc2RvcyogfCAtbmV3c29zKiB8IC11bmljb3MqIHwgLWFvZiogXAorCSAgICAgIHwgLWFvcyogXAorCSAgICAgIHwgLW5pbmR5KiB8IC12eHNpbSogfCAtdnh3b3JrcyogfCAtZWJtb24qIHwgLWhtcyogfCAtbXZzKiBcCisJICAgICAgfCAtY2xpeCogfCAtcmlzY29zKiB8IC11bmlwbHVzKiB8IC1pcmlzKiB8IC1ydHUqIHwgLXhlbml4KiBcCisJICAgICAgfCAtaGl1eCogfCAtMzg2YnNkKiB8IC1rbmV0YnNkKiB8IC1taXJic2QqIHwgLW5ldGJzZCogXAorCSAgICAgIHwgLW9wZW5ic2QqIHwgLXNvbGlkYnNkKiBcCisJICAgICAgfCAtZWtrb2JzZCogfCAta2ZyZWVic2QqIHwgLWZyZWVic2QqIHwgLXJpc2NpeCogfCAtbHlueG9zKiBcCisJICAgICAgfCAtYm9zeCogfCAtbmV4dHN0ZXAqIHwgLWN4dXgqIHwgLWFvdXQqIHwgLWVsZiogfCAtb2FiaSogXAorCSAgICAgIHwgLXB0eCogfCAtY29mZiogfCAtZWNvZmYqIHwgLXdpbm50KiB8IC1kb21haW4qIHwgLXZzdGEqIFwKKwkgICAgICB8IC11ZGkqIHwgLWVhYmkqIHwgLWxpdGVzKiB8IC1pZWVlKiB8IC1nbzMyKiB8IC1hdXgqIFwKKwkgICAgICB8IC1jaG9ydXNvcyogfCAtY2hvcnVzcmRiKiBcCisJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAorCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC11eHB2KiB8IC1iZW9zKiB8IC1tcGVpeCogfCAtdWRrKiBcCisJICAgICAgfCAtaW50ZXJpeCogfCAtdXdpbiogfCAtbWtzKiB8IC1yaGFwc29keSogfCAtZGFyd2luKiB8IC1vcGVuZWQqIFwKKwkgICAgICB8IC1vcGVuc3RlcCogfCAtb3NraXQqIHwgLWNvbml4KiB8IC1wdzMyKiB8IC1ub25zdG9wdXgqIFwKKwkgICAgICB8IC1zdG9ybS1jaGFvcyogfCAtdG9wczEwKiB8IC10ZW5leCogfCAtdG9wczIwKiB8IC1pdHMqIFwKKwkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCisJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCisJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKikKKwkjIFJlbWVtYmVyLCBlYWNoIGFsdGVybmF0aXZlIE1VU1QgRU5EIElOICosIHRvIG1hdGNoIGEgdmVyc2lvbiBudW1iZXIuCisJCTs7CisJLXFueCopCisJCWNhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkJICAgIHg4Ni0qIHwgaSo4Ni0qKQorCQkJOzsKKwkJICAgICopCisJCQlvcz0tbnRvJG9zCisJCQk7OworCQllc2FjCisJCTs7CisJLW50by1xbngqKQorCQk7OworCS1udG8qKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8bnRvfG50by1xbnh8J2AKKwkJOzsKKwktc2ltIHwgLWVzMTgwMCogfCAtaG1zKiB8IC14cmF5IHwgLW9zNjhrKiB8IC1ub25lKiB8IC12ODhyKiBcCisJICAgICAgfCAtd2luZG93cyogfCAtb3N4IHwgLWFidWcgfCAtbmV0d2FyZSogfCAtb3M5KiB8IC1iZW9zKiB8IC1oYWlrdSogXAorCSAgICAgIHwgLW1hY29zKiB8IC1tcHcqIHwgLW1hZ2ljKiB8IC1tbWl4d2FyZSogfCAtbW9uOTYwKiB8IC1sbmV3cyopCisJCTs7CisJLW1hYyopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xtYWN8bWFjb3N8J2AKKwkJOzsKKwktbGludXgtZGlldGxpYmMpCisJCW9zPS1saW51eC1kaWV0bGliYworCQk7OworCS1saW51eCopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xsaW51eHxsaW51eC1nbnV8J2AKKwkJOzsKKwktc3Vub3M1KikKKwkJb3M9YGVjaG8gJG9zIHwgc2VkIC1lICdzfHN1bm9zNXxzb2xhcmlzMnwnYAorCQk7OworCS1zdW5vczYqKQorCQlvcz1gZWNobyAkb3MgfCBzZWQgLWUgJ3N8c3Vub3M2fHNvbGFyaXMzfCdgCisJCTs7CisJLW9wZW5lZCopCisJCW9zPS1vcGVuZWRpdGlvbgorCQk7OworICAgICAgICAtb3M0MDAqKQorCQlvcz0tb3M0MDAKKwkJOzsKKwktd2luY2UqKQorCQlvcz0td2luY2UKKwkJOzsKKwktb3Nmcm9zZSopCisJCW9zPS1vc2Zyb3NlCisJCTs7CisJLW9zZiopCisJCW9zPS1vc2YKKwkJOzsKKwktdXRlayopCisJCW9zPS1ic2QKKwkJOzsKKwktZHluaXgqKQorCQlvcz0tYnNkCisJCTs7CisJLWFjaXMqKQorCQlvcz0tYW9zCisJCTs7CisJLWF0aGVvcyopCisJCW9zPS1hdGhlb3MKKwkJOzsKKwktc3lsbGFibGUqKQorCQlvcz0tc3lsbGFibGUKKwkJOzsKKwktMzg2YnNkKQorCQlvcz0tYnNkCisJCTs7CisJLWN0aXgqIHwgLXV0cyopCisJCW9zPS1zeXN2CisJCTs7CisJLW5vdmEqKQorCQlvcz0tcnRtay1ub3ZhCisJCTs7CisJLW5zMiApCisJCW9zPS1uZXh0c3RlcDIKKwkJOzsKKwktbnNrKikKKwkJb3M9LW5zaworCQk7OworCSMgUHJlc2VydmUgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHNpbml4NS4KKwktc2luaXg1LiopCisJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzaW5peHxzeXN2fCdgCisJCTs7CisJLXNpbml4KikKKwkJb3M9LXN5c3Y0CisJCTs7CisgICAgICAgIC10cGYqKQorCQlvcz0tdHBmCisJCTs7CisJLXRyaXRvbiopCisJCW9zPS1zeXN2MworCQk7OworCS1vc3MqKQorCQlvcz0tc3lzdjMKKwkJOzsKKwktc3ZyNCkKKwkJb3M9LXN5c3Y0CisJCTs7CisJLXN2cjMpCisJCW9zPS1zeXN2MworCQk7OworCS1zeXN2cjQpCisJCW9zPS1zeXN2NAorCQk7OworCSMgVGhpcyBtdXN0IGNvbWUgYWZ0ZXIgLXN5c3ZyNC4KKwktc3lzdiopCisJCTs7CisJLW9zZSopCisJCW9zPS1vc2UKKwkJOzsKKwktZXMxODAwKikKKwkJb3M9LW9zZQorCQk7OworCS14ZW5peCkKKwkJb3M9LXhlbml4CisJCTs7CisJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJb3M9LW1pbnQKKwkJOzsKKwktYXJvcyopCisJCW9zPS1hcm9zCisJCTs7CisJLWthb3MqKQorCQlvcz0ta2FvcworCQk7OworCS16dm1vZSkKKwkJb3M9LXp2bW9lCisJCTs7CisJLWRpY29zKikKKwkJb3M9LWRpY29zCisJCTs7CisJLW5vbmUpCisJCTs7CisJKikKKwkJIyBHZXQgcmlkIG9mIHRoZSBgLScgYXQgdGhlIGJlZ2lubmluZyBvZiAkb3MuCisJCW9zPWBlY2hvICRvcyB8IHNlZCAncy9bXi1dKi0vLydgCisJCWVjaG8gSW52YWxpZCBjb25maWd1cmF0aW9uIFxgJDFcJzogc3lzdGVtIFxgJG9zXCcgbm90IHJlY29nbml6ZWQgMT4mMgorCQlleGl0IDEKKwkJOzsKK2VzYWMKK2Vsc2UKKworIyBIZXJlIHdlIGhhbmRsZSB0aGUgZGVmYXVsdCBvcGVyYXRpbmcgc3lzdGVtcyB0aGF0IGNvbWUgd2l0aCB2YXJpb3VzIG1hY2hpbmVzLgorIyBUaGUgdmFsdWUgc2hvdWxkIGJlIHdoYXQgdGhlIHZlbmRvciBjdXJyZW50bHkgc2hpcHMgb3V0IHRoZSBkb29yIHdpdGggdGhlaXIKKyMgbWFjaGluZSBvciBwdXQgYW5vdGhlciB3YXksIHRoZSBtb3N0IHBvcHVsYXIgb3MgcHJvdmlkZWQgd2l0aCB0aGUgbWFjaGluZS4KKworIyBOb3RlIHRoYXQgaWYgeW91J3JlIGdvaW5nIHRvIHRyeSB0byBtYXRjaCAiLU1BTlVGQUNUVVJFUiIgaGVyZSAoc2F5LAorIyAiLXN1biIpLCB0aGVuIHlvdSBoYXZlIHRvIHRlbGwgdGhlIGNhc2Ugc3RhdGVtZW50IHVwIHRvd2FyZHMgdGhlIHRvcAorIyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcgc3lzdGVtLiAgT3RoZXJ3aXNlLCBjb2RlIGFib3ZlCisjIHdpbGwgc2lnbmFsIGFuIGVycm9yIHNheWluZyB0aGF0IE1BTlVGQUNUVVJFUiBpc24ndCBhbiBvcGVyYXRpbmcKKyMgc3lzdGVtLCBhbmQgd2UnbGwgbmV2ZXIgZ2V0IHRvIHRoaXMgcG9pbnQuCisKK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKyAgICAgICAgc2NvcmUtKikKKwkJb3M9LWVsZgorCQk7OworICAgICAgICBzcHUtKikKKwkJb3M9LWVsZgorCQk7OworCSotYWNvcm4pCisJCW9zPS1yaXNjaXgxLjIKKwkJOzsKKwlhcm0qLXJlYmVsKQorCQlvcz0tbGludXgKKwkJOzsKKwlhcm0qLXNlbWkpCisJCW9zPS1hb3V0CisJCTs7CisgICAgICAgIGM0eC0qIHwgdGljNHgtKikKKyAgICAgICAgCW9zPS1jb2ZmCisJCTs7CisJIyBUaGlzIG11c3QgY29tZSBiZWZvcmUgdGhlICotZGVjIGVudHJ5LgorCXBkcDEwLSopCisJCW9zPS10b3BzMjAKKwkJOzsKKwlwZHAxMS0qKQorCQlvcz0tbm9uZQorCQk7OworCSotZGVjIHwgdmF4LSopCisJCW9zPS11bHRyaXg0LjIKKwkJOzsKKwltNjgqLWFwb2xsbykKKwkJb3M9LWRvbWFpbgorCQk7OworCWkzODYtc3VuKQorCQlvcz0tc3Vub3M0LjAuMgorCQk7OworCW02ODAwMC1zdW4pCisJCW9zPS1zdW5vczMKKwkJIyBUaGlzIGFsc28gZXhpc3RzIGluIHRoZSBjb25maWd1cmUgcHJvZ3JhbSwgYnV0IHdhcyBub3QgdGhlCisJCSMgZGVmYXVsdC4KKwkJIyBvcz0tc3Vub3M0CisJCTs7CisJbTY4Ki1jaXNjbykKKwkJb3M9LWFvdXQKKwkJOzsKKyAgICAgICAgbWVwLSopCisJCW9zPS1lbGYKKwkJOzsKKwltaXBzKi1jaXNjbykKKwkJb3M9LWVsZgorCQk7OworCW1pcHMqLSopCisJCW9zPS1lbGYKKwkJOzsKKwlvcjMyLSopCisJCW9zPS1jb2ZmCisJCTs7CisJKi10dGkpCSMgbXVzdCBiZSBiZWZvcmUgc3BhcmMgZW50cnkgb3Igd2UgZ2V0IHRoZSB3cm9uZyBvcy4KKwkJb3M9LXN5c3YzCisJCTs7CisJc3BhcmMtKiB8ICotc3VuKQorCQlvcz0tc3Vub3M0LjEuMQorCQk7OworCSotYmUpCisJCW9zPS1iZW9zCisJCTs7CisJKi1oYWlrdSkKKwkJb3M9LWhhaWt1CisJCTs7CisJKi1pYm0pCisJCW9zPS1haXgKKwkJOzsKKyAgICAJKi1rbnV0aCkKKwkJb3M9LW1taXh3YXJlCisJCTs7CisJKi13ZWMpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLXdpbmJvbmQpCisJCW9zPS1wcm9lbGYKKwkJOzsKKwkqLW9raSkKKwkJb3M9LXByb2VsZgorCQk7OworCSotaHApCisJCW9zPS1ocHV4CisJCTs7CisJKi1oaXRhY2hpKQorCQlvcz0taGl1eAorCQk7OworCWk4NjAtKiB8ICotYXR0IHwgKi1uY3IgfCAqLWFsdG9zIHwgKi1tb3Rvcm9sYSB8ICotY29udmVyZ2VudCkKKwkJb3M9LXN5c3YKKwkJOzsKKwkqLWNibSkKKwkJb3M9LWFtaWdhb3MKKwkJOzsKKwkqLWRnKQorCQlvcz0tZGd1eAorCQk7OworCSotZG9scGhpbikKKwkJb3M9LXN5c3YzCisJCTs7CisJbTY4ay1jY3VyKQorCQlvcz0tcnR1CisJCTs7CisJbTg4ay1vbXJvbiopCisJCW9zPS1sdW5hCisJCTs7CisJKi1uZXh0ICkKKwkJb3M9LW5leHRzdGVwCisJCTs7CisJKi1zZXF1ZW50KQorCQlvcz0tcHR4CisJCTs7CisJKi1jcmRzKQorCQlvcz0tdW5vcworCQk7OworCSotbnMpCisJCW9zPS1nZW5peAorCQk7OworCWkzNzAtKikKKwkJb3M9LW12cworCQk7OworCSotbmV4dCkKKwkJb3M9LW5leHRzdGVwMworCQk7OworCSotZ291bGQpCisJCW9zPS1zeXN2CisJCTs7CisJKi1oaWdobGV2ZWwpCisJCW9zPS1ic2QKKwkJOzsKKwkqLWVuY29yZSkKKwkJb3M9LWJzZAorCQk7OworCSotc2dpKQorCQlvcz0taXJpeAorCQk7OworCSotc2llbWVucykKKwkJb3M9LXN5c3Y0CisJCTs7CisJKi1tYXNzY29tcCkKKwkJb3M9LXJ0dQorCQk7OworCWYzMFswMV0tZnVqaXRzdSB8IGY3MDAtZnVqaXRzdSkKKwkJb3M9LXV4cHYKKwkJOzsKKwkqLXJvbTY4aykKKwkJb3M9LWNvZmYKKwkJOzsKKwkqLSpidWcpCisJCW9zPS1jb2ZmCisJCTs7CisJKi1hcHBsZSkKKwkJb3M9LW1hY29zCisJCTs7CisJKi1hdGFyaSopCisJCW9zPS1taW50CisJCTs7CisJKikKKwkJb3M9LW5vbmUKKwkJOzsKK2VzYWMKK2ZpCisKKyMgSGVyZSB3ZSBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgd2Uga25vdyB0aGUgb3MsIGFuZCB0aGUgQ1BVIHR5cGUsIGJ1dCBub3QgdGhlCisjIG1hbnVmYWN0dXJlci4gIFdlIHBpY2sgdGhlIGxvZ2ljYWwgbWFudWZhY3R1cmVyLgordmVuZG9yPXVua25vd24KK2Nhc2UgJGJhc2ljX21hY2hpbmUgaW4KKwkqLXVua25vd24pCisJCWNhc2UgJG9zIGluCisJCQktcmlzY2l4KikKKwkJCQl2ZW5kb3I9YWNvcm4KKwkJCQk7OworCQkJLXN1bm9zKikKKwkJCQl2ZW5kb3I9c3VuCisJCQkJOzsKKwkJCS1haXgqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLWJlb3MqKQorCQkJCXZlbmRvcj1iZQorCQkJCTs7CisJCQktaHB1eCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1tcGVpeCopCisJCQkJdmVuZG9yPWhwCisJCQkJOzsKKwkJCS1oaXV4KikKKwkJCQl2ZW5kb3I9aGl0YWNoaQorCQkJCTs7CisJCQktdW5vcyopCisJCQkJdmVuZG9yPWNyZHMKKwkJCQk7OworCQkJLWRndXgqKQorCQkJCXZlbmRvcj1kZworCQkJCTs7CisJCQktbHVuYSopCisJCQkJdmVuZG9yPW9tcm9uCisJCQkJOzsKKwkJCS1nZW5peCopCisJCQkJdmVuZG9yPW5zCisJCQkJOzsKKwkJCS1tdnMqIHwgLW9wZW5lZCopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktb3M0MDAqKQorCQkJCXZlbmRvcj1pYm0KKwkJCQk7OworCQkJLXB0eCopCisJCQkJdmVuZG9yPXNlcXVlbnQKKwkJCQk7OworCQkJLXRwZiopCisJCQkJdmVuZG9yPWlibQorCQkJCTs7CisJCQktdnhzaW0qIHwgLXZ4d29ya3MqIHwgLXdpbmRpc3MqKQorCQkJCXZlbmRvcj13cnMKKwkJCQk7OworCQkJLWF1eCopCisJCQkJdmVuZG9yPWFwcGxlCisJCQkJOzsKKwkJCS1obXMqKQorCQkJCXZlbmRvcj1oaXRhY2hpCisJCQkJOzsKKwkJCS1tcHcqIHwgLW1hY29zKikKKwkJCQl2ZW5kb3I9YXBwbGUKKwkJCQk7OworCQkJLSptaW50IHwgLW1pbnRbMC05XSogfCAtKk1pTlQgfCAtTWlOVFswLTldKikKKwkJCQl2ZW5kb3I9YXRhcmkKKwkJCQk7OworCQkJLXZvcyopCisJCQkJdmVuZG9yPXN0cmF0dXMKKwkJCQk7OworCQllc2FjCisJCWJhc2ljX21hY2hpbmU9YGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgInMvdW5rbm93bi8kdmVuZG9yLyJgCisJCTs7Citlc2FjCisKK2VjaG8gJGJhc2ljX21hY2hpbmUkb3MKK2V4aXQKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInRpbWVzdGFtcD0nIgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQiCisjIHRpbWUtc3RhbXAtZW5kOiAiJyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvYXV0b2NvbmYvZGVwY29tcCBiL2x6by0yLjAzL2F1dG9jb25mL2RlcGNvbXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMGYyYmY0MwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2F1dG9jb25mL2RlcGNvbXAKQEAgLTAsMCArMSw1ODcgQEAKKyMhIC9iaW4vc2gKKyMgZGVwY29tcCAtIGNvbXBpbGUgYSBwcm9ncmFtIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzIGFzIHNpZGUtZWZmZWN0cworCitzY3JpcHR2ZXJzaW9uPTIwMDctMDMtMjkuMDEKKworIyBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDAsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworIyBPcmlnaW5hbGx5IHdyaXR0ZW4gYnkgQWxleGFuZHJlIE9saXZhIDxvbGl2YUBkY2MudW5pY2FtcC5icj4uCisKK2Nhc2UgJDEgaW4KKyAgJycpCisgICAgIGVjaG8gIiQwOiBObyBjb21tYW5kLiAgVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKyAgICAgZXhpdCAxOworICAgICA7OworICAtaCB8IC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IGRlcGNvbXAgWy0taGVscF0gWy0tdmVyc2lvbl0gUFJPR1JBTSBbQVJHU10KKworUnVuIFBST0dSQU1TIEFSR1MgdG8gY29tcGlsZSBhIGZpbGUsIGdlbmVyYXRpbmcgZGVwZW5kZW5jaWVzCithcyBzaWRlLWVmZmVjdHMuCisKK0Vudmlyb25tZW50IHZhcmlhYmxlczoKKyAgZGVwbW9kZSAgICAgRGVwZW5kZW5jeSB0cmFja2luZyBtb2RlLgorICBzb3VyY2UgICAgICBTb3VyY2UgZmlsZSByZWFkIGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgb2JqZWN0ICAgICAgT2JqZWN0IGZpbGUgb3V0cHV0IGJ5IGBQUk9HUkFNUyBBUkdTJy4KKyAgREVQRElSICAgICAgZGlyZWN0b3J5IHdoZXJlIHRvIHN0b3JlIGRlcGVuZGVuY2llcy4KKyAgZGVwZmlsZSAgICAgRGVwZW5kZW5jeSBmaWxlIHRvIG91dHB1dC4KKyAgdG1wZGVwZmlsZSAgVGVtcG9yYXJ5IGZpbGUgdG8gdXNlIHdoZW4gb3V0cHV0aW5nIGRlcGVuZGVuY2llcy4KKyAgbGlidG9vbCAgICAgV2hldGhlciBsaWJ0b29sIGlzIHVzZWQgKHllcy9ubykuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gImRlcGNvbXAgJHNjcmlwdHZlcnNpb24iCisgICAgZXhpdCAkPworICAgIDs7Citlc2FjCisKK2lmIHRlc3QgLXogIiRkZXBtb2RlIiB8fCB0ZXN0IC16ICIkc291cmNlIiB8fCB0ZXN0IC16ICIkb2JqZWN0IjsgdGhlbgorICBlY2hvICJkZXBjb21wOiBWYXJpYWJsZXMgc291cmNlLCBvYmplY3QgYW5kIGRlcG1vZGUgbXVzdCBiZSBzZXQiIDE+JjIKKyAgZXhpdCAxCitmaQorCisjIERlcGVuZGVuY2llcyBmb3Igc3ViL2Jhci5vIG9yIHN1Yi9iYXIub2JqIGdvIGludG8gc3ViLy5kZXBzL2Jhci5Qby4KK2RlcGZpbGU9JHtkZXBmaWxlLWBlY2hvICIkb2JqZWN0IiB8CisgIHNlZCAnc3xbXlxcL10qJHwnJHtERVBESVItLmRlcHN9Jy8mfDtzfFwuXChbXi5dKlwpJHwuUFwxfDtzfFBvYmokfFBvfCdgfQordG1wZGVwZmlsZT0ke3RtcGRlcGZpbGUtYGVjaG8gIiRkZXBmaWxlIiB8IHNlZCAncy9cLlwoW14uXSpcKSQvLlRcMS8nYH0KKworcm0gLWYgIiR0bXBkZXBmaWxlIgorCisjIFNvbWUgbW9kZXMgd29yayBqdXN0IGxpa2Ugb3RoZXIgbW9kZXMsIGJ1dCB1c2UgZGlmZmVyZW50IGZsYWdzLiAgV2UKKyMgcGFyYW1ldGVyaXplIGhlcmUsIGJ1dCBzdGlsbCBsaXN0IHRoZSBtb2RlcyBpbiB0aGUgYmlnIGNhc2UgYmVsb3csCisjIHRvIG1ha2UgZGVwZW5kLm00IGVhc2llciB0byB3cml0ZS4gIE5vdGUgdGhhdCB3ZSAqY2Fubm90KiB1c2UgYSBjYXNlCisjIGhlcmUsIGJlY2F1c2UgdGhpcyBmaWxlIGNhbiBvbmx5IGNvbnRhaW4gb25lIGNhc2Ugc3RhdGVtZW50LgoraWYgdGVzdCAiJGRlcG1vZGUiID0gaHA7IHRoZW4KKyAgIyBIUCBjb21waWxlciB1c2VzIC1NIGFuZCBubyBleHRyYSBhcmcuCisgIGdjY2ZsYWc9LU0KKyAgZGVwbW9kZT1nY2MKK2ZpCisKK2lmIHRlc3QgIiRkZXBtb2RlIiA9IGRhc2hYbXN0ZG91dDsgdGhlbgorICAgIyBUaGlzIGlzIGp1c3QgbGlrZSBkYXNobXN0ZG91dCB3aXRoIGEgZGlmZmVyZW50IGFyZ3VtZW50LgorICAgZGFzaG1mbGFnPS14TQorICAgZGVwbW9kZT1kYXNobXN0ZG91dAorZmkKKworY2FzZSAiJGRlcG1vZGUiIGluCitnY2MzKQorIyMgZ2NjIDMgaW1wbGVtZW50cyBkZXBlbmRlbmN5IHRyYWNraW5nIHRoYXQgZG9lcyBleGFjdGx5IHdoYXQKKyMjIHdlIHdhbnQuICBZYXkhICBOb3RlOiBmb3Igc29tZSByZWFzb24gbGlidG9vbCAxLjQgZG9lc24ndCBsaWtlCisjIyBpdCBpZiAtTUQgLU1QIGNvbWVzIGFmdGVyIHRoZSAtTUYgc3R1ZmYuICBIbW0uCisjIyBVbmZvcnR1bmF0ZWx5LCBGcmVlQlNEIGM4OSBhY2NlcHRhbmNlIG9mIGZsYWdzIGRlcGVuZHMgdXBvbgorIyMgdGhlIGNvbW1hbmQgbGluZSBhcmd1bWVudCBvcmRlcjsgc28gYWRkIHRoZSBmbGFncyB3aGVyZSB0aGV5CisjIyBhcHBlYXIgaW4gZGVwZW5kMi5hbS4gIE5vdGUgdGhhdCB0aGUgc2xvd2Rvd24gaW5jdXJyZWQgaGVyZQorIyMgYWZmZWN0cyBvbmx5IGNvbmZpZ3VyZTogaW4gbWFrZWZpbGVzLCAlRkFTVERFUCUgc2hvcnRjdXRzIHRoaXMuCisgIGZvciBhcmcKKyAgZG8KKyAgICBjYXNlICRhcmcgaW4KKyAgICAtYykgc2V0IGZub3JkICIkQCIgLU1UICIkb2JqZWN0IiAtTUQgLU1QIC1NRiAiJHRtcGRlcGZpbGUiICIkYXJnIiA7OworICAgICopICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIgOzsKKyAgICBlc2FjCisgICAgc2hpZnQgIyBmbm9yZAorICAgIHNoaWZ0ICMgJGFyZworICBkb25lCisgICIkQCIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIG12ICIkdG1wZGVwZmlsZSIgIiRkZXBmaWxlIgorICA7OworCitnY2MpCisjIyBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIHRvIGdldCBkZXBlbmRlbmN5IG91dHB1dCBmcm9tIGdjYy4gIEhlcmUncworIyMgd2h5IHdlIHBpY2sgdGhpcyByYXRoZXIgb2JzY3VyZSBtZXRob2Q6CisjIyAtIERvbid0IHdhbnQgdG8gdXNlIC1NRCBiZWNhdXNlIHdlJ2QgbGlrZSB0aGUgZGVwZW5kZW5jaWVzIHRvIGVuZAorIyMgICB1cCBpbiBhIHN1YmRpci4gIEhhdmluZyB0byByZW5hbWUgYnkgaGFuZCBpcyB1Z2x5LgorIyMgICAoV2UgbWlnaHQgZW5kIHVwIGRvaW5nIHRoaXMgYW55d2F5IHRvIHN1cHBvcnQgb3RoZXIgY29tcGlsZXJzLikKKyMjIC0gVGhlIERFUEVOREVOQ0lFU19PVVRQVVQgZW52aXJvbm1lbnQgdmFyaWFibGUgbWFrZXMgZ2NjIGFjdCBsaWtlCisjIyAgIC1NTSwgbm90IC1NIChkZXNwaXRlIHdoYXQgdGhlIGRvY3Mgc2F5KS4KKyMjIC0gVXNpbmcgLU0gZGlyZWN0bHkgbWVhbnMgcnVubmluZyB0aGUgY29tcGlsZXIgdHdpY2UgKGV2ZW4gd29yc2UKKyMjICAgdGhhbiByZW5hbWluZykuCisgIGlmIHRlc3QgLXogIiRnY2NmbGFnIjsgdGhlbgorICAgIGdjY2ZsYWc9LU1ELAorICBmaQorICAiJEAiIC1XcCwiJGdjY2ZsYWckdG1wZGVwZmlsZSIKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgZWNobyAiJG9iamVjdCA6IFxcIiA+ICIkZGVwZmlsZSIKKyAgYWxwaGE9QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5egorIyMgVGhlIHNlY29uZCAtZSBleHByZXNzaW9uIGhhbmRsZXMgRE9TLXN0eWxlIGZpbGUgbmFtZXMgd2l0aCBkcml2ZSBsZXR0ZXJzLgorICBzZWQgLWUgJ3MvXlteOl0qOiAvIC8nIFwKKyAgICAgIC1lICdzL15bJyRhbHBoYSddOlwvW146XSo6IC8gLycgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyMjIFRoaXMgbmV4dCBwaWVjZSBvZiBtYWdpYyBhdm9pZHMgdGhlIGBkZWxldGVkIGhlYWRlciBmaWxlJyBwcm9ibGVtLgorIyMgVGhlIHByb2JsZW0gaXMgdGhhdCB3aGVuIGEgaGVhZGVyIGZpbGUgd2hpY2ggYXBwZWFycyBpbiBhIC5QIGZpbGUKKyMjIGlzIGRlbGV0ZWQsIHRoZSBkZXBlbmRlbmN5IGNhdXNlcyBtYWtlIHRvIGRpZSAoYmVjYXVzZSB0aGVyZSBpcworIyMgdHlwaWNhbGx5IG5vIHdheSB0byByZWJ1aWxkIHRoZSBoZWFkZXIpLiAgV2UgYXZvaWQgdGhpcyBieSBhZGRpbmcKKyMjIGR1bW15IGRlcGVuZGVuY2llcyBmb3IgZWFjaCBoZWFkZXIgZmlsZS4gIFRvbyBiYWQgZ2NjIGRvZXNuJ3QgZG8KKyMjIHRoaXMgZm9yIHVzIGRpcmVjdGx5LgorICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgfAorIyMgU29tZSB2ZXJzaW9ucyBvZiBnY2MgcHV0IGEgc3BhY2UgYmVmb3JlIHRoZSBgOicuICBPbiB0aGUgdGhlb3J5CisjIyB0aGF0IHRoZSBzcGFjZSBtZWFucyBzb21ldGhpbmcsIHdlIGFkZCBhIHNwYWNlIHRvIHRoZSBvdXRwdXQgYXMKKyMjIHdlbGwuCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocCkKKyAgIyBUaGlzIGNhc2UgZXhpc3RzIG9ubHkgdG8gbGV0IGRlcGVuZC5tNCBkbyBpdHMgd29yay4gIEl0IHdvcmtzIGJ5CisgICMgbG9va2luZyBhdCB0aGUgdGV4dCBvZiB0aGlzIHNjcmlwdC4gIFRoaXMgY2FzZSB3aWxsIG5ldmVyIGJlIHJ1biwKKyAgIyBzaW5jZSBpdCBpcyBjaGVja2VkIGZvciBhYm92ZS4KKyAgZXhpdCAxCisgIDs7CisKK3NnaSkKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgIiRAIiAiLVdwLC1NRHVwZGF0ZSwkdG1wZGVwZmlsZSIKKyAgZWxzZQorICAgICIkQCIgLU1EdXBkYXRlICIkdG1wZGVwZmlsZSIKKyAgZmkKKyAgc3RhdD0kPworICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgZWxzZQorICAgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgICBleGl0ICRzdGF0CisgIGZpCisgIHJtIC1mICIkZGVwZmlsZSIKKworICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4gICMgeWVzLCB0aGUgc291cmNlZmlsZSBkZXBlbmQgb24gb3RoZXIgZmlsZXMKKyAgICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorCisgICAgIyBDbGlwIG9mZiB0aGUgaW5pdGlhbCBlbGVtZW50ICh0aGUgZGVwZW5kZW50KS4gIERvbid0IHRyeSB0byBiZQorICAgICMgY2xldmVyIGFuZCByZXBsYWNlIHRoaXMgd2l0aCBzZWQgY29kZSwgYXMgSVJJWCBzZWQgd29uJ3QgaGFuZGxlCisgICAgIyBsaW5lcyB3aXRoIG1vcmUgdGhhbiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzICg0MDk2IGluCisgICAgIyBJUklYIDYuMiBzZWQsIDgxOTIgaW4gSVJJWCA2LjUpLiAgV2UgYWxzbyByZW1vdmUgY29tbWVudCBsaW5lczsKKyAgICAjIHRoZSBJUklYIGNjIGFkZHMgY29tbWVudHMgbGlrZSBgIzpmZWMnIHRvIHRoZSBlbmQgb2YgdGhlCisgICAgIyBkZXBlbmRlbmN5IGxpbmUuCisgICAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIFwKKyAgICB8IHNlZCAtZSAncy9eLipcLm86Ly8nIC1lICdzLyMuKiQvLycgLWUgJy9eJC8gZCcgfCBcCisgICAgdHIgJworJyAnICcgPj4gJGRlcGZpbGUKKyAgICBlY2hvID4+ICRkZXBmaWxlCisKKyAgICAjIFRoZSBzZWNvbmQgcGFzcyBnZW5lcmF0ZXMgYSBkdW1teSBlbnRyeSBmb3IgZWFjaCBoZWFkZXIgZmlsZS4KKyAgICB0ciAnICcgJworJyA8ICIkdG1wZGVwZmlsZSIgXAorICAgfCBzZWQgLWUgJ3MvXi4qXC5vOi8vJyAtZSAncy8jLiokLy8nIC1lICcvXiQvIGQnIC1lICdzLyQvOi8nIFwKKyAgID4+ICRkZXBmaWxlCisgIGVsc2UKKyAgICAjIFRoZSBzb3VyY2VmaWxlIGRvZXMgbm90IGNvbnRhaW4gYW55IGRlcGVuZGVuY2llcywgc28ganVzdAorICAgICMgc3RvcmUgYSBkdW1teSBjb21tZW50IGxpbmUsIHRvIGF2b2lkIGVycm9ycyB3aXRoIHRoZSBNYWtlZmlsZQorICAgICMgImluY2x1ZGUgYmFzZW5hbWUuUGxvIiBzY2hlbWUuCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCithaXgpCisgICMgVGhlIEMgZm9yIEFJWCBDb21waWxlciB1c2VzIC1NIGFuZCBvdXRwdXRzIHRoZSBkZXBlbmRlbmNpZXMKKyAgIyBpbiBhIC51IGZpbGUuICBJbiBvbGRlciB2ZXJzaW9ucywgdGhpcyBmaWxlIGFsd2F5cyBsaXZlcyBpbiB0aGUKKyAgIyBjdXJyZW50IGRpcmVjdG9yeS4gIEFsc28sIHRoZSBBSVggY29tcGlsZXIgcHV0cyBgJG9iamVjdDonIGF0IHRoZQorICAjIHN0YXJ0IG9mIGVhY2ggbGluZTsgJG9iamVjdCBkb2Vzbid0IGhhdmUgZGlyZWN0b3J5IGluZm9ybWF0aW9uLgorICAjIFZlcnNpb24gNiB1c2VzIHRoZSBkaXJlY3RvcnkgaW4gYm90aCBjYXNlcy4KKyAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgdGVzdCAieCRkaXIiID0gIngkb2JqZWN0IiAmJiBkaXI9CisgIGJhc2U9YGVjaG8gIiRvYmplY3QiIHwgc2VkIC1lICdzfF4uKi98fCcgLWUgJ3MvXC5vJC8vJyAtZSAncy9cLmxvJC8vJ2AKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kYmFzZS51CisgICAgdG1wZGVwZmlsZTM9JGRpci5saWJzLyRiYXNlLnUKKyAgICAiJEAiIC1XYywtTQorICBlbHNlCisgICAgdG1wZGVwZmlsZTE9JGRpciRiYXNlLnUKKyAgICB0bXBkZXBmaWxlMj0kZGlyJGJhc2UudQorICAgIHRtcGRlcGZpbGUzPSRkaXIkYmFzZS51CisgICAgIiRAIiAtTQorICBmaQorICBzdGF0PSQ/CisKKyAgaWYgdGVzdCAkc3RhdCAtZXEgMDsgdGhlbiA6CisgIGVsc2UKKyAgICBybSAtZiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgICMgRWFjaCBsaW5lIGlzIG9mIHRoZSBmb3JtIGBmb28ubzogZGVwZW5kZW50LmgnLgorICAgICMgRG8gdHdvIHBhc3Nlcywgb25lIHRvIGp1c3QgY2hhbmdlIHRoZXNlIHRvCisgICAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgIyBUaGF0J3MgYSB0YWIgYW5kIGEgc3BhY2UgaW4gdGhlIFtdLgorICAgIHNlZCAtZSAncyxeLipcLlthLXpdKjpbCSBdKiwsJyAtZSAncywkLDosJyA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgIyBUaGUgc291cmNlZmlsZSBkb2VzIG5vdCBjb250YWluIGFueSBkZXBlbmRlbmNpZXMsIHNvIGp1c3QKKyAgICAjIHN0b3JlIGEgZHVtbXkgY29tbWVudCBsaW5lLCB0byBhdm9pZCBlcnJvcnMgd2l0aCB0aGUgTWFrZWZpbGUKKyAgICAjICJpbmNsdWRlIGJhc2VuYW1lLlBsbyIgc2NoZW1lLgorICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgIGZpCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworaWNjKQorICAjIEludGVsJ3MgQyBjb21waWxlciB1bmRlcnN0YW5kcyBgLU1EIC1NRiBmaWxlJy4gIEhvd2V2ZXIgb24KKyAgIyAgICBpY2MgLU1EIC1NRiBmb28uZCAtYyAtbyBzdWIvZm9vLm8gc3ViL2Zvby5jCisgICMgSUNDIDcuMCB3aWxsIGZpbGwgZm9vLmQgd2l0aCBzb21ldGhpbmcgbGlrZQorICAjICAgIGZvby5vOiBzdWIvZm9vLmMKKyAgIyAgICBmb28ubzogc3ViL2Zvby5oCisgICMgd2hpY2ggaXMgd3JvbmcuICBXZSB3YW50OgorICAjICAgIHN1Yi9mb28ubzogc3ViL2Zvby5jCisgICMgICAgc3ViL2Zvby5vOiBzdWIvZm9vLmgKKyAgIyAgICBzdWIvZm9vLmM6CisgICMgICAgc3ViL2Zvby5oOgorICAjIElDQyA3LjEgd2lsbCBvdXRwdXQKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIHN1Yi9mb28uaAorICAjIGFuZCB3aWxsIHdyYXAgbG9uZyBsaW5lcyB1c2luZyBcIDoKKyAgIyAgICBmb28ubzogc3ViL2Zvby5jIC4uLiBcCisgICMgICAgIHN1Yi9mb28uaCAuLi4gXAorICAjICAgICAuLi4KKworICAiJEAiIC1NRCAtTUYgIiR0bXBkZXBmaWxlIgorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgIGV4aXQgJHN0YXQKKyAgZmkKKyAgcm0gLWYgIiRkZXBmaWxlIgorICAjIEVhY2ggbGluZSBpcyBvZiB0aGUgZm9ybSBgZm9vLm86IGRlcGVuZGVudC5oJywKKyAgIyBvciBgZm9vLm86IGRlcDEuaCBkZXAyLmggXCcsIG9yIGAgZGVwMy5oIGRlcDQuaCBcJy4KKyAgIyBEbyB0d28gcGFzc2VzLCBvbmUgdG8ganVzdCBjaGFuZ2UgdGhlc2UgdG8KKyAgIyBgJG9iamVjdDogZGVwZW5kZW50LmgnIGFuZCBvbmUgdG8gc2ltcGx5IGBkZXBlbmRlbnQuaDonLgorICBzZWQgInMsXlteOl0qOiwkb2JqZWN0IDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyAgIyBjb3JyZWN0bHkuICBCcmVha2luZyBpdCBpbnRvIHR3byBzZWQgaW52b2NhdGlvbnMgaXMgYSB3b3JrYXJvdW5kLgorICBzZWQgJ3MsXlteOl0qOiBcKC4qXCkkLFwxLDtzL15cXCQvLzsvXiQvZDsvOiQvZCcgPCAiJHRtcGRlcGZpbGUiIHwKKyAgICBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICA7OworCitocDIpCisgICMgVGhlICJocCIgc3RhbnphIGFib3ZlIGRvZXMgbm90IHdvcmsgd2l0aCBhQ0MgKEMrKykgYW5kIEhQJ3MgaWE2NAorICAjIGNvbXBpbGVycywgd2hpY2ggaGF2ZSBpbnRlZ3JhdGVkIHByZXByb2Nlc3NvcnMuICBUaGUgY29ycmVjdCBvcHRpb24KKyAgIyB0byB1c2Ugd2l0aCB0aGVzZSBpcyArTWFrZWQ7IGl0IHdyaXRlcyBkZXBlbmRlbmNpZXMgdG8gYSBmaWxlIG5hbWVkCisgICMgJ2Zvby5kJywgd2hpY2ggbGFuZHMgbmV4dCB0byB0aGUgb2JqZWN0IGZpbGUsIHdoZXJldmVyIHRoYXQKKyAgIyBoYXBwZW5zIHRvIGJlLgorICAjIE11Y2ggb2YgdGhpcyBpcyBzaW1pbGFyIHRvIHRoZSB0cnU2NCBjYXNlOyBzZWUgY29tbWVudHMgdGhlcmUuCisgIGRpcj1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8L1teL10qJHwvfCdgCisgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICBiYXNlPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3xeLiovfHwnIC1lICdzL1wubyQvLycgLWUgJ3MvXC5sbyQvLydgCisgIGlmIHRlc3QgIiRsaWJ0b29sIiA9IHllczsgdGhlbgorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpci5saWJzLyRiYXNlLmQKKyAgICAiJEAiIC1XYywrTWFrZWQKKyAgZWxzZQorICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5kCisgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLmQKKyAgICAiJEAiICtNYWtlZAorICBmaQorICBzdGF0PSQ/CisgIGlmIHRlc3QgJHN0YXQgLWVxIDA7IHRoZW4gOgorICBlbHNlCisgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiCisgICAgIGV4aXQgJHN0YXQKKyAgZmkKKworICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIgorICBkbworICAgIHRlc3QgLWYgIiR0bXBkZXBmaWxlIiAmJiBicmVhaworICBkb25lCisgIGlmIHRlc3QgLWYgIiR0bXBkZXBmaWxlIjsgdGhlbgorICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiAiJHRtcGRlcGZpbGUiID4gIiRkZXBmaWxlIgorICAgICMgQWRkIGBkZXBlbmRlbnQuaDonIGxpbmVzLgorICAgIHNlZCAtbmUgJzIsJHs7IHMvXiAqLy87IHMvIFxcKiQvLzsgcy8kLzovOyBwO30nICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBlbHNlCisgICAgZWNobyAiI2R1bW15IiA+ICIkZGVwZmlsZSIKKyAgZmkKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUyIgorICA7OworCit0cnU2NCkKKyAgICMgVGhlIFRydTY0IGNvbXBpbGVyIHVzZXMgLU1EIHRvIGdlbmVyYXRlIGRlcGVuZGVuY2llcyBhcyBhIHNpZGUKKyAgICMgZWZmZWN0LiAgYGNjIC1NRCAtbyBmb28ubyAuLi4nIHB1dHMgdGhlIGRlcGVuZGVuY2llcyBpbnRvIGBmb28uby5kJy4KKyAgICMgQXQgbGVhc3Qgb24gQWxwaGEvUmVkaGF0IDYuMSwgQ29tcGFxIENDQyBWNi4yLTUwNCBzZWVtcyB0byBwdXQKKyAgICMgZGVwZW5kZW5jaWVzIGluIGBmb28uZCcgaW5zdGVhZCwgc28gd2UgY2hlY2sgZm9yIHRoYXQgdG9vLgorICAgIyBTdWJkaXJlY3RvcmllcyBhcmUgcmVzcGVjdGVkLgorICAgZGlyPWBlY2hvICIkb2JqZWN0IiB8IHNlZCAtZSAnc3wvW14vXSokfC98J2AKKyAgIHRlc3QgIngkZGlyIiA9ICJ4JG9iamVjdCIgJiYgZGlyPQorICAgYmFzZT1gZWNobyAiJG9iamVjdCIgfCBzZWQgLWUgJ3N8Xi4qL3x8JyAtZSAncy9cLm8kLy8nIC1lICdzL1wubG8kLy8nYAorCisgICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aCBUcnU2NCBjYywgc2hhcmVkIG9iamVjdHMgY2FuIGFsc28gYmUgdXNlZCB0byBtYWtlIGEKKyAgICAgICMgc3RhdGljIGxpYnJhcnkuICBUaGlzIG1lY2hhbmlzbSBpcyB1c2VkIGluIGxpYnRvb2wgMS40IHNlcmllcyB0bworICAgICAgIyBoYW5kbGUgYm90aCBzaGFyZWQgYW5kIHN0YXRpYyBsaWJyYXJpZXMgaW4gYSBzaW5nbGUgY29tcGlsYXRpb24uCisgICAgICAjIFdpdGggbGlidG9vbCAxLjQsIGRlcGVuZGVuY2llcyB3ZXJlIG91dHB1dCBpbiAkZGlyLmxpYnMvJGJhc2UubG8uZC4KKyAgICAgICMKKyAgICAgICMgV2l0aCBsaWJ0b29sIDEuNSB0aGlzIGV4Y2VwdGlvbiB3YXMgcmVtb3ZlZCwgYW5kIGxpYnRvb2wgbm93CisgICAgICAjIGdlbmVyYXRlcyAyIHNlcGFyYXRlIG9iamVjdHMgZm9yIHRoZSAyIGxpYnJhcmllcy4gIFRoZXNlIHR3bworICAgICAgIyBjb21waWxhdGlvbnMgb3V0cHV0IGRlcGVuZGVuY2llcyBpbiAkZGlyLmxpYnMvJGJhc2Uuby5kIGFuZAorICAgICAgIyBpbiAkZGlyJGJhc2Uuby5kLiAgV2UgaGF2ZSB0byBjaGVjayBmb3IgYm90aCBmaWxlcywgYmVjYXVzZQorICAgICAgIyBvbmUgb2YgdGhlIHR3byBjb21waWxhdGlvbnMgY2FuIGJlIGRpc2FibGVkLiAgV2Ugc2hvdWxkIHByZWZlcgorICAgICAgIyAkZGlyJGJhc2Uuby5kIG92ZXIgJGRpci5saWJzLyRiYXNlLm8uZCBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMKKyAgICAgICMgYXV0b21hdGljYWxseSBjbGVhbmVkIHdoZW4gLmxpYnMvIGlzIGRlbGV0ZWQsIHdoaWxlIGlnbm9yaW5nCisgICAgICAjIHRoZSBmb3JtZXIgd291bGQgY2F1c2UgYSBkaXN0Y2xlYW5jaGVjayBwYW5pYy4KKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIubGlicy8kYmFzZS5sby5kICAgIyBsaWJ0b29sIDEuNAorICAgICAgdG1wZGVwZmlsZTI9JGRpciRiYXNlLm8uZCAgICAgICAgICAjIGxpYnRvb2wgMS41CisgICAgICB0bXBkZXBmaWxlMz0kZGlyLmxpYnMvJGJhc2Uuby5kICAgICMgbGlidG9vbCAxLjUKKyAgICAgIHRtcGRlcGZpbGU0PSRkaXIubGlicy8kYmFzZS5kICAgICAgIyBDb21wYXEgQ0NDIFY2LjItNTA0CisgICAgICAiJEAiIC1XYywtTUQKKyAgIGVsc2UKKyAgICAgIHRtcGRlcGZpbGUxPSRkaXIkYmFzZS5vLmQKKyAgICAgIHRtcGRlcGZpbGUyPSRkaXIkYmFzZS5kCisgICAgICB0bXBkZXBmaWxlMz0kZGlyJGJhc2UuZAorICAgICAgdG1wZGVwZmlsZTQ9JGRpciRiYXNlLmQKKyAgICAgICIkQCIgLU1ECisgICBmaQorCisgICBzdGF0PSQ/CisgICBpZiB0ZXN0ICRzdGF0IC1lcSAwOyB0aGVuIDoKKyAgIGVsc2UKKyAgICAgIHJtIC1mICIkdG1wZGVwZmlsZTEiICIkdG1wZGVwZmlsZTIiICIkdG1wZGVwZmlsZTMiICIkdG1wZGVwZmlsZTQiCisgICAgICBleGl0ICRzdGF0CisgICBmaQorCisgICBmb3IgdG1wZGVwZmlsZSBpbiAiJHRtcGRlcGZpbGUxIiAiJHRtcGRlcGZpbGUyIiAiJHRtcGRlcGZpbGUzIiAiJHRtcGRlcGZpbGU0IgorICAgZG8KKyAgICAgdGVzdCAtZiAiJHRtcGRlcGZpbGUiICYmIGJyZWFrCisgICBkb25lCisgICBpZiB0ZXN0IC1mICIkdG1wZGVwZmlsZSI7IHRoZW4KKyAgICAgIHNlZCAtZSAicyxeLipcLlthLXpdKjosJG9iamVjdDosIiA8ICIkdG1wZGVwZmlsZSIgPiAiJGRlcGZpbGUiCisgICAgICAjIFRoYXQncyBhIHRhYiBhbmQgYSBzcGFjZSBpbiB0aGUgW10uCisgICAgICBzZWQgLWUgJ3MsXi4qXC5bYS16XSo6WwkgXSosLCcgLWUgJ3MsJCw6LCcgPCAiJHRtcGRlcGZpbGUiID4+ICIkZGVwZmlsZSIKKyAgIGVsc2UKKyAgICAgIGVjaG8gIiNkdW1teSIgPiAiJGRlcGZpbGUiCisgICBmaQorICAgcm0gLWYgIiR0bXBkZXBmaWxlIgorICAgOzsKKworI25vc2lkZWVmZmVjdCkKKyAgIyBUaGlzIGNvbW1lbnQgYWJvdmUgaXMgdXNlZCBieSBhdXRvbWFrZSB0byB0ZWxsIHNpZGUtZWZmZWN0CisgICMgZGVwZW5kZW5jeSB0cmFja2luZyBtZWNoYW5pc21zIGZyb20gc2xvd2VyIG9uZXMuCisKK2Rhc2htc3Rkb3V0KQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtby4KKyAgIiRAIiB8fCBleGl0ICQ/CisKKyAgIyBSZW1vdmUgdGhlIGNhbGwgdG8gTGlidG9vbC4KKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKworICAjIFJlbW92ZSBgLW8gJG9iamVjdCcuCisgIElGUz0iICIKKyAgZm9yIGFyZworICBkbworICAgIGNhc2UgJGFyZyBpbgorICAgIC1vKQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgJG9iamVjdCkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICAgIHNoaWZ0ICMgJGFyZworICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICB0ZXN0IC16ICIkZGFzaG1mbGFnIiAmJiBkYXNobWZsYWc9LU0KKyAgIyBSZXF1aXJlIGF0IGxlYXN0IHR3byBjaGFyYWN0ZXJzIGJlZm9yZSBzZWFyY2hpbmcgZm9yIGA6JworICAjIGluIHRoZSB0YXJnZXQgbmFtZS4gIFRoaXMgaXMgdG8gY29wZSB3aXRoIERPUy1zdHlsZSBmaWxlbmFtZXM6CisgICMgYSBkZXBlbmRlbmN5IHN1Y2ggYXMgYGM6L2Zvby9iYXInIGNvdWxkIGJlIHNlZW4gYXMgdGFyZ2V0IGBjJyBvdGhlcndpc2UuCisgICIkQCIgJGRhc2htZmxhZyB8CisgICAgc2VkICdzOl5bICBdKlteOiBdW146XVteOl0qXDpbICAgIF0qOiciJG9iamVjdCInXDogOicgPiAiJHRtcGRlcGZpbGUiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgdHIgJyAnICcKKycgPCAiJHRtcGRlcGZpbGUiIHwgXAorIyMgU29tZSB2ZXJzaW9ucyBvZiB0aGUgSFBVWCAxMC4yMCBzZWQgY2FuJ3QgcHJvY2VzcyB0aGlzIGludm9jYXRpb24KKyMjIGNvcnJlY3RseS4gIEJyZWFraW5nIGl0IGludG8gdHdvIHNlZCBpbnZvY2F0aW9ucyBpcyBhIHdvcmthcm91bmQuCisgICAgc2VkIC1lICdzL15cXCQvLycgLWUgJy9eJC9kJyAtZSAnLzokL2QnIHwgc2VkIC1lICdzLyQvIDovJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworZGFzaFhtc3Rkb3V0KQorICAjIFRoaXMgY2FzZSBvbmx5IGV4aXN0cyB0byBzYXRpc2Z5IGRlcGVuZC5tNC4gIEl0IGlzIG5ldmVyIGFjdHVhbGx5CisgICMgcnVuLCBhcyB0aGlzIG1vZGUgaXMgc3BlY2lhbGx5IHJlY29nbml6ZWQgaW4gdGhlIHByZWFtYmxlLgorICBleGl0IDEKKyAgOzsKKworbWFrZWRlcGVuZCkKKyAgIiRAIiB8fCBleGl0ICQ/CisgICMgUmVtb3ZlIGFueSBMaWJ0b29sIGNhbGwKKyAgaWYgdGVzdCAiJGxpYnRvb2wiID0geWVzOyB0aGVuCisgICAgd2hpbGUgdGVzdCAkMSAhPSAnLS1tb2RlPWNvbXBpbGUnOyBkbworICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgc2hpZnQKKyAgZmkKKyAgIyBYIG1ha2VkZXBlbmQKKyAgc2hpZnQKKyAgY2xlYXJlZD1ubworICBmb3IgYXJnIGluICIkQCI7IGRvCisgICAgY2FzZSAkY2xlYXJlZCBpbgorICAgIG5vKQorICAgICAgc2V0ICIiOyBzaGlmdAorICAgICAgY2xlYXJlZD15ZXMgOzsKKyAgICBlc2FjCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAtRCp8LUkqKQorICAgICAgc2V0IGZub3JkICIkQCIgIiRhcmciOyBzaGlmdCA7OworICAgICMgU3RyaXAgYW55IG9wdGlvbiB0aGF0IG1ha2VkZXBlbmQgbWF5IG5vdCB1bmRlcnN0YW5kLiAgUmVtb3ZlCisgICAgIyB0aGUgb2JqZWN0IHRvbywgb3RoZXJ3aXNlIG1ha2VkZXBlbmQgd2lsbCBwYXJzZSBpdCBhcyBhIHNvdXJjZSBmaWxlLgorICAgIC0qfCRvYmplY3QpCisgICAgICA7OworICAgICopCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGFyZyI7IHNoaWZ0IDs7CisgICAgZXNhYworICBkb25lCisgIG9ial9zdWZmaXg9ImBlY2hvICRvYmplY3QgfCBzZWQgJ3MvXi4qXC4vLi8nYCIKKyAgdG91Y2ggIiR0bXBkZXBmaWxlIgorICAke01BS0VERVBFTkQtbWFrZWRlcGVuZH0gLW8iJG9ial9zdWZmaXgiIC1mIiR0bXBkZXBmaWxlIiAiJEAiCisgIHJtIC1mICIkZGVwZmlsZSIKKyAgY2F0IDwgIiR0bXBkZXBmaWxlIiA+ICIkZGVwZmlsZSIKKyAgc2VkICcxLDJkJyAiJHRtcGRlcGZpbGUiIHwgdHIgJyAnICcKKycgfCBcCisjIyBTb21lIHZlcnNpb25zIG9mIHRoZSBIUFVYIDEwLjIwIHNlZCBjYW4ndCBwcm9jZXNzIHRoaXMgaW52b2NhdGlvbgorIyMgY29ycmVjdGx5LiAgQnJlYWtpbmcgaXQgaW50byB0d28gc2VkIGludm9jYXRpb25zIGlzIGEgd29ya2Fyb3VuZC4KKyAgICBzZWQgLWUgJ3MvXlxcJC8vJyAtZSAnL14kL2QnIC1lICcvOiQvZCcgfCBzZWQgLWUgJ3MvJC8gOi8nID4+ICIkZGVwZmlsZSIKKyAgcm0gLWYgIiR0bXBkZXBmaWxlIiAiJHRtcGRlcGZpbGUiLmJhaworICA7OworCitjcHApCisgICMgSW1wb3J0YW50IG5vdGU6IGluIG9yZGVyIHRvIHN1cHBvcnQgdGhpcyBtb2RlLCBhIGNvbXBpbGVyICptdXN0KgorICAjIGFsd2F5cyB3cml0ZSB0aGUgcHJlcHJvY2Vzc2VkIGZpbGUgdG8gc3Rkb3V0LgorICAiJEAiIHx8IGV4aXQgJD8KKworICAjIFJlbW92ZSB0aGUgY2FsbCB0byBMaWJ0b29sLgorICBpZiB0ZXN0ICIkbGlidG9vbCIgPSB5ZXM7IHRoZW4KKyAgICB3aGlsZSB0ZXN0ICQxICE9ICctLW1vZGU9Y29tcGlsZSc7IGRvCisgICAgICBzaGlmdAorICAgIGRvbmUKKyAgICBzaGlmdAorICBmaQorCisgICMgUmVtb3ZlIGAtbyAkb2JqZWN0Jy4KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAkYXJnIGluCisgICAgLW8pCisgICAgICBzaGlmdAorICAgICAgOzsKKyAgICAkb2JqZWN0KQorICAgICAgc2hpZnQKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHNldCBmbm9yZCAiJEAiICIkYXJnIgorICAgICAgc2hpZnQgIyBmbm9yZAorICAgICAgc2hpZnQgIyAkYXJnCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgICIkQCIgLUUgfAorICAgIHNlZCAtbiAtZSAnL14jIFswLTldWzAtOV0qICJcKFteIl0qXCkiLiovIHM6OiBcMSBcXDpwJyBcCisgICAgICAgLWUgJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIuKi8gczo6IFwxIFxcOnAnIHwKKyAgICBzZWQgJyQgczogXFwkOjonID4gIiR0bXBkZXBmaWxlIgorICBybSAtZiAiJGRlcGZpbGUiCisgIGVjaG8gIiRvYmplY3QgOiBcXCIgPiAiJGRlcGZpbGUiCisgIGNhdCA8ICIkdG1wZGVwZmlsZSIgPj4gIiRkZXBmaWxlIgorICBzZWQgPCAiJHRtcGRlcGZpbGUiICcvXiQvZDtzL14gLy87cy8gXFwkLy87cy8kLyA6LycgPj4gIiRkZXBmaWxlIgorICBybSAtZiAiJHRtcGRlcGZpbGUiCisgIDs7CisKK21zdmlzdWFsY3BwKQorICAjIEltcG9ydGFudCBub3RlOiBpbiBvcmRlciB0byBzdXBwb3J0IHRoaXMgbW9kZSwgYSBjb21waWxlciAqbXVzdCoKKyAgIyBhbHdheXMgd3JpdGUgdGhlIHByZXByb2Nlc3NlZCBmaWxlIHRvIHN0ZG91dCwgcmVnYXJkbGVzcyBvZiAtbywKKyAgIyBiZWNhdXNlIHdlIG11c3QgdXNlIC1vIHdoZW4gcnVubmluZyBsaWJ0b29sLgorICAiJEAiIHx8IGV4aXQgJD8KKyAgSUZTPSIgIgorICBmb3IgYXJnCisgIGRvCisgICAgY2FzZSAiJGFyZyIgaW4KKyAgICAiLUdtInwiL0dtInwiLUdpInwiL0dpInwiLVpJInwiL1pJIikKKwlzZXQgZm5vcmQgIiRAIgorCXNoaWZ0CisJc2hpZnQKKwk7OworICAgICopCisJc2V0IGZub3JkICIkQCIgIiRhcmciCisJc2hpZnQKKwlzaGlmdAorCTs7CisgICAgZXNhYworICBkb25lCisgICIkQCIgLUUgfAorICBzZWQgLW4gJy9eI2xpbmUgWzAtOV1bMC05XSogIlwoW14iXSpcKSIvIHM6OmVjaG8gImBjeWdwYXRoIC11IFxcIlwxXFwiYCI6cCcgfCBzb3J0IHwgdW5pcSA+ICIkdG1wZGVwZmlsZSIKKyAgcm0gLWYgIiRkZXBmaWxlIgorICBlY2hvICIkb2JqZWN0IDogXFwiID4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6CVwxIFxcOnAnID4+ICIkZGVwZmlsZSIKKyAgZWNobyAiCSIgPj4gIiRkZXBmaWxlIgorICAuICIkdG1wZGVwZmlsZSIgfCBzZWQgJ3MlICVcXCAlZycgfCBzZWQgLW4gJy9eXCguKlwpJC8gczo6XDFcOjpwJyA+PiAiJGRlcGZpbGUiCisgIHJtIC1mICIkdG1wZGVwZmlsZSIKKyAgOzsKKworbm9uZSkKKyAgZXhlYyAiJEAiCisgIDs7CisKKyopCisgIGVjaG8gIlVua25vd24gZGVwbW9kZSAkZGVwbW9kZSIgMT4mMgorICBleGl0IDEKKyAgOzsKK2VzYWMKKworZXhpdCAwCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL2luc3RhbGwtc2ggYi9sem8tMi4wMy9hdXRvY29uZi9pbnN0YWxsLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmE1ODk3ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hdXRvY29uZi9pbnN0YWxsLXNoCkBAIC0wLDAgKzEsNTE5IEBACisjIS9iaW4vc2gKKyMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCisKK3NjcmlwdHZlcnNpb249MjAwNi0xMi0yNS4wMAorCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCisjCisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KKyMKKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KKyMKKyMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKKyMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKKyMgd2hlbiB0aGVyZSBpcyBubyBNYWtlZmlsZS4KKyMKKyMgVGhpcyBzY3JpcHQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSBCU0QgaW5zdGFsbCBzY3JpcHQsIGJ1dCB3YXMgd3JpdHRlbgorIyBmcm9tIHNjcmF0Y2guCisKK25sPScKKycKK0lGUz0iICIiCSRubCIKKworIyBzZXQgRE9JVFBST0cgdG8gZWNobyB0byB0ZXN0IHRoaXMgc2NyaXB0CisKKyMgRG9uJ3QgdXNlIDotIHNpbmNlIDQuM0JTRCBhbmQgZWFybGllciBzaGVsbHMgZG9uJ3QgbGlrZSBpdC4KK2RvaXQ9JHtET0lUUFJPRy19CitpZiB0ZXN0IC16ICIkZG9pdCI7IHRoZW4KKyAgZG9pdF9leGVjPWV4ZWMKK2Vsc2UKKyAgZG9pdF9leGVjPSRkb2l0CitmaQorCisjIFB1dCBpbiBhYnNvbHV0ZSBmaWxlIG5hbWVzIGlmIHlvdSBkb24ndCBoYXZlIHRoZW0gaW4geW91ciBwYXRoOworIyBvciB1c2UgZW52aXJvbm1lbnQgdmFycy4KKworY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQorY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQorY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQorY21wcHJvZz0ke0NNUFBST0ctY21wfQorY3Bwcm9nPSR7Q1BQUk9HLWNwfQorbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQorbXZwcm9nPSR7TVZQUk9HLW12fQorcm1wcm9nPSR7Uk1QUk9HLXJtfQorc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQorCitwb3NpeF9nbG9iPSc/JworaW5pdGlhbGl6ZV9wb3NpeF9nbG9iPScKKyAgdGVzdCAiJHBvc2l4X2dsb2IiICE9ICI/IiB8fCB7CisgICAgaWYgKHNldCAtZikgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHBvc2l4X2dsb2I9CisgICAgZWxzZQorICAgICAgcG9zaXhfZ2xvYj06CisgICAgZmkKKyAgfQorJworCitwb3NpeF9ta2Rpcj0KKworIyBEZXNpcmVkIG1vZGUgb2YgaW5zdGFsbGVkIGZpbGUuCittb2RlPTA3NTUKKworY2hncnBjbWQ9CitjaG1vZGNtZD0kY2htb2Rwcm9nCitjaG93bmNtZD0KK212Y21kPSRtdnByb2cKK3JtY21kPSIkcm1wcm9nIC1mIgorc3RyaXBjbWQ9CisKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQorCitjb3B5X29uX2NoYW5nZT1mYWxzZQorbm9fdGFyZ2V0X2RpcmVjdG9yeT0KKwordXNhZ2U9IlwKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbLVRdIFNSQ0ZJTEUgRFNURklMRQorICAgb3I6ICQwIFtPUFRJT05dLi4uIFNSQ0ZJTEVTLi4uIERJUkVDVE9SWQorICAgb3I6ICQwIFtPUFRJT05dLi4uIC10IERJUkVDVE9SWSBTUkNGSUxFUy4uLgorICAgb3I6ICQwIFtPUFRJT05dLi4uIC1kIERJUkVDVE9SSUVTLi4uCisKK0luIHRoZSAxc3QgZm9ybSwgY29weSBTUkNGSUxFIHRvIERTVEZJTEUuCitJbiB0aGUgMm5kIGFuZCAzcmQsIGNvcHkgYWxsIFNSQ0ZJTEVTIHRvIERJUkVDVE9SWS4KK0luIHRoZSA0dGgsIGNyZWF0ZSBESVJFQ1RPUklFUy4KKworT3B0aW9uczoKKyAgICAgLS1oZWxwICAgICBkaXNwbGF5IHRoaXMgaGVscCBhbmQgZXhpdC4KKyAgICAgLS12ZXJzaW9uICBkaXNwbGF5IHZlcnNpb24gaW5mbyBhbmQgZXhpdC4KKworICAtYyAgICAgICAgICAgIChpZ25vcmVkKQorICAtQyAgICAgICAgICAgIGluc3RhbGwgb25seSBpZiBkaWZmZXJlbnQgKHByZXNlcnZlIHRoZSBsYXN0IGRhdGEgbW9kaWZpY2F0aW9uIHRpbWUpCisgIC1kICAgICAgICAgICAgY3JlYXRlIGRpcmVjdG9yaWVzIGluc3RlYWQgb2YgaW5zdGFsbGluZyBmaWxlcy4KKyAgLWcgR1JPVVAgICAgICAkY2hncnBwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBHUk9VUC4KKyAgLW0gTU9ERSAgICAgICAkY2htb2Rwcm9nIGluc3RhbGxlZCBmaWxlcyB0byBNT0RFLgorICAtbyBVU0VSICAgICAgICRjaG93bnByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIFVTRVIuCisgIC1zICAgICAgICAgICAgJHN0cmlwcHJvZyBpbnN0YWxsZWQgZmlsZXMuCisgIC10IERJUkVDVE9SWSAgaW5zdGFsbCBpbnRvIERJUkVDVE9SWS4KKyAgLVQgICAgICAgICAgICByZXBvcnQgYW4gZXJyb3IgaWYgRFNURklMRSBpcyBhIGRpcmVjdG9yeS4KKworRW52aXJvbm1lbnQgdmFyaWFibGVzIG92ZXJyaWRlIHRoZSBkZWZhdWx0IGNvbW1hbmRzOgorICBDSEdSUFBST0cgQ0hNT0RQUk9HIENIT1dOUFJPRyBDTVBQUk9HIENQUFJPRyBNS0RJUlBST0cgTVZQUk9HCisgIFJNUFJPRyBTVFJJUFBST0cKKyIKKword2hpbGUgdGVzdCAkIyAtbmUgMDsgZG8KKyAgY2FzZSAkMSBpbgorICAgIC1jKSA7OworCisgICAgLUMpIGNvcHlfb25fY2hhbmdlPXRydWU7OworCisgICAgLWQpIGRpcl9hcmc9dHJ1ZTs7CisKKyAgICAtZykgY2hncnBjbWQ9IiRjaGdycHByb2cgJDIiCisJc2hpZnQ7OworCisgICAgLS1oZWxwKSBlY2hvICIkdXNhZ2UiOyBleGl0ICQ/OzsKKworICAgIC1tKSBtb2RlPSQyCisJY2FzZSAkbW9kZSBpbgorCSAgKicgJyogfCAqJwknKiB8IConCisnKgkgIHwgKicqJyogfCAqJz8nKiB8IConWycqKQorCSAgICBlY2hvICIkMDogaW52YWxpZCBtb2RlOiAkbW9kZSIgPiYyCisJICAgIGV4aXQgMTs7CisJZXNhYworCXNoaWZ0OzsKKworICAgIC1vKSBjaG93bmNtZD0iJGNob3ducHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtcykgc3RyaXBjbWQ9JHN0cmlwcHJvZzs7CisKKyAgICAtdCkgZHN0X2FyZz0kMgorCXNoaWZ0OzsKKworICAgIC1UKSBub190YXJnZXRfZGlyZWN0b3J5PXRydWU7OworCisgICAgLS12ZXJzaW9uKSBlY2hvICIkMCAkc2NyaXB0dmVyc2lvbiI7IGV4aXQgJD87OworCisgICAgLS0pCXNoaWZ0CisJYnJlYWs7OworCisgICAgLSopCWVjaG8gIiQwOiBpbnZhbGlkIG9wdGlvbjogJDEiID4mMgorCWV4aXQgMTs7CisKKyAgICAqKSAgYnJlYWs7OworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2lmIHRlc3QgJCMgLW5lIDAgJiYgdGVzdCAteiAiJGRpcl9hcmckZHN0X2FyZyI7IHRoZW4KKyAgIyBXaGVuIC1kIGlzIHVzZWQsIGFsbCByZW1haW5pbmcgYXJndW1lbnRzIGFyZSBkaXJlY3RvcmllcyB0byBjcmVhdGUuCisgICMgV2hlbiAtdCBpcyB1c2VkLCB0aGUgZGVzdGluYXRpb24gaXMgYWxyZWFkeSBzcGVjaWZpZWQuCisgICMgT3RoZXJ3aXNlLCB0aGUgbGFzdCBhcmd1bWVudCBpcyB0aGUgZGVzdGluYXRpb24uICBSZW1vdmUgaXQgZnJvbSAkQC4KKyAgZm9yIGFyZworICBkbworICAgIGlmIHRlc3QgLW4gIiRkc3RfYXJnIjsgdGhlbgorICAgICAgIyAkQCBpcyBub3QgZW1wdHk6IGl0IGNvbnRhaW5zIGF0IGxlYXN0ICRhcmcuCisgICAgICBzZXQgZm5vcmQgIiRAIiAiJGRzdF9hcmciCisgICAgICBzaGlmdCAjIGZub3JkCisgICAgZmkKKyAgICBzaGlmdCAjIGFyZworICAgIGRzdF9hcmc9JGFyZworICBkb25lCitmaQorCitpZiB0ZXN0ICQjIC1lcSAwOyB0aGVuCisgIGlmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICAgIGVjaG8gIiQwOiBubyBpbnB1dCBmaWxlIHNwZWNpZmllZC4iID4mMgorICAgIGV4aXQgMQorICBmaQorICAjIEl0J3MgT0sgdG8gY2FsbCBgaW5zdGFsbC1zaCAtZCcgd2l0aG91dCBhcmd1bWVudC4KKyAgIyBUaGlzIGNhbiBoYXBwZW4gd2hlbiBjcmVhdGluZyBjb25kaXRpb25hbCBkaXJlY3Rvcmllcy4KKyAgZXhpdCAwCitmaQorCitpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgdHJhcCAnKGV4aXQgJD8pOyBleGl0JyAxIDIgMTMgMTUKKworICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgorICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCisgIGNhc2UgJG1vZGUgaW4KKyAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OworICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKKworICAgICpbMC03XSkKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSclIDIwMCcKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz1gZXhwciAnKCcgNzc3IC0gJG1vZGUgJSAxMDAwICcpJyAkdV9wbHVzX3J3YDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgLXogIiRzdHJpcGNtZCI7IHRoZW4KKwl1X3BsdXNfcnc9CisgICAgICBlbHNlCisJdV9wbHVzX3J3PSx1K3J3CisgICAgICBmaQorICAgICAgY3BfdW1hc2s9JG1vZGUkdV9wbHVzX3J3OzsKKyAgZXNhYworZmkKKworZm9yIHNyYworZG8KKyAgIyBQcm90ZWN0IG5hbWVzIHN0YXJ0aW5nIHdpdGggYC0nLgorICBjYXNlICRzcmMgaW4KKyAgICAtKikgc3JjPS4vJHNyYzs7CisgIGVzYWMKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICBkc3Q9JHNyYworICAgIGRzdGRpcj0kZHN0CisgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICBkc3RkaXJfc3RhdHVzPSQ/CisgIGVsc2UKKworICAgICMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kCisgICAgIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZAorICAgICMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorICAgIGlmIHRlc3QgISAtZiAiJHNyYyIgJiYgdGVzdCAhIC1kICIkc3JjIjsgdGhlbgorICAgICAgZWNobyAiJDA6ICRzcmMgZG9lcyBub3QgZXhpc3QuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZHN0X2FyZyI7IHRoZW4KKyAgICAgIGVjaG8gIiQwOiBubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQuIiA+JjIKKyAgICAgIGV4aXQgMQorICAgIGZpCisKKyAgICBkc3Q9JGRzdF9hcmcKKyAgICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgICAgY2FzZSAkZHN0IGluCisgICAgICAtKikgZHN0PS4vJGRzdDs7CisgICAgZXNhYworCisgICAgIyBJZiBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeSwgYXBwZW5kIHRoZSBpbnB1dCBmaWxlbmFtZTsgd29uJ3Qgd29yaworICAgICMgaWYgZG91YmxlIHNsYXNoZXMgYXJlbid0IGlnbm9yZWQuCisgICAgaWYgdGVzdCAtZCAiJGRzdCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRub190YXJnZXRfZGlyZWN0b3J5IjsgdGhlbgorCWVjaG8gIiQwOiAkZHN0X2FyZzogSXMgYSBkaXJlY3RvcnkiID4mMgorCWV4aXQgMQorICAgICAgZmkKKyAgICAgIGRzdGRpcj0kZHN0CisgICAgICBkc3Q9JGRzdGRpci9gYmFzZW5hbWUgIiRzcmMiYAorICAgICAgZHN0ZGlyX3N0YXR1cz0wCisgICAgZWxzZQorICAgICAgIyBQcmVmZXIgZGlybmFtZSwgYnV0IGZhbGwgYmFjayBvbiBhIHN1YnN0aXR1dGUgaWYgZGlybmFtZSBmYWlscy4KKyAgICAgIGRzdGRpcj1gCisJKGRpcm5hbWUgIiRkc3QiKSAyPi9kZXYvbnVsbCB8fAorCWV4cHIgWCIkZHN0IiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvL1wpJCcgXHwgXAorCSAgICAgWCIkZHN0IiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKwllY2hvIFgiJGRzdCIgfAorCSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXClbXi9dLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wvXCkkL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIC9eWFwoXC9cKS4qL3sKKwkJICAgcy8vXDEvCisJCSAgIHEKKwkJIH0KKwkJIHMvLiovLi87IHEnCisgICAgICBgCisKKyAgICAgIHRlc3QgLWQgIiRkc3RkaXIiCisgICAgICBkc3RkaXJfc3RhdHVzPSQ/CisgICAgZmkKKyAgZmkKKworICBvYnNvbGV0ZV9ta2Rpcl91c2VkPWZhbHNlCisKKyAgaWYgdGVzdCAkZHN0ZGlyX3N0YXR1cyAhPSAwOyB0aGVuCisgICAgY2FzZSAkcG9zaXhfbWtkaXIgaW4KKyAgICAgICcnKQorCSMgQ3JlYXRlIGludGVybWVkaWF0ZSBkaXJzIHVzaW5nIG1vZGUgNzU1IGFzIG1vZGlmaWVkIGJ5IHRoZSB1bWFzay4KKwkjIFRoaXMgaXMgbGlrZSBGcmVlQlNEICdpbnN0YWxsJyBhcyBvZiAxOTk3LTEwLTI4LgorCXVtYXNrPWB1bWFza2AKKwljYXNlICRzdHJpcGNtZC4kdW1hc2sgaW4KKwkgICMgT3B0aW1pemUgY29tbW9uIGNhc2VzLgorCSAgKlsyMzY3XVsyMzY3XSkgbWtkaXJfdW1hc2s9JHVtYXNrOzsKKwkgIC4qMFswMl1bMDJdIHwgLlswMl1bMDJdIHwgLlswMl0pIG1rZGlyX3VtYXNrPTIyOzsKKworCSAgKlswLTddKQorCSAgICBta2Rpcl91bWFzaz1gZXhwciAkdW1hc2sgKyAyMiBcCisJICAgICAgLSAkdW1hc2sgJSAxMDAgJSA0MCArICR1bWFzayAlIDIwIFwKKwkgICAgICAtICR1bWFzayAlIDEwICUgNCArICR1bWFzayAlIDIKKwkgICAgYDs7CisJICAqKSBta2Rpcl91bWFzaz0kdW1hc2ssZ28tdzs7CisJZXNhYworCisJIyBXaXRoIC1kLCBjcmVhdGUgdGhlIG5ldyBkaXJlY3Rvcnkgd2l0aCB0aGUgdXNlci1zcGVjaWZpZWQgbW9kZS4KKwkjIE90aGVyd2lzZSwgcmVseSBvbiAkbWtkaXJfdW1hc2suCisJaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisJICBta2Rpcl9tb2RlPS1tJG1vZGUKKwllbHNlCisJICBta2Rpcl9tb2RlPQorCWZpCisKKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCisKKwkgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorCQlleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvZCIpID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCisJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKKwkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKwkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKwkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJLSopIHByZWZpeD0nLi8nOzsKKwkqKSAgcHJlZml4PScnOzsKKyAgICAgIGVzYWMKKworICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIKKworICAgICAgb0lGUz0kSUZTCisgICAgICBJRlM9LworICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mCisgICAgICBzZXQgZm5vcmQgJGRzdGRpcgorICAgICAgc2hpZnQKKyAgICAgICRwb3NpeF9nbG9iIHNldCArZgorICAgICAgSUZTPSRvSUZTCisKKyAgICAgIHByZWZpeGVzPQorCisgICAgICBmb3IgZAorICAgICAgZG8KKwl0ZXN0IC16ICIkZCIgJiYgY29udGludWUKKworCXByZWZpeD0kcHJlZml4JGQKKwlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorCSAgcHJlZml4ZXM9CisJZWxzZQorCSAgaWYgJHBvc2l4X21rZGlyOyB0aGVuCisJICAgICh1bWFzaz0kbWtkaXJfdW1hc2sgJiYKKwkgICAgICRkb2l0X2V4ZWMgJG1rZGlycHJvZyAkbWtkaXJfbW9kZSAtcCAtLSAiJGRzdGRpciIpICYmIGJyZWFrCisJICAgICMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkgICAgdGVzdCAtZCAiJHByZWZpeCIgfHwgZXhpdCAxCisJICBlbHNlCisJICAgIGNhc2UgJHByZWZpeCBpbgorCSAgICAgICpcJyopIHFwcmVmaXg9YGVjaG8gIiRwcmVmaXgiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKKwkgICAgICAqKSBxcHJlZml4PSRwcmVmaXg7OworCSAgICBlc2FjCisJICAgIHByZWZpeGVzPSIkcHJlZml4ZXMgJyRxcHJlZml4JyIKKwkgIGZpCisJZmkKKwlwcmVmaXg9JHByZWZpeC8KKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHByZWZpeGVzIjsgdGhlbgorCSMgRG9uJ3QgZmFpbCBpZiB0d28gaW5zdGFuY2VzIGFyZSBydW5uaW5nIGNvbmN1cnJlbnRseS4KKwkodW1hc2sgJG1rZGlyX3VtYXNrICYmCisJIGV2YWwgIlwkZG9pdF9leGVjIFwkbWtkaXJwcm9nICRwcmVmaXhlcyIpIHx8CisJICB0ZXN0IC1kICIkZHN0ZGlyIiB8fCBleGl0IDEKKwlvYnNvbGV0ZV9ta2Rpcl91c2VkPXRydWUKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKKworICBpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3QiOyB9ICYmCisgICAgeyB0ZXN0ICIkb2Jzb2xldGVfbWtkaXJfdXNlZCRjaG93bmNtZCRjaGdycGNtZCIgPSBmYWxzZSB8fAorICAgICAgdGVzdCAteiAiJGNobW9kY21kIiB8fCAkZG9pdCAkY2htb2RjbWQgJG1vZGUgIiRkc3QiOyB9IHx8IGV4aXQgMQorICBlbHNlCisKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXworCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKKworICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKKworICAgICMgYW5kIHNldCBhbnkgb3B0aW9uczsgZG8gY2htb2QgbGFzdCB0byBwcmVzZXJ2ZSBzZXR1aWQgYml0cy4KKyAgICAjCisgICAgIyBJZiBhbnkgb2YgdGhlc2UgZmFpbCwgd2UgYWJvcnQgdGhlIHdob2xlIHRoaW5nLiAgSWYgd2Ugd2FudCB0bworICAgICMgaWdub3JlIGVycm9ycyBmcm9tIGFueSBvZiB0aGVzZSwganVzdCBtYWtlIHN1cmUgbm90IHRvIGlnbm9yZQorICAgICMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkY3Bwcm9nICRzcmMgJGRzdHRtcCIgY29tbWFuZC4KKyAgICAjCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJHN0cmlwY21kIiB8fCAkZG9pdCAkc3RyaXBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkY2htb2RjbWQiIHx8ICRkb2l0ICRjaG1vZGNtZCAkbW9kZSAiJGRzdHRtcCI7IH0gJiYKKworICAgICMgSWYgLUMsIGRvbid0IGJvdGhlciB0byBjb3B5IGlmIGl0IHdvdWxkbid0IGNoYW5nZSB0aGUgZmlsZS4KKyAgICBpZiAkY29weV9vbl9jaGFuZ2UgJiYKKyAgICAgICBvbGQ9YExDX0FMTD1DIGxzIC1kbEwgIiRkc3QiCTI+L2Rldi9udWxsYCAmJgorICAgICAgIG5ldz1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdHRtcCIJMj4vZGV2L251bGxgICYmCisKKyAgICAgICBldmFsICIkaW5pdGlhbGl6ZV9wb3NpeF9nbG9iIiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCAtZiAmJgorICAgICAgIHNldCBYICRvbGQgJiYgb2xkPTokMjokNDokNTokNiAmJgorICAgICAgIHNldCBYICRuZXcgJiYgbmV3PTokMjokNDokNTokNiAmJgorICAgICAgICRwb3NpeF9nbG9iIHNldCArZiAmJgorCisgICAgICAgdGVzdCAiJG9sZCIgPSAiJG5ldyIgJiYKKyAgICAgICAkY21wcHJvZyAiJGRzdCIgIiRkc3R0bXAiID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4KKyAgICAgIHJtIC1mICIkZHN0dG1wIgorICAgIGVsc2UKKyAgICAgICMgUmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgJGRvaXQgJG12Y21kIC1mICIkZHN0dG1wIiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKworICAgICAgIyBUaGUgcmVuYW1lIGZhaWxlZCwgcGVyaGFwcyBiZWNhdXNlIG12IGNhbid0IHJlbmFtZSBzb21ldGhpbmcgZWxzZQorICAgICAgIyB0byBpdHNlbGYsIG9yIHBlcmhhcHMgYmVjYXVzZSBtdiBpcyBzbyBhbmNpZW50IHRoYXQgaXQgZG9lcyBub3QKKyAgICAgICMgc3VwcG9ydCAtZi4KKyAgICAgIHsKKwkjIE5vdyByZW1vdmUgb3IgbW92ZSBhc2lkZSBhbnkgb2xkIGZpbGUgYXQgZGVzdGluYXRpb24gbG9jYXRpb24uCisJIyBXZSB0cnkgdGhpcyB0d28gd2F5cyBzaW5jZSBybSBjYW4ndCB1bmxpbmsgaXRzZWxmIG9uIHNvbWUKKwkjIHN5c3RlbXMgYW5kIHRoZSBkZXN0aW5hdGlvbiBmaWxlIG1pZ2h0IGJlIGJ1c3kgZm9yIG90aGVyCisJIyByZWFzb25zLiAgSW4gdGhpcyBjYXNlLCB0aGUgZmluYWwgY2xlYW51cCBtaWdodCBmYWlsIGJ1dCB0aGUgbmV3CisJIyBmaWxlIHNob3VsZCBzdGlsbCBpbnN0YWxsIHN1Y2Nlc3NmdWxseS4KKwl7CisJICB0ZXN0ICEgLWYgIiRkc3QiIHx8CisJICAkZG9pdCAkcm1jbWQgLWYgIiRkc3QiIDI+L2Rldi9udWxsIHx8CisJICB7ICRkb2l0ICRtdmNtZCAtZiAiJGRzdCIgIiRybXRtcCIgMj4vZGV2L251bGwgJiYKKwkgICAgeyAkZG9pdCAkcm1jbWQgLWYgIiRybXRtcCIgMj4vZGV2L251bGw7IDo7IH0KKwkgIH0gfHwKKwkgIHsgZWNobyAiJDA6IGNhbm5vdCB1bmxpbmsgb3IgcmVuYW1lICRkc3QiID4mMgorCSAgICAoZXhpdCAxKTsgZXhpdCAxCisJICB9CisJfSAmJgorCisJIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCisKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9sdG1haW4uc2ggYi9sem8tMi4wMy9hdXRvY29uZi9sdG1haW4uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyNWE1OAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2F1dG9jb25mL2x0bWFpbi5zaApAQCAtMCwwICsxLDY4NjMgQEAKKyMgbHRtYWluLnNoIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIE5PVEU6IENoYW5naW5nIHRoaXMgZmlsZSB3aWxsIG5vdCBhZmZlY3QgYW55dGhpbmcgdW50aWwgeW91IHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1CisjIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorIyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0CisjIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCitiYXNlbmFtZT0icyxeLiovLCxnIgorCisjIFdvcmsgYXJvdW5kIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgaXNzdWUgb24gSVJJWCA2LjUuIE9uIElSSVggNi40Kywgc2gKKyMgaXMga3NoIGJ1dCB3aGVuIHRoZSBzaGVsbCBpcyBpbnZva2VkIGFzICJzaCIgYW5kIHRoZSBjdXJyZW50IHZhbHVlIG9mCisjIHRoZSBfWFBHIGVudmlyb25tZW50IHZhcmlhYmxlIGlzIG5vdCBlcXVhbCB0byAxIChvbmUpLCB0aGUgc3BlY2lhbAorIyBwb3NpdGlvbmFsIHBhcmFtZXRlciAkMCwgd2l0aGluIGEgZnVuY3Rpb24gY2FsbCwgaXMgdGhlIG5hbWUgb2YgdGhlCisjIGZ1bmN0aW9uLgorcHJvZ3BhdGg9IiQwIgorCisjIFRoZSBuYW1lIG9mIHRoaXMgcHJvZ3JhbToKK3Byb2duYW1lPWBlY2hvICIkcHJvZ3BhdGgiIHwgJFNFRCAkYmFzZW5hbWVgCittb2RlbmFtZT0iJHByb2duYW1lIgorCisjIEdsb2JhbCB2YXJpYWJsZXM6CitFWElUX1NVQ0NFU1M9MAorRVhJVF9GQUlMVVJFPTEKKworUFJPR1JBTT1sdG1haW4uc2gKK1BBQ0tBR0U9bGlidG9vbAorVkVSU0lPTj0xLjUuMjIKK1RJTUVTVEFNUD0iICgxLjEyMjAuMi4zNjUgMjAwNS8xMi8xOCAyMjoxNDowNikiCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKKyMgQ2hlY2sgdGhhdCB3ZSBoYXZlIGEgd29ya2luZyAkZWNoby4KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCc7IHRoZW4KKyAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQorICA6CitlbHNlCisgICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbCwgYW5kIHRoZW4gbWF5YmUgJGVjaG8gd2lsbCB3b3JrLgorICBleGVjICRTSEVMTCAiJHByb2dwYXRoIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KK2ZpCisKK2lmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCisgIHNoaWZ0CisgIGNhdCA8PEVPRgorJCoKK0VPRgorICBleGl0ICRFWElUX1NVQ0NFU1MKK2ZpCisKK2RlZmF1bHRfbW9kZT0KK2hlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKK21hZ2ljPSIlJSVNQUdJQyB2YXJpYWJsZSUlJSIKK21rZGlyPSJta2RpciIKK212PSJtdiAtZiIKK3JtPSJybSAtZiIKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9IiR7U0VEfSInIC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9J3MvXChbXFxgXFwiJFxcXFxdXCkvXFxcMS9nJworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBTUDJOTD0ndHIgXDA0MCBcMDEyJworICBOTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIFNQMk5MPSd0ciBcMTAwIFxuJworICBOTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKKworIyBOTFMgbnVpc2FuY2VzLgorIyBPbmx5IHNldCBMQU5HIGFuZCBMQ19BTEwgdG8gQyBpZiBhbHJlYWR5IHNldC4KKyMgVGhlc2UgbXVzdCBub3QgYmUgc2V0IHVuY29uZGl0aW9uYWxseSBiZWNhdXNlIG5vdCBhbGwgc3lzdGVtcyB1bmRlcnN0YW5kCisjIGUuZy4gTEFORz1DIChub3RhYmx5IFNDTykuCisjIFdlIHNhdmUgdGhlIG9sZCB2YWx1ZXMgdG8gcmVzdG9yZSBkdXJpbmcgZXhlY3V0ZSBtb2RlLgoraWYgdGVzdCAiJHtMQ19BTEwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgc2F2ZV9MQ19BTEw9IiRMQ19BTEwiOyBMQ19BTEw9QzsgZXhwb3J0IExDX0FMTAorZmkKK2lmIHRlc3QgIiR7TEFORytzZXR9IiA9IHNldDsgdGhlbgorICBzYXZlX0xBTkc9IiRMQU5HIjsgTEFORz1DOyBleHBvcnQgTEFORworZmkKKworIyBNYWtlIHN1cmUgSUZTIGhhcyBhIHNlbnNpYmxlIGRlZmF1bHQKK2x0X25sPScKKycKK0lGUz0iIAkkbHRfbmwiCisKK2lmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAkZWNobyAiJG1vZGVuYW1lOiBub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IiAxPiYyCisgICRlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKKyMgR2xvYmFsIHZhcmlhYmxlcy4KK21vZGU9JGRlZmF1bHRfbW9kZQorbm9ub3B0PQorcHJldj0KK3ByZXZvcHQ9CitydW49CitzaG93PSIkZWNobyIKK3Nob3dfaGVscD0KK2V4ZWN1dGVfZGxmaWxlcz0KK2R1cGxpY2F0ZV9kZXBzPW5vCitwcmVzZXJ2ZV9hcmdzPQorbG8ybz0icy9cXC5sb1wkLy4ke29iamV4dH0vIgorbzJsbz0icy9cXC4ke29iamV4dH1cJC8ubG8vIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIFNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zOgorIyBUaGlzIHNlZW1zIHRvIGJlIHRoZSBiZXN0IHBsYWNlIGZvciB0aGVtCisKKyMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KKyMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKKyMgbGlidG9vbCBwcm9jZXNzZXMsIGFuZCBhdm9pZHMgcmFjZSBjb25kaXRpb25zIGlmIHBvc3NpYmxlLiAgSWYKKyMgZ2l2ZW4sIFNUUklORyBpcyB0aGUgYmFzZW5hbWUgZm9yIHRoYXQgZGlyZWN0b3J5LgorZnVuY19ta3RlbXBkaXIgKCkKK3sKKyAgICBteV90ZW1wbGF0ZT0iJHtUTVBESVItL3RtcH0vJHsxLSRwcm9nbmFtZX0iCisKKyAgICBpZiB0ZXN0ICIkcnVuIiA9ICI6IjsgdGhlbgorICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKKyAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCisgICAgZWxzZQorCisgICAgICAjIElmIG1rdGVtcCB3b3JrcywgdXNlIHRoYXQgZmlyc3QgYW5kIGZvcmVtb3N0CisgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAorCisgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCisJIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCisJbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorCisJc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAorCXVtYXNrIDAwNzcKKwkkbWtkaXIgIiRteV90bXBkaXIiCisJdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICBmaQorCisgICAgICAjIElmIHdlJ3JlIG5vdCBpbiBkcnktcnVuIG1vZGUsIGJvbWIgb3V0IG9uIGZhaWx1cmUKKyAgICAgIHRlc3QgLWQgIiRteV90bXBkaXIiIHx8IHsKKyAgICAgICAgJGVjaG8gImNhbm5vdCBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCRteV90bXBkaXInIiAxPiYyCisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICB9CisgICAgZmkKKworICAgICRlY2hvICJYJG15X3RtcGRpciIgfCAkWHNlZAorfQorCisKKyMgZnVuY193aW4zMl9saWJpZCBhcmcKKyMgcmV0dXJuIHRoZSBsaWJyYXJ5IHR5cGUgb2YgZmlsZSAnYXJnJworIworIyBOZWVkIGEgbG90IG9mIGdvbyB0byBoYW5kbGUgKmJvdGgqIERMTHMgYW5kIGltcG9ydCBsaWJzCisjIEhhcyB0byBiZSBhIHNoZWxsIGZ1bmN0aW9uIGluIG9yZGVyIHRvICdlYXQnIHRoZSBhcmd1bWVudAorIyB0aGF0IGlzIHN1cHBsaWVkIHdoZW4gJGZpbGVfbWFnaWNfY29tbWFuZCBpcyBjYWxsZWQuCitmdW5jX3dpbjMyX2xpYmlkICgpCit7CisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICRFR1JFUCAtZSAnZmlsZSBmb3JtYXQgcGUtaTM4NiguKmFyY2hpdGVjdHVyZTogaTM4Nik/JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICAgd2luMzJfbm1yZXM9YGV2YWwgJE5NIC1mIHBvc2l4IC1BICQxIHwgXAorCSRTRUQgLW4gLWUgJzEsMTAwey8gSSAve3MsLiosaW1wb3J0LDtwO3E7fTt9J2AKKyAgICAgIGNhc2UgJHdpbjMyX25tcmVzIGluCisgICAgICBpbXBvcnQqKSAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0Ijs7CisgICAgICAqKSAgICAgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgc3RhdGljIjs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICAqRExMKikKKyAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgIDs7CisgICpleGVjdXRhYmxlKikgIyBidXQgc2hlbGwgc2NyaXB0cyBhcmUgImV4ZWN1dGFibGUiIHRvby4uLgorICAgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgICAqTVNcIFdpbmRvd3NcIFBFXCBJbnRlbCopCisgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgRExMIgorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICAkZWNobyAkd2luMzJfbGliaWRfdHlwZQorfQorCisKKyMgZnVuY19pbmZlcl90YWcgYXJnCisjIEluZmVyIHRhZ2dlZCBjb25maWd1cmF0aW9uIHRvIHVzZSBpZiBhbnkgYXJlIGF2YWlsYWJsZSBhbmQKKyMgaWYgb25lIHdhc24ndCBjaG9zZW4gdmlhIHRoZSAiLS10YWciIGNvbW1hbmQgbGluZSBvcHRpb24uCisjIE9ubHkgYXR0ZW1wdCB0aGlzIGlmIHRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlCisjIGNvbW1hbmQgZG9lc24ndCBtYXRjaCB0aGUgZGVmYXVsdCBjb21waWxlci4KKyMgYXJnIGlzIHVzdWFsbHkgb2YgdGhlIGZvcm0gJ2djYyAuLi4nCitmdW5jX2luZmVyX3RhZyAoKQoreworICAgIGlmIHRlc3QgLW4gIiRhdmFpbGFibGVfdGFncyIgJiYgdGVzdCAteiAiJHRhZ25hbWUiOyB0aGVuCisgICAgICBDQ19xdW90ZWQ9CisgICAgICBmb3IgYXJnIGluICRDQzsgZG8KKwljYXNlICRhcmcgaW4KKwkgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgYXJnPSJcIiRhcmdcIiIKKwkgIDs7CisJZXNhYworCUNDX3F1b3RlZD0iJENDX3F1b3RlZCAkYXJnIgorICAgICAgZG9uZQorICAgICAgY2FzZSAkQCBpbgorICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKKyAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgorICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJGVjaG8gJENDYCAiKiB8ICJgJGVjaG8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkZWNobyAkQ0NfcXVvdGVkYCAiKiB8ICJgJGVjaG8gJENDX3F1b3RlZGAgIiopIDs7CisgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAorICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgorICAgICAgKikKKwlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCisJICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KKwkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKKwkgICAgQ0NfcXVvdGVkPQorCSAgICBmb3IgYXJnIGluICRDQzsgZG8KKwkgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICBjYXNlICRhcmcgaW4KKwkgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgICAgICBhcmc9IlwiJGFyZ1wiIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRhcmciCisJICBkb25lCisJICAgIGNhc2UgIiRAICIgaW4KKwkgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiIGAkZWNobyAkQ0NgICIqIHwgImAkZWNobyAkQ0NgICIqIHwgIiAkQ0NfcXVvdGVkIiogfCAiJENDX3F1b3RlZCAiKiB8ICIgYCRlY2hvICRDQ19xdW90ZWRgICIqIHwgImAkZWNobyAkQ0NfcXVvdGVkYCAiKikKKwkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcworCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCisJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KKwkgICAgICB0YWduYW1lPSR6CisJICAgICAgYnJlYWsKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWRvbmUKKwkjIElmICR0YWduYW1lIHN0aWxsIGlzbid0IHNldCwgdGhlbiBubyB0YWdnZWQgY29uZmlndXJhdGlvbgorCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKKwkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KKwlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKKwkgICRlY2hvICIkbW9kZW5hbWU6IHNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisjICAgICAgICBlbHNlCisjICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgZGlyIG9sZGxpYgorZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgKCkKK3sKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKworICAgICRzaG93ICIoY2QgJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4ICRmX2V4X2FuX2FyX29sZGxpYikiCisgICAgJHJ1biBldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcJGZfZXhfYW5fYXJfb2xkbGliKSIgfHwgZXhpdCAkPworICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiBFUlJPUjogb2JqZWN0IG5hbWUgY29uZmxpY3RzOiAkZl9leF9hbl9hcl9kaXIvJGZfZXhfYW5fYXJfb2xkbGliIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorfQorCisjIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyBnZW50b3Agb2xkbGliIC4uLgorZnVuY19leHRyYWN0X2FyY2hpdmVzICgpCit7CisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisgICAgbXlfc3RhdHVzPSIiCisKKyAgICAkc2hvdyAiJHtybX1yICRteV9nZW50b3AiCisgICAgJHJ1biAke3JtfXIgIiRteV9nZW50b3AiCisgICAgJHNob3cgIiRta2RpciAkbXlfZ2VudG9wIgorICAgICRydW4gJG1rZGlyICIkbXlfZ2VudG9wIgorICAgIG15X3N0YXR1cz0kPworICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJG15X2dlbnRvcCI7IHRoZW4KKyAgICAgIGV4aXQgJG15X3N0YXR1cworICAgIGZpCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgbXlfeGxpYj1gJGVjaG8gIlgkbXlfeGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgICAgbXlfeGRpcj0iJG15X2dlbnRvcC8kbXlfeGxpYiIKKworICAgICAgJHNob3cgIiR7cm19ciAkbXlfeGRpciIKKyAgICAgICRydW4gJHtybX1yICIkbXlfeGRpciIKKyAgICAgICRzaG93ICIkbWtkaXIgJG15X3hkaXIiCisgICAgICAkcnVuICRta2RpciAiJG15X3hkaXIiCisgICAgICBleGl0X3N0YXR1cz0kPworICAgICAgaWYgdGVzdCAiJGV4aXRfc3RhdHVzIiAtbmUgMCAmJiB0ZXN0ICEgLWQgIiRteV94ZGlyIjsgdGhlbgorCWV4aXQgJGV4aXRfc3RhdHVzCisgICAgICBmaQorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgKi1kYXJ3aW4qKQorCSRzaG93ICJFeHRyYWN0aW5nICRteV94YWJzIgorCSMgRG8gbm90IGJvdGhlciBkb2luZyBhbnl0aGluZyBpZiBqdXN0IGEgZHJ5IHJ1bgorCWlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisJICBkYXJ3aW5fb3JpZ19kaXI9YHB3ZGAKKwkgIGNkICRteV94ZGlyIHx8IGV4aXQgJD8KKwkgIGRhcndpbl9hcmNoaXZlPSRteV94YWJzCisJICBkYXJ3aW5fY3VyZGlyPWBwd2RgCisJICBkYXJ3aW5fYmFzZV9hcmNoaXZlPWAkZWNobyAiWCRkYXJ3aW5fYXJjaGl2ZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgZGFyd2luX2FyY2hlcz1gbGlwbyAtaW5mbyAiJGRhcndpbl9hcmNoaXZlIiAyPi9kZXYvbnVsbCB8ICRFR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsYAorCSAgaWYgdGVzdCAtbiAiJGRhcndpbl9hcmNoZXMiOyB0aGVuCisJICAgIGRhcndpbl9hcmNoZXM9YGVjaG8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgJHNob3cgIiRkYXJ3aW5fYmFzZV9hcmNoaXZlIGhhcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzICRkYXJ3aW5fYXJjaGVzIgorCSAgICBmb3IgZGFyd2luX2FyY2ggaW4gICRkYXJ3aW5fYXJjaGVzIDsgZG8KKwkgICAgICBta2RpciAtcCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBsaXBvIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkcm0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAjIyBPa2F5IG5vdyB3ZSBoYXZlIGEgYnVuY2ggb2YgdGhpbiBvYmplY3RzLCBnb3R0YSBmYXR0ZW4gdGhlbSB1cCA6KQorCSAgICBkYXJ3aW5fZmlsZWxpc3Q9YGZpbmQgdW5mYXQtJCQgLXR5cGUgZiAtbmFtZSBcKi5vIC1wcmludCAtbyAtbmFtZSBcKi5sbyAtcHJpbnR8IHhhcmdzIGJhc2VuYW1lIHwgc29ydCAtdSB8ICROTDJTUGAKKwkgICAgZGFyd2luX2ZpbGU9CisJICAgIGRhcndpbl9maWxlcz0KKwkgICAgZm9yIGRhcndpbl9maWxlIGluICRkYXJ3aW5fZmlsZWxpc3Q7IGRvCisJICAgICAgZGFyd2luX2ZpbGVzPWBmaW5kIHVuZmF0LSQkIC1uYW1lICRkYXJ3aW5fZmlsZSAtcHJpbnQgfCAkTkwyU1BgCisJICAgICAgbGlwbyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAke3JtfXIgdW5mYXQtJCQKKwkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCisJICBlbHNlCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorIAkgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCisJICBmaSAjICRkYXJ3aW5fYXJjaGVzCisJZmkgIyAkcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorICAgICAgICA7OworICAgICAgZXNhYworICAgICAgbXlfb2xkb2Jqcz0iJG15X29sZG9ianMgImBmaW5kICRteV94ZGlyIC1uYW1lIFwqLiRvYmpleHQgLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludCB8ICROTDJTUGAKKyAgICBkb25lCisgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdD0iJG15X29sZG9ianMiCit9CisjIEVuZCBvZiBTaGVsbCBmdW5jdGlvbiBkZWZpbml0aW9ucworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIERhcndpbiBzdWNrcworZXZhbCBzdGRfc2hyZXh0PVwiJHNocmV4dF9jbWRzXCIKKworZGlzYWJsZV9saWJzPW5vCisKKyMgUGFyc2Ugb3VyIGNvbW1hbmQgbGluZSBvcHRpb25zIG9uY2UsIHRob3JvdWdobHkuCit3aGlsZSB0ZXN0ICIkIyIgLWd0IDAKK2RvCisgIGFyZz0iJDEiCisgIHNoaWZ0CisKKyAgY2FzZSAkYXJnIGluCisgIC0qPSopIG9wdGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL1stX2EtekEtWjAtOV0qPS8vJ2AgOzsKKyAgKikgb3B0YXJnPSA7OworICBlc2FjCisKKyAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorICAgIGNhc2UgJHByZXYgaW4KKyAgICBleGVjdXRlX2RsZmlsZXMpCisgICAgICBleGVjdXRlX2RsZmlsZXM9IiRleGVjdXRlX2RsZmlsZXMgJGFyZyIKKyAgICAgIDs7CisgICAgdGFnKQorICAgICAgdGFnbmFtZT0iJGFyZyIKKyAgICAgIHByZXNlcnZlX2FyZ3M9IiR7cHJlc2VydmVfYXJnc309JGFyZyIKKworICAgICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCisgICAgICBjYXNlICR0YWduYW1lIGluCisgICAgICAqWyEtX0EtWmEtejAtOSwvXSopCisJJGVjaG8gIiRwcm9nbmFtZTogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiIDE+JjIKKwlleGl0ICRFWElUX0ZBSUxVUkUKKwk7OworICAgICAgZXNhYworCisgICAgICBjYXNlICR0YWduYW1lIGluCisgICAgICBDQykKKwkjIERvbid0IHRlc3QgZm9yIHRoZSAiZGVmYXVsdCIgQyB0YWcsIGFzIHdlIGtub3csIGl0J3MgdGhlcmUsIGJ1dAorCSMgbm90IHNwZWNpYWxseSBtYXJrZWQuCisJOzsKKyAgICAgICopCisJaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIkcHJvZ3BhdGgiID4gL2Rldi9udWxsOyB0aGVuCisJICB0YWdsaXN0PSIkdGFnbGlzdCAkdGFnbmFtZSIKKwkgICMgRXZhbHVhdGUgdGhlIGNvbmZpZ3VyYXRpb24uCisJICBldmFsICJgJHtTRUR9IC1uIC1lICcvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvLC9eIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJyR0YWduYW1lJyQvcCcgPCAkcHJvZ3BhdGhgIgorCWVsc2UKKwkgICRlY2hvICIkcHJvZ25hbWU6IGlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIiAxPiYyCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAiJHByZXY9XCRhcmciCisgICAgICA7OworICAgIGVzYWMKKworICAgIHByZXY9CisgICAgcHJldm9wdD0KKyAgICBjb250aW51ZQorICBmaQorCisgICMgSGF2ZSB3ZSBzZWVuIGEgbm9uLW9wdGlvbmFsIGFyZ3VtZW50IHlldD8KKyAgY2FzZSAkYXJnIGluCisgIC0taGVscCkKKyAgICBzaG93X2hlbHA9eWVzCisgICAgOzsKKworICAtLXZlcnNpb24pCisgICAgJGVjaG8gIiRQUk9HUkFNIChHTlUgJFBBQ0tBR0UpICRWRVJTSU9OJFRJTUVTVEFNUCIKKyAgICAkZWNobworICAgICRlY2hvICJDb3B5cmlnaHQgKEMpIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIKKyAgICAkZWNobyAiVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8iCisgICAgJGVjaG8gIndhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKKyAgICBleGl0ICQ/CisgICAgOzsKKworICAtLWNvbmZpZykKKyAgICAke1NFRH0gLWUgJzEsL14jICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRy9kJyAtZSAnL14jICMjIyBFTkQgTElCVE9PTCBDT05GSUcvLCRkJyAkcHJvZ3BhdGgKKyAgICAjIE5vdyBwcmludCB0aGUgY29uZmlndXJhdGlvbnMgZm9yIHRoZSB0YWdzLgorICAgIGZvciB0YWduYW1lIGluICR0YWdsaXN0OyBkbworICAgICAgJHtTRUR9IC1uIC1lICIvXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJC9wIiA8ICIkcHJvZ3BhdGgiCisgICAgZG9uZQorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0tZGVidWcpCisgICAgJGVjaG8gIiRwcm9nbmFtZTogZW5hYmxpbmcgc2hlbGwgdHJhY2UgbW9kZSIKKyAgICBzZXQgLXgKKyAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkYXJnIgorICAgIDs7CisKKyAgLS1kcnktcnVuIHwgLW4pCisgICAgcnVuPToKKyAgICA7OworCisgIC0tZmVhdHVyZXMpCisgICAgJGVjaG8gImhvc3Q6ICRob3N0IgorICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisgICAgICAkZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgZWxzZQorICAgICAgJGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICRlY2hvICJlbmFibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBlbHNlCisgICAgICAkZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGZpCisgICAgZXhpdCAkPworICAgIDs7CisKKyAgLS1maW5pc2gpIG1vZGU9ImZpbmlzaCIgOzsKKworICAtLW1vZGUpIHByZXZvcHQ9Ii0tbW9kZSIgcHJldj1tb2RlIDs7CisgIC0tbW9kZT0qKSBtb2RlPSIkb3B0YXJnIiA7OworCisgIC0tcHJlc2VydmUtZHVwLWRlcHMpIGR1cGxpY2F0ZV9kZXBzPSJ5ZXMiIDs7CisKKyAgLS1xdWlldCB8IC0tc2lsZW50KQorICAgIHNob3c9OgorICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzICRhcmciCisgICAgOzsKKworICAtLXRhZykKKyAgICBwcmV2b3B0PSItLXRhZyIKKyAgICBwcmV2PXRhZworICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgorICAgIDs7CisgIC0tdGFnPSopCisgICAgc2V0IHRhZyAiJG9wdGFyZyIgJHsxKyIkQCJ9CisgICAgc2hpZnQKKyAgICBwcmV2PXRhZworICAgIHByZXNlcnZlX2FyZ3M9IiRwcmVzZXJ2ZV9hcmdzIC0tdGFnIgorICAgIDs7CisKKyAgLWRsb3BlbikKKyAgICBwcmV2b3B0PSItZGxvcGVuIgorICAgIHByZXY9ZXhlY3V0ZV9kbGZpbGVzCisgICAgOzsKKworICAtKikKKyAgICAkZWNobyAiJG1vZGVuYW1lOiB1bnJlY29nbml6ZWQgb3B0aW9uIFxgJGFyZyciIDE+JjIKKyAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICA7OworCisgICopCisgICAgbm9ub3B0PSIkYXJnIgorICAgIGJyZWFrCisgICAgOzsKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkcHJldm9wdCI7IHRoZW4KKyAgJGVjaG8gIiRtb2RlbmFtZTogb3B0aW9uIFxgJHByZXZvcHQnIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCisgICRlY2hvICIkaGVscCIgMT4mMgorICBleGl0ICRFWElUX0ZBSUxVUkUKK2ZpCisKK2Nhc2UgJGRpc2FibGVfbGlicyBpbgorbm8pCisgIDs7CitzaGFyZWQpCisgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworICBidWlsZF9vbGRfbGlicz15ZXMKKyAgOzsKK3N0YXRpYykKKyAgYnVpbGRfb2xkX2xpYnM9YGNhc2UgJGJ1aWxkX2xpYnRvb2xfbGlicyBpbiB5ZXMpIGVjaG8gbm87OyAqKSBlY2hvIHllczs7IGVzYWNgCisgIDs7Citlc2FjCisKKyMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAorIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCisjIGxlZnQgb3ZlciBieSBzaGVsbHMuCitleGVjX2NtZD0KKworaWYgdGVzdCAteiAiJHNob3dfaGVscCI7IHRoZW4KKworICAjIEluZmVyIHRoZSBvcGVyYXRpb24gbW9kZS4KKyAgaWYgdGVzdCAteiAiJG1vZGUiOyB0aGVuCisgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbmZlcnJpbmcgdGhlIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIGRlcHJlY2F0ZWQuIiAxPiYyCisgICAgJGVjaG8gIioqKiBGdXR1cmUgdmVyc2lvbnMgb2YgTGlidG9vbCB3aWxsIHJlcXVpcmUgLS1tb2RlPU1PREUgYmUgc3BlY2lmaWVkLiIgMT4mMgorICAgIGNhc2UgJG5vbm9wdCBpbgorICAgICpjYyB8IGNjKiB8ICorKyB8IGdjYyogfCAqLWdjYyogfCBnKysqIHwgeGxjKikKKyAgICAgIG1vZGU9bGluaworICAgICAgZm9yIGFyZworICAgICAgZG8KKwljYXNlICRhcmcgaW4KKwktYykKKwkgICBtb2RlPWNvbXBpbGUKKwkgICBicmVhaworCSAgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICAqZGIgfCAqZGJ4IHwgKnN0cmFjZSB8ICp0cnVzcykKKyAgICAgIG1vZGU9ZXhlY3V0ZQorICAgICAgOzsKKyAgICAqaW5zdGFsbCp8Y3B8bXYpCisgICAgICBtb2RlPWluc3RhbGwKKyAgICAgIDs7CisgICAgKnJtKQorICAgICAgbW9kZT11bmluc3RhbGwKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgSWYgd2UgaGF2ZSBubyBtb2RlLCBidXQgZGxmaWxlcyB3ZXJlIHNwZWNpZmllZCwgdGhlbiBkbyBleGVjdXRlIG1vZGUuCisgICAgICB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiBtb2RlPWV4ZWN1dGUKKworICAgICAgIyBKdXN0IHVzZSB0aGUgZGVmYXVsdCBvcGVyYXRpb24gbW9kZS4KKyAgICAgIGlmIHRlc3QgLXogIiRtb2RlIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRub25vcHQiOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgaW5mZXIgb3BlcmF0aW9uIG1vZGUgZnJvbSBcYCRub25vcHQnIiAxPiYyCisJZWxzZQorCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGluZmVyIG9wZXJhdGlvbiBtb2RlIHdpdGhvdXQgTU9ERS1BUkdTIiAxPiYyCisJZmkKKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICBpZiB0ZXN0IC1uICIkZXhlY3V0ZV9kbGZpbGVzIiAmJiB0ZXN0ICIkbW9kZSIgIT0gZXhlY3V0ZTsgdGhlbgorICAgICRlY2hvICIkbW9kZW5hbWU6IHVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIgMT4mMgorICAgICRlY2hvICIkaGVscCIgMT4mMgorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICBmaQorCisgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgZ2VuZXJpY19oZWxwPSIkaGVscCIKKyAgaGVscD0iVHJ5IFxgJG1vZGVuYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKworICAjIFRoZXNlIG1vZGVzIGFyZSBpbiBvcmRlciBvZiBleGVjdXRpb24gZnJlcXVlbmN5IHNvIHRoYXQgdGhleSBydW4gcXVpY2tseS4KKyAgY2FzZSAkbW9kZSBpbgorICAjIGxpYnRvb2wgY29tcGlsZSBtb2RlCisgIGNvbXBpbGUpCisgICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogY29tcGlsZSIKKyAgICAjIEdldCB0aGUgY29tcGlsYXRpb24gY29tbWFuZCBhbmQgdGhlIHNvdXJjZSBmaWxlLgorICAgIGJhc2VfY29tcGlsZT0KKyAgICBzcmNmaWxlPSIkbm9ub3B0IiAgIyAgYWx3YXlzIGtlZXAgYSBub24tZW1wdHkgdmFsdWUgaW4gInNyY2ZpbGUiCisgICAgc3VwcHJlc3Nfb3B0PXllcworICAgIHN1cHByZXNzX291dHB1dD0KKyAgICBhcmdfbW9kZT1ub3JtYWwKKyAgICBsaWJvYmo9CisgICAgbGF0ZXI9CisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgICBhcmcgICkKKwkjIGRvIG5vdCAiY29udGludWUiLiAgSW5zdGVhZCwgYWRkIHRoaXMgdG8gYmFzZV9jb21waWxlCisJbGFzdGFyZz0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwk7OworCisgICAgICB0YXJnZXQgKQorCWxpYm9iaj0iJGFyZyIKKwlhcmdfbW9kZT1ub3JtYWwKKwljb250aW51ZQorCTs7CisKKyAgICAgIG5vcm1hbCApCisJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgorCWNhc2UgJGFyZyBpbgorCS1vKQorCSAgaWYgdGVzdCAtbiAiJGxpYm9iaiIgOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJICBhcmdfbW9kZT10YXJnZXQKKwkgIGNvbnRpbnVlCisJICA7OworCisJLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgbGF0ZXI9IiRsYXRlciAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktbm8tc3VwcHJlc3MpCisJICBzdXBwcmVzc19vcHQ9bm8KKwkgIGNvbnRpbnVlCisJICA7OworCisJLVhjb21waWxlcikKKwkgIGFyZ19tb2RlPWFyZyAgIyAgdGhlIG5leHQgb25lIGdvZXMgaW50byB0aGUgImJhc2VfY29tcGlsZSIgYXJnIGxpc3QKKwkgIGNvbnRpbnVlICAgICAgIyAgVGhlIGN1cnJlbnQgInNyY2ZpbGUiIHdpbGwgZWl0aGVyIGJlIHJldGFpbmVkIG9yCisJICA7OyAgICAgICAgICAgICMgIHJlcGxhY2VkIGxhdGVyLiAgSSB3b3VsZCBndWVzcyB0aGF0IHdvdWxkIGJlIGEgYnVnLgorCisJLVdjLCopCisJICBhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXi1XYywvLyJgCisJICBsYXN0YXJnPQorCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisgCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgICAgSUZTPSIkc2F2ZV9pZnMiCisKKwkgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQorCSAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorCSAgICBjYXNlICRhcmcgaW4KKwkgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgICAgICBhcmc9IlwiJGFyZ1wiIgorCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgbGFzdGFyZz0iJGxhc3RhcmcgJGFyZyIKKwkgIGRvbmUKKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgbGFzdGFyZz1gJGVjaG8gIlgkbGFzdGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKworCSAgIyBBZGQgdGhlIGFyZ3VtZW50cyB0byBiYXNlX2NvbXBpbGUuCisJICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisJICBjb250aW51ZQorCSAgOzsKKworCSogKQorCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgorCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCisJICAjCisJICBsYXN0YXJnPSIkc3JjZmlsZSIKKwkgIHNyY2ZpbGU9IiRhcmciCisJICA7OworCWVzYWMgICMgIGNhc2UgJGFyZworCTs7CisgICAgICBlc2FjICAgICMgIGNhc2UgJGFyZ19tb2RlCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgcHJldmlvdXMgYXJndW1lbnQuCisgICAgICBsYXN0YXJnPWAkZWNobyAiWCRsYXN0YXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKworICAgICAgY2FzZSAkbGFzdGFyZyBpbgorICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBhbmQgc29tZSBTdW5PUyBrc2ggbWlzdHJlYXQgYmFja3NsYXNoLWVzY2FwaW5nCisgICAgICAjIGluIHNjYW4gc2V0cyAod29ya2VkIGFyb3VuZCB3aXRoIHZhcmlhYmxlIGV4cGFuc2lvbiksCisgICAgICAjIGFuZCBmdXJ0aGVybW9yZSBjYW5ub3QgaGFuZGxlICd8JyAnJicgJygnICcpJyBpbiBzY2FuIHNldHMKKyAgICAgICMgYXQgYWxsLCBzbyB3ZSBzcGVjaWZ5IHRoZW0gc2VwYXJhdGVseS4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCWxhc3Rhcmc9IlwiJGxhc3RhcmdcIiIKKwk7OworICAgICAgZXNhYworCisgICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisgICAgZG9uZSAjIGZvciBhcmcKKworICAgIGNhc2UgJGFyZ19tb2RlIGluCisgICAgYXJnKQorICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhbiBhcmd1bWVudCBmb3IgLVhjb21waWxlIgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICA7OworICAgIHRhcmdldCkKKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICA7OworICAgICopCisgICAgICAjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSBvYmplY3QuCisgICAgICBbIC16ICIkbGlib2JqIiBdICYmIGxpYm9iaj1gJGVjaG8gIlgkc3JjZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFJlY29nbml6ZSBzZXZlcmFsIGRpZmZlcmVudCBmaWxlIHN1ZmZpeGVzLgorICAgICMgSWYgdGhlIHVzZXIgc3BlY2lmaWVzIC1vIGZpbGUubywgaXQgaXMgcmVwbGFjZWQgd2l0aCBmaWxlLmxvCisgICAgeGZvcm09J1tjQ0ZTaWZtc29dJworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICouYWRhKSB4Zm9ybT1hZGEgOzsKKyAgICAqLmFkYikgeGZvcm09YWRiIDs7CisgICAgKi5hZHMpIHhmb3JtPWFkcyA7OworICAgICouYXNtKSB4Zm9ybT1hc20gOzsKKyAgICAqLmMrKykgeGZvcm09YysrIDs7CisgICAgKi5jYykgeGZvcm09Y2MgOzsKKyAgICAqLmlpKSB4Zm9ybT1paSA7OworICAgICouY2xhc3MpIHhmb3JtPWNsYXNzIDs7CisgICAgKi5jcHApIHhmb3JtPWNwcCA7OworICAgICouY3h4KSB4Zm9ybT1jeHggOzsKKyAgICAqLmY5MCkgeGZvcm09ZjkwIDs7CisgICAgKi5mb3IpIHhmb3JtPWZvciA7OworICAgICouamF2YSkgeGZvcm09amF2YSA7OworICAgIGVzYWMKKworICAgIGxpYm9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICJzL1wuJHhmb3JtJC8ubG8vImAKKworICAgIGNhc2UgJGxpYm9iaiBpbgorICAgICoubG8pIG9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICIkbG8ybyJgIDs7CisgICAgKikKKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICBmb3IgYXJnIGluICRsYXRlcjsgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLXN0YXRpYykKKwlidWlsZF9vbGRfbGlicz15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1wcmVmZXItcGljKQorCXBpY19tb2RlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLXByZWZlci1ub24tcGljKQorCXBpY19tb2RlPW5vCisJY29udGludWUKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIHFsaWJvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgY2FzZSAkcWxpYm9iaiBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJcWxpYm9iaj0iXCIkcWxpYm9ialwiIiA7OworICAgIGVzYWMKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkcWxpYm9iaiIgXAorCSYmICRlY2hvICJYJGxpYm9iaiIgfCBncmVwICdbXX4jXip7fTs8Pj8iJyInIicgCSYoKXxgJFtdJyBcCisJJiYgJGVjaG8gIiRtb2RlbmFtZTogbGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKKyAgICBvYmpuYW1lPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICB4ZGlyPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkb2JqIjsgdGhlbgorICAgICAgeGRpcj0KKyAgICBlbHNlCisgICAgICB4ZGlyPSR4ZGlyLworICAgIGZpCisgICAgbG9iaj0ke3hkaXJ9JG9iamRpci8kb2JqbmFtZQorCisgICAgaWYgdGVzdCAteiAiJGJhc2VfY29tcGlsZSI7IHRoZW4KKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICAjIERlbGV0ZSBhbnkgbGVmdG92ZXIgbGlicmFyeSBvYmplY3RzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbW92ZWxpc3Q9IiRvYmogJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgorICAgIGVsc2UKKyAgICAgIHJlbW92ZWxpc3Q9IiRsb2JqICRsaWJvYmogJHtsaWJvYmp9VCIKKyAgICBmaQorCisgICAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKyAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKworICAgICMgT24gQ3lnd2luIHRoZXJlJ3Mgbm8gInJlYWwiIFBJQyBmbGFnIHNvIHdlIG11c3QgYnVpbGQgYm90aCBvYmplY3QgdHlwZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICAgIDs7CisgICAgZXNhYworICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgPSBubyAmJiB0ZXN0ICIkZGVwbGlic19jaGVja19tZXRob2QiICE9IHBhc3NfYWxsOyB0aGVuCisgICAgICAjIG5vbi1QSUMgY29kZSBpbiBzaGFyZWQgbGlicmFyaWVzIGlzIG5vdCBzdXBwb3J0ZWQKKyAgICAgIHBpY19tb2RlPWRlZmF1bHQKKyAgICBmaQorCisgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKKyAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKKyAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCisgICAgICBvdXRwdXRfb2JqPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJScgLWUgJ3MlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQorICAgICAgbG9ja2ZpbGU9IiRvdXRwdXRfb2JqLmxvY2siCisgICAgICByZW1vdmVsaXN0PSIkcmVtb3ZlbGlzdCAkb3V0cHV0X29iaiAkbG9ja2ZpbGUiCisgICAgICB0cmFwICIkcnVuICRybSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqPQorICAgICAgbmVlZF9sb2Nrcz1ubworICAgICAgbG9ja2ZpbGU9CisgICAgZmkKKworICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCisgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQorICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgorICAgICAgdW50aWwgJHJ1biBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwkkc2hvdyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisJc2xlZXAgMgorICAgICAgZG9uZQorICAgIGVsaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybjsgdGhlbgorICAgICAgaWYgdGVzdCAtZiAiJGxvY2tmaWxlIjsgdGhlbgorCSRlY2hvICJcCisqKiogRVJST1IsICRsb2NrZmlsZSBleGlzdHMgYW5kIGNvbnRhaW5zOgorYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCisKK1RoaXMgaW5kaWNhdGVzIHRoYXQgYW5vdGhlciBwcm9jZXNzIGlzIHRyeWluZyB0byB1c2UgdGhlIHNhbWUKK3RlbXBvcmFyeSBvYmplY3QgZmlsZSwgYW5kIGxpYnRvb2wgY291bGQgbm90IHdvcmsgYXJvdW5kIGl0IGJlY2F1c2UKK3lvdXIgY29tcGlsZXIgZG9lcyBub3Qgc3VwcG9ydCBcYC1jJyBhbmQgXGAtbycgdG9nZXRoZXIuICBJZiB5b3UKK3JlcGVhdCB0aGlzIGNvbXBpbGF0aW9uLCBpdCBtYXkgc3VjY2VlZCwgYnkgY2hhbmNlLCBidXQgeW91IGhhZCBiZXR0ZXIKK2F2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCitjb21waWxlci4iCisKKwkkcnVuICRybSAkcmVtb3ZlbGlzdAorCWV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZmkKKyAgICAgICRlY2hvICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgorICAgIGZpCisKKyAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KKyAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKKyAgICBmaQorICAgIHFzcmNmaWxlPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICBjYXNlICRxc3JjZmlsZSBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICBxc3JjZmlsZT0iXCIkcXNyY2ZpbGVcIiIgOzsKKyAgICBlc2FjCisKKyAgICAkcnVuICRybSAiJGxpYm9iaiIgIiR7bGlib2JqfVQiCisKKyAgICAjIENyZWF0ZSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUgKGFuYWxvZ291cyB0byBhICIubGEiIGZpbGUpLAorICAgICMgYnV0IGRvbid0IGNyZWF0ZSBpdCBpZiB3ZSdyZSBkb2luZyBhIGRyeSBydW4uCisgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4gJHtsaWJvYmp9VCA8PEVPRgorIyAkbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCisKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK0VPRgorCisgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgV2l0aG91dCB0aGlzIGFzc2lnbm1lbnQsIGJhc2VfY29tcGlsZSBnZXRzIGVtcHRpZWQuCisgICAgICBmYnNkX2hpZGVvdXNfc2hfYnVnPSRiYXNlX2NvbXBpbGUKKworICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSBubzsgdGhlbgorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGVsc2UKKwkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICEgLWQgIiR7eGRpcn0kb2JqZGlyIjsgdGhlbgorCSRzaG93ICIkbWtkaXIgJHt4ZGlyfSRvYmpkaXIiCisJJHJ1biAkbWtkaXIgJHt4ZGlyfSRvYmpkaXIKKwlleGl0X3N0YXR1cz0kPworCWlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIke3hkaXJ9JG9iamRpciI7IHRoZW4KKwkgIGV4aXQgJGV4aXRfc3RhdHVzCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgorCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorICAgICAgZmkKKworICAgICAgJHJ1biAkcm0gIiRsb2JqIiAiJG91dHB1dF9vYmoiCisKKyAgICAgICRzaG93ICIkY29tbWFuZCIKKyAgICAgIGlmICRydW4gZXZhbCAiJGNvbW1hbmQiOyB0aGVuIDoKKyAgICAgIGVsc2UKKwl0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkZWNobyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRydW4gJHJtICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZCwgdGhlbiBnbyBvbiB0byBjb21waWxlIHRoZSBuZXh0IG9uZQorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkbG9iaiI7IHRoZW4KKwkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRsb2JqIgorCWlmICRydW4gJG12ICRvdXRwdXRfb2JqICRsb2JqOyB0aGVuIDoKKwllbHNlCisJICBlcnJvcj0kPworCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkgIGV4aXQgJGVycm9yCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBQSUMgb2JqZWN0IHRvIHRoZSBsaWJ0b29sIG9iamVjdCBmaWxlLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKK3BpY19vYmplY3Q9JyRvYmpkaXIvJG9iam5hbWUnCisKK0VPRgorCisgICAgICAjIEFsbG93IGVycm9yIG1lc3NhZ2VzIG9ubHkgZnJvbSB0aGUgZmlyc3QgY29tcGlsYXRpb24uCisgICAgICBpZiB0ZXN0ICIkc3VwcHJlc3Nfb3B0IiA9IHllczsgdGhlbgorICAgICAgICBzdXBwcmVzc19vdXRwdXQ9JyA+L2Rldi9udWxsIDI+JjEnCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgTm8gUElDIG9iamVjdCBzbyBpbmRpY2F0ZSBpdCBkb2Vzbid0IGV4aXN0IGluIHRoZSBsaWJ0b29sCisgICAgICAjIG9iamVjdCBmaWxlLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKK3BpY19vYmplY3Q9bm9uZQorCitFT0YKKyAgICBmaQorCisgICAgIyBPbmx5IGJ1aWxkIGEgcG9zaXRpb24tZGVwZW5kZW50IG9iamVjdCBpZiB3ZSBidWlsZCBvbGQgbGlicmFyaWVzLgorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGlmIHRlc3QgIiRwaWNfbW9kZSIgIT0geWVzOyB0aGVuCisJIyBEb24ndCBidWlsZCBQSUMgY29kZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgorICAgICAgZWxzZQorCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlICRwaWNfZmxhZyIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IHllczsgdGhlbgorCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRvYmoiCisgICAgICBmaQorCisgICAgICAjIFN1cHByZXNzIGNvbXBpbGVyIG91dHB1dCBpZiB3ZSBhbHJlYWR5IGRpZCBhIFBJQyBjb21waWxhdGlvbi4KKyAgICAgIGNvbW1hbmQ9IiRjb21tYW5kJHN1cHByZXNzX291dHB1dCIKKyAgICAgICRydW4gJHJtICIkb2JqIiAiJG91dHB1dF9vYmoiCisgICAgICAkc2hvdyAiJGNvbW1hbmQiCisgICAgICBpZiAkcnVuIGV2YWwgIiRjb21tYW5kIjsgdGhlbiA6CisgICAgICBlbHNlCisJJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHdhcm4gJiYKKwkgdGVzdCAiWGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYCIgIT0gIlgkc3JjZmlsZSI7IHRoZW4KKwkkZWNobyAiXAorKioqIEVSUk9SLCAkbG9ja2ZpbGUgY29udGFpbnM6CitgY2F0ICRsb2NrZmlsZSAyPi9kZXYvbnVsbGAKKworYnV0IGl0IHNob3VsZCBjb250YWluOgorJHNyY2ZpbGUKKworVGhpcyBpbmRpY2F0ZXMgdGhhdCBhbm90aGVyIHByb2Nlc3MgaXMgdHJ5aW5nIHRvIHVzZSB0aGUgc2FtZQordGVtcG9yYXJ5IG9iamVjdCBmaWxlLCBhbmQgbGlidG9vbCBjb3VsZCBub3Qgd29yayBhcm91bmQgaXQgYmVjYXVzZQoreW91ciBjb21waWxlciBkb2VzIG5vdCBzdXBwb3J0IFxgLWMnIGFuZCBcYC1vJyB0b2dldGhlci4gIElmIHlvdQorcmVwZWF0IHRoaXMgY29tcGlsYXRpb24sIGl0IG1heSBzdWNjZWVkLCBieSBjaGFuY2UsIGJ1dCB5b3UgaGFkIGJldHRlcgorYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKK2NvbXBpbGVyLiIKKworCSRydW4gJHJtICRyZW1vdmVsaXN0CisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICAjIEp1c3QgbW92ZSB0aGUgb2JqZWN0IGlmIG5lZWRlZAorICAgICAgaWYgdGVzdCAtbiAiJG91dHB1dF9vYmoiICYmIHRlc3QgIlgkb3V0cHV0X29iaiIgIT0gIlgkb2JqIjsgdGhlbgorCSRzaG93ICIkbXYgJG91dHB1dF9vYmogJG9iaiIKKwlpZiAkcnVuICRtdiAkb3V0cHV0X29iaiAkb2JqOyB0aGVuIDoKKwllbHNlCisJICBlcnJvcj0kPworCSAgJHJ1biAkcm0gJHJlbW92ZWxpc3QKKwkgIGV4aXQgJGVycm9yCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KKyAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCitub25fcGljX29iamVjdD0nJG9iam5hbWUnCisKK0VPRgorICAgIGVsc2UKKyAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KKyAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgorICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKKyMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCitub25fcGljX29iamVjdD1ub25lCisKK0VPRgorICAgIGZpCisKKyAgICAkcnVuICRtdiAiJHtsaWJvYmp9VCIgIiR7bGlib2JqfSIKKworICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgICAgICRydW4gJHJtICIkbG9ja2ZpbGUiCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIDs7CisKKyAgIyBsaWJ0b29sIGxpbmsgbW9kZQorICBsaW5rIHwgcmVsaW5rKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGxpbmsiCisgICAgY2FzZSAkaG9zdCBpbgorICAgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAorICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAorICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQorICAgICAgIyBmbGFnIGZvciBldmVyeSBsaWJ0b29sIGludm9jYXRpb24uCisgICAgICAjIGFsbG93X3VuZGVmaW5lZD1ubworCisgICAgICAjIEZJWE1FOiBVbmZvcnR1bmF0ZWx5LCB0aGVyZSBhcmUgcHJvYmxlbXMgd2l0aCB0aGUgYWJvdmUgd2hlbiB0cnlpbmcKKyAgICAgICMgdG8gbWFrZSBhIGRsbCB3aGljaCBoYXMgdW5kZWZpbmVkIHN5bWJvbHMsIGluIHdoaWNoIGNhc2Ugbm90CisgICAgICAjIGV2ZW4gYSBzdGF0aWMgbGlicmFyeSBpcyBidWlsdC4gIEZvciBub3csIHdlIG5lZWQgdG8gc3BlY2lmeQorICAgICAgIyAtbm8tdW5kZWZpbmVkIG9uIHRoZSBsaWJ0b29sIGxpbmsgbGluZSB3aGVuIHdlIGNhbiBiZSBjZXJ0YWluCisgICAgICAjIHRoYXQgYWxsIHN5bWJvbHMgYXJlIHNhdGlzZmllZCwgb3RoZXJ3aXNlIHdlIGdldCBhIHN0YXRpYyBsaWJyYXJ5LgorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICAqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcworICAgICAgOzsKKyAgICBlc2FjCisgICAgbGlidG9vbF9hcmdzPSIkbm9ub3B0IgorICAgIGJhc2VfY29tcGlsZT0iJG5vbm9wdCAkQCIKKyAgICBjb21waWxlX2NvbW1hbmQ9IiRub25vcHQiCisgICAgZmluYWxpemVfY29tbWFuZD0iJG5vbm9wdCIKKworICAgIGNvbXBpbGVfcnBhdGg9CisgICAgZmluYWxpemVfcnBhdGg9CisgICAgY29tcGlsZV9zaGxpYnBhdGg9CisgICAgZmluYWxpemVfc2hsaWJwYXRoPQorICAgIGNvbnZlbmllbmNlPQorICAgIG9sZF9jb252ZW5pZW5jZT0KKyAgICBkZXBsaWJzPQorICAgIG9sZF9kZXBsaWJzPQorICAgIGNvbXBpbGVyX2ZsYWdzPQorICAgIGxpbmtlcl9mbGFncz0KKyAgICBkbGxzZWFyY2hwYXRoPQorICAgIGxpYl9zZWFyY2hfcGF0aD1gcHdkYAorICAgIGluc3RfcHJlZml4X2Rpcj0KKworICAgIGF2b2lkX3ZlcnNpb249bm8KKyAgICBkbGZpbGVzPQorICAgIGRscHJlZmlsZXM9CisgICAgZGxzZWxmPW5vCisgICAgZXhwb3J0X2R5bmFtaWM9bm8KKyAgICBleHBvcnRfc3ltYm9scz0KKyAgICBleHBvcnRfc3ltYm9sc19yZWdleD0KKyAgICBnZW5lcmF0ZWQ9CisgICAgbGlib2Jqcz0KKyAgICBsdGxpYnM9CisgICAgbW9kdWxlPW5vCisgICAgbm9faW5zdGFsbD1ubworICAgIG9ianM9CisgICAgbm9uX3BpY19vYmplY3RzPQorICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQorICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubworICAgIHByZWxvYWQ9bm8KKyAgICBwcmV2PQorICAgIHByZXZhcmc9CisgICAgcmVsZWFzZT0KKyAgICBycGF0aD0KKyAgICB4cnBhdGg9CisgICAgcGVybV9ycGF0aD0KKyAgICB0ZW1wX3JwYXRoPQorICAgIHRocmVhZF9zYWZlPW5vCisgICAgdmluZm89CisgICAgdmluZm9fbnVtYmVyPW5vCisKKyAgICBmdW5jX2luZmVyX3RhZyAkYmFzZV9jb21waWxlCisKKyAgICAjIFdlIG5lZWQgdG8ga25vdyAtc3RhdGljLCB0byBnZXQgdGhlIHJpZ2h0IG91dHB1dCBmaWxlbmFtZXMuCisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYykKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1hbGwtc3RhdGljIjsgdGhlbgorCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIiAxPiYyCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCisJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKKwkgIGZpCisJICBwcmVmZXJfc3RhdGljX2xpYnM9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAteiAiJHBpY19mbGFnIiAmJiB0ZXN0IC1uICIkbGlua19zdGF0aWNfZmxhZyI7IHRoZW4KKwkgICAgZGxvcGVuX3NlbGY9JGRsb3Blbl9zZWxmX3N0YXRpYworCSAgZmkKKwkgIHByZWZlcl9zdGF0aWNfbGlicz1idWlsdAorCWZpCisJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJYnVpbGRfb2xkX2xpYnM9eWVzCisJYnJlYWsKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgU2VlIGlmIG91ciBzaGFyZWQgYXJjaGl2ZXMgZGVwZW5kIG9uIHN0YXRpYyBhcmNoaXZlcy4KKyAgICB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgYnVpbGRfb2xkX2xpYnM9eWVzCisKKyAgICAjIEdvIHRocm91Z2ggdGhlIGFyZ3VtZW50cywgdHJhbnNmb3JtaW5nIHRoZW0gb24gdGhlIHdheS4KKyAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJcWFyZz1cImAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYFwiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorCTs7CisgICAgICAqKSBxYXJnPSRhcmcgOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpYnRvb2xfYXJncz0iJGxpYnRvb2xfYXJncyAkcWFyZyIKKworICAgICAgIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRzIGFuIGFyZ3VtZW50LCBhc3NpZ24gaXQuCisgICAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KKwljYXNlICRwcmV2IGluCisJb3V0cHV0KQorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kIEBPVVRQVVRAIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgQE9VVFBVVEAiCisJICA7OworCWVzYWMKKworCWNhc2UgJHByZXYgaW4KKwlkbGZpbGVzfGRscHJlZmlsZXMpCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc3ltYm9sIG9iamVjdCBpbnRvIHRoZSBsaW5raW5nIGNvbW1hbmRzLgorCSAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgQFNZTUZJTEVAIgorCSAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCBAU1lNRklMRUAiCisJICAgIHByZWxvYWQ9eWVzCisJICBmaQorCSAgY2FzZSAkYXJnIGluCisJICAqLmxhIHwgKi5sbykgOzsgICMgV2UgaGFuZGxlIHRoZXNlIGNhc2VzIGJlbG93LgorCSAgZm9yY2UpCisJICAgIGlmIHRlc3QgIiRkbHNlbGYiID0gbm87IHRoZW4KKwkgICAgICBkbHNlbGY9bmVlZGxlc3MKKwkgICAgICBleHBvcnRfZHluYW1pYz15ZXMKKwkgICAgZmkKKwkgICAgcHJldj0KKwkgICAgY29udGludWUKKwkgICAgOzsKKwkgIHNlbGYpCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KKwkgICAgICBkbHNlbGY9eWVzCisJICAgIGVsaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlcyAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiICE9IHllczsgdGhlbgorCSAgICAgIGRsc2VsZj15ZXMKKwkgICAgZWxzZQorCSAgICAgIGRsc2VsZj1uZWVkbGVzcworCSAgICAgIGV4cG9ydF9keW5hbWljPXllcworCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRhcmciCisJICAgIGVsc2UKKwkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgICBmaQorCSAgICBwcmV2PQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwlleHBzeW1zKQorCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCisJICBpZiB0ZXN0ICEgLWYgIiRhcmciOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IHN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlleHBzeW1zX3JlZ2V4KQorCSAgZXhwb3J0X3N5bWJvbHNfcmVnZXg9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJaW5zdF9wcmVmaXgpCisJICBpbnN0X3ByZWZpeF9kaXI9IiRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJcHJlY2lvdXNfcmVnZXgpCisJICBwcmVjaW91c19maWxlc19yZWdleD0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlyZWxlYXNlKQorCSAgcmVsZWFzZT0iLSRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJb2JqZWN0bGlzdCkKKwkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCisJICAgIHNhdmVfYXJnPSRhcmcKKwkgICAgbW9yZWFyZ3M9CisJICAgIGZvciBmaWwgaW4gYGNhdCAkc2F2ZV9hcmdgCisJICAgIGRvCisjCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmICgke1NFRH0gLWUgJzJxJyAkYXJnIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJcGljX29iamVjdD0KKwkJbm9uX3BpY19vYmplY3Q9CisKKwkJIyBSZWFkIHRoZSAubG8gZmlsZQorCQkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwkJY2FzZSAkYXJnIGluCisJCSovKiB8ICpcXCopIC4gJGFyZyA7OworCQkqKSAuIC4vJGFyZyA7OworCQllc2FjCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IFwKKwkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmIFwKKwkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KKwkJICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIgMT4mMgorCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCXhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCQlpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgorCQkgIHhkaXI9CisJCWVsc2UKKwkJICB4ZGlyPSIkeGRpci8iCisJCWZpCisKKwkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCisKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCisJCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQkgICAgICBwcmV2PQorCQkgICAgICBjb250aW51ZQorCQkgICAgZWxzZQorCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgorCQkgICAgICBwcmV2PWRscHJlZmlsZXMKKwkJICAgIGZpCisJCSAgZmkKKworCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgorCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKKwkJICBhcmc9IiRwaWNfb2JqZWN0IgorCQlmaQorCisJCSMgTm9uLVBJQyBvYmplY3QuCisJCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCisJCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgorCisJCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGVsc2UKKwkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCisJCWlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisJCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIgMT4mMgorCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCQllbHNlCisJCSAgIyBEcnktcnVuIGNhc2UuCisKKwkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorCQkgIHhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCQkgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCisJCSAgICB4ZGlyPQorCQkgIGVsc2UKKwkJICAgIHhkaXI9IiR4ZGlyLyIKKwkJICBmaQorCisJCSAgcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHtvYmpkaXJ9LyR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCQkgIG5vbl9waWNfb2JqZWN0PWAkZWNobyAiWCR7eGRpcn0ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKKwkJICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKKwkJICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCQlmaQorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGVsc2UKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogbGluayBpbnB1dCBmaWxlIFxgJHNhdmVfYXJnJyBkb2VzIG5vdCBleGlzdCIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmaQorCSAgYXJnPSRzYXZlX2FyZworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OworCXJwYXRoIHwgeHJwYXRoKQorCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJICBjYXNlICRhcmcgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKKwkgICopCisJICAgICRlY2hvICIkbW9kZW5hbWU6IG9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICA7OworCSAgZXNhYworCSAgaWYgdGVzdCAiJHByZXYiID0gcnBhdGg7IHRoZW4KKwkgICAgY2FzZSAiJHJwYXRoICIgaW4KKwkgICAgKiIgJGFyZyAiKikgOzsKKwkgICAgKikgcnBhdGg9IiRycGF0aCAkYXJnIiA7OworCSAgICBlc2FjCisJICBlbHNlCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwl4Y29tcGlsZXIpCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkcWFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJeGxpbmtlcikKKwkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisJICBwcmV2PQorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR3bCRxYXJnIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHdsJHFhcmciCisJICBjb250aW51ZQorCSAgOzsKKwl4Y2NsaW5rZXIpCisJICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgcHJldj0KKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkcWFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRxYXJnIgorCSAgY29udGludWUKKwkgIDs7CisJc2hyZXh0KQorICAJICBzaHJleHRfY21kcz0iJGFyZyIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwlkYXJ3aW5fZnJhbWV3b3JrfGRhcndpbl9mcmFtZXdvcmtfc2tpcCkKKwkgIHRlc3QgIiRwcmV2IiA9ICJkYXJ3aW5fZnJhbWV3b3JrIiAmJiBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKKwkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJICBwcmV2PQorCSAgY29udGludWUKKwkgIDs7CisJKikKKwkgIGV2YWwgIiRwcmV2PVwiXCRhcmdcIiIKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKKwllc2FjCisgICAgICBmaSAjIHRlc3QgLW4gIiRwcmV2IgorCisgICAgICBwcmV2YXJnPSIkYXJnIgorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1hbGwtc3RhdGljKQorCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgorCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRsaW5rX3N0YXRpY19mbGFnIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCisJZmkKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1hbGxvdy11bmRlZmluZWQpCisJIyBGSVhNRTogcmVtb3ZlIHRoaXMgZmxhZyBzb21ldGltZSBpbiB0aGUgZnV0dXJlLgorCSRlY2hvICIkbW9kZW5hbWU6IFxgLWFsbG93LXVuZGVmaW5lZCcgaXMgZGVwcmVjYXRlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IiAxPiYyCisJY29udGludWUKKwk7OworCisgICAgICAtYXZvaWQtdmVyc2lvbikKKwlhdm9pZF92ZXJzaW9uPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLWRsb3BlbikKKwlwcmV2PWRsZmlsZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1kbHByZW9wZW4pCisJcHJldj1kbHByZWZpbGVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LWR5bmFtaWMpCisJZXhwb3J0X2R5bmFtaWM9eWVzCisJY29udGludWUKKwk7OworCisgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiBtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJZmkKKwlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1leHBvcnQtc3ltYm9scyI7IHRoZW4KKwkgIHByZXY9ZXhwc3ltcworCWVsc2UKKwkgIHByZXY9ZXhwc3ltc19yZWdleAorCWZpCisJY29udGludWUKKwk7OworCisgICAgICAtZnJhbWV3b3JrfC1hcmNofC1pc3lzcm9vdCkKKwljYXNlICIgJENDICIgaW4KKwkgICoiICR7YXJnfSAkezF9ICIqIHwgKiIgJHthcmd9CSR7MX0gIiopCisJCXByZXY9ZGFyd2luX2ZyYW1ld29ya19za2lwIDs7CisJICAqKSBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJICAgICBwcmV2PWRhcndpbl9mcmFtZXdvcmsgOzsKKwllc2FjCisJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1pbnN0LXByZWZpeC1kaXIpCisJcHJldj1pbnN0X3ByZWZpeAorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBUaGUgbmF0aXZlIElSSVggbGlua2VyIHVuZGVyc3RhbmRzIC1MQU5HOiosIC1MSVNUOiogYW5kIC1MTk86KgorICAgICAgIyBzbywgaWYgd2Ugc2VlIHRoZXNlIGZsYWdzIGJlIGNhcmVmdWwgbm90IHRvIHRyZWF0IHRoZW0gbGlrZSAtTAorICAgICAgLUxbQS1aXVtBLVpdKjoqKQorCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCisJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKKwkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgorCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwkgIDs7CisJZXNhYworCWNvbnRpbnVlCisJOzsKKworICAgICAgLUwqKQorCWRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL14tTC8vJ2AKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRkaXIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CisJKikKKwkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIgMT4mMgorCSAgICBhYnNkaXI9IiRkaXIiCisJICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkZGlyIgorCSAgZmkKKwkgIGRpcj0iJGFic2RpciIKKwkgIDs7CisJZXNhYworCWNhc2UgIiRkZXBsaWJzICIgaW4KKwkqIiAtTCRkaXIgIiopIDs7CisJKikKKwkgIGRlcGxpYnM9IiRkZXBsaWJzIC1MJGRpciIKKwkgIGxpYl9zZWFyY2hfcGF0aD0iJGxpYl9zZWFyY2hfcGF0aCAkZGlyIgorCSAgOzsKKwllc2FjCisJY2FzZSAkaG9zdCBpbgorCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQorCSAgdGVzdGJpbmRpcj1gJGVjaG8gIlgkZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JGRpcjoiKikgOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiRkaXIiOzsKKwkgIGVzYWMKKwkgIGNhc2UgOiRkbGxzZWFyY2hwYXRoOiBpbgorCSAgKiI6JHRlc3RiaW5kaXI6IiopIDs7CisJICAqKSBkbGxzZWFyY2hwYXRoPSIkZGxsc2VhcmNocGF0aDokdGVzdGJpbmRpciI7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJY29udGludWUKKwk7OworCisgICAgICAtbCopCisJaWYgdGVzdCAiWCRhcmciID0gIlgtbGMiIHx8IHRlc3QgIlgkYXJnIiA9ICJYLWxtIjsgdGhlbgorCSAgY2FzZSAkaG9zdCBpbgorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLWJlb3MqKQorCSAgICAjIFRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIEMgb3IgbWF0aCBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLW9zMiopCisJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBsaWJyYXJ5IChhcyBzdWNoKQorCSAgICB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgJiYgY29udGludWUKKwkgICAgOzsKKwkgICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICAjIERvIG5vdCBpbmNsdWRlIGxpYmMgZHVlIHRvIHVzIGhhdmluZyBsaWJjL2xpYmNfci4KKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBhbmQgbWF0aCBsaWJyYXJpZXMgYXJlIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1mcmFtZXdvcmsgU3lzdGVtIgorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCisJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKKwkgICAgdGVzdCAiWCRhcmciID0gIlgtbGMiICYmIGNvbnRpbnVlCisJICAgIDs7CisJICBlc2FjCisJZWxpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sY19yIjsgdGhlbgorCSBjYXNlICRob3N0IGluCisJICotKi1vcGVuYnNkKiB8ICotKi1mcmVlYnNkKiB8ICotKi1kcmFnb25mbHkqKQorCSAgICMgRG8gbm90IGluY2x1ZGUgbGliY19yIGRpcmVjdGx5LCB1c2UgLXB0aHJlYWQgZmxhZy4KKwkgICBjb250aW51ZQorCSAgIDs7CisJIGVzYWMKKwlmaQorCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAtbW9kZWwpCisJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgorCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZSkKKwljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1tb2R1bGUpCisJbW9kdWxlPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKKyAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCisgICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCisgICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgorICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKKyAgICAgICMgLW0qIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcGlsZXIgYXJncyBmb3IgR0NDCisgICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKKyAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCisgICAgICAjIC1wZyBwYXNzIHRocm91Z2ggcHJvZmlsaW5nIGZsYWcgZm9yIEdDQworICAgICAgIyBAZmlsZSBHQ0MgcmVzcG9uc2UgZmlsZXMKKyAgICAgIC02NHwtbWlwc1swLTldfC1yWzAtOV1bMC05XSp8LXhhcmNoPSp8LXh0YXJnZXQ9KnwrREEqfCtERCp8LXEqfC1tKnwtcGd8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfEAqKQorCisJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCisJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisJY2FzZSAkYXJnIGluCisJKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJICBhcmc9IlwiJGFyZ1wiIgorCSAgOzsKKwllc2FjCisgICAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgorICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorICAgICAgICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCisgICAgICAgIGNvbnRpbnVlCisgICAgICAgIDs7CisKKyAgICAgIC1zaHJleHQpCisJcHJldj1zaHJleHQKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby1mYXN0LWluc3RhbGwpCisJZmFzdF9pbnN0YWxsPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtbm8taW5zdGFsbCkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKKwkgICMgaW4gb3JkZXIgZm9yIHRoZSBsb2FkZXIgdG8gZmluZCBhbnkgZGxscyBpdCBuZWVkcy4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLW5vLWluc3RhbGwnIGlzIGlnbm9yZWQgZm9yICRob3N0IiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBhc3N1bWluZyBcYC1uby1mYXN0LWluc3RhbGwnIGluc3RlYWQiIDE+JjIKKwkgIGZhc3RfaW5zdGFsbD1ubworCSAgOzsKKwkqKSBub19pbnN0YWxsPXllcyA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1uby11bmRlZmluZWQpCisJYWxsb3dfdW5kZWZpbmVkPW5vCisJY29udGludWUKKwk7OworCisgICAgICAtb2JqZWN0bGlzdCkKKwlwcmV2PW9iamVjdGxpc3QKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1vKSBwcmV2PW91dHB1dCA7OworCisgICAgICAtcHJlY2lvdXMtZmlsZXMtcmVnZXgpCisJcHJldj1wcmVjaW91c19yZWdleAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXJlbGVhc2UpCisJcHJldj1yZWxlYXNlCisJY29udGludWUKKwk7OworCisgICAgICAtcnBhdGgpCisJcHJldj1ycGF0aAorCWNvbnRpbnVlCisJOzsKKworICAgICAgLVIpCisJcHJldj14cnBhdGgKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1SKikKKwlkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCisJY2FzZSAkZGlyIGluCisJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKwljYXNlICIkeHJwYXRoICIgaW4KKwkqIiAkZGlyICIqKSA7OworCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCWVzYWMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1zdGF0aWMpCisJIyBUaGUgZWZmZWN0cyBvZiAtc3RhdGljIGFyZSBkZWZpbmVkIGluIGEgcHJldmlvdXMgbG9vcC4KKwkjIFdlIHVzZWQgdG8gZG8gdGhlIHNhbWUgYXMgLWFsbC1zdGF0aWMgb24gcGxhdGZvcm1zIHRoYXQKKwkjIGRpZG4ndCBoYXZlIGEgUElDIGZsYWcsIGJ1dCB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoZSBlZmZlY3RzCisJIyB3b3VsZCBiZSBlcXVpdmFsZW50IHdhcyB3cm9uZy4gIEl0IHdvdWxkIGJyZWFrIG9uIGF0IGxlYXN0CisJIyBEaWdpdGFsIFVuaXggYW5kIEFJWC4KKwljb250aW51ZQorCTs7CisKKyAgICAgIC10aHJlYWQtc2FmZSkKKwl0aHJlYWRfc2FmZT15ZXMKKwljb250aW51ZQorCTs7CisKKyAgICAgIC12ZXJzaW9uLWluZm8pCisJcHJldj12aW5mbworCWNvbnRpbnVlCisJOzsKKyAgICAgIC12ZXJzaW9uLW51bWJlcikKKwlwcmV2PXZpbmZvCisJdmluZm9fbnVtYmVyPXllcworCWNvbnRpbnVlCisJOzsKKworICAgICAgLVdjLCopCisJYXJncz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiAtZSAncy9eLVdjLC8vJ2AKKwlhcmc9CisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCisJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGNhc2UgJGZsYWcgaW4KKwkgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisJICAgIGZsYWc9IlwiJGZsYWdcIiIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGFyZz0iJGFyZyAkd2wkZmxhZyIKKwkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZsYWciCisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICJzL14gLy8iYAorCTs7CisKKyAgICAgIC1XbCwqKQorCWFyZ3M9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgLWUgJ3MvXi1XbCwvLydgCisJYXJnPQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJworCWZvciBmbGFnIGluICRhcmdzOyBkbworCSAgSUZTPSIkc2F2ZV9pZnMiCisJICBjYXNlICRmbGFnIGluCisJICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCSAgICBmbGFnPSJcIiRmbGFnXCIiCisJICAgIDs7CisJICBlc2FjCisJICBhcmc9IiRhcmcgJHdsJGZsYWciCisJICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmbGFnIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWRvbmUKKwlJRlM9IiRzYXZlX2lmcyIKKwlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAicy9eIC8vImAKKwk7OworCisgICAgICAtWGNvbXBpbGVyKQorCXByZXY9eGNvbXBpbGVyCisJY29udGludWUKKwk7OworCisgICAgICAtWGxpbmtlcikKKwlwcmV2PXhsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgIC1YQ0NsaW5rZXIpCisJcHJldj14Y2NsaW5rZXIKKwljb250aW51ZQorCTs7CisKKyAgICAgICMgU29tZSBvdGhlciBjb21waWxlciBmbGFnLgorICAgICAgLSogfCArKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKwljYXNlICRhcmcgaW4KKwkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgIGFyZz0iXCIkYXJnXCIiCisJICA7OworCWVzYWMKKwk7OworCisgICAgICAqLiRvYmpleHQpCisJIyBBIHN0YW5kYXJkIG9iamVjdC4KKwlvYmpzPSIkb2JqcyAkYXJnIgorCTs7CisKKyAgICAgICoubG8pCisJIyBBIGxpYnRvb2wtY29udHJvbGxlZCBvYmplY3QuCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBvYmplY3QuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRhcmcgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgcGljX29iamVjdD0KKwkgIG5vbl9waWNfb2JqZWN0PQorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwkgIGNhc2UgJGFyZyBpbgorCSAgKi8qIHwgKlxcKikgLiAkYXJnIDs7CisJICAqKSAuIC4vJGFyZyA7OworCSAgZXNhYworCisJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgXAorCSAgICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJiBcCisJICAgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisKKwkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKwkgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCisJICAgIHhkaXI9CisgCSAgZWxzZQorCSAgICB4ZGlyPSIkeGRpci8iCisJICBmaQorCisJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCisJCWRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgorCQlwcmV2PQorCQljb250aW51ZQorCSAgICAgIGVsc2UKKwkJIyBJZiBsaWJ0b29sIG9iamVjdHMgYXJlIHVuc3VwcG9ydGVkLCB0aGVuIHdlIG5lZWQgdG8gcHJlbG9hZC4KKwkJcHJldj1kbHByZWZpbGVzCisJICAgICAgZmkKKwkgICAgZmkKKworCSAgICAjIENIRUNLIE1FOiAgSSB0aGluayBJIGJ1c3RlZCB0aGlzLiAgLU9zc2FtYQorCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorCSAgICAgIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRwaWNfb2JqZWN0IgorCSAgICAgIHByZXY9CisJICAgIGZpCisKKwkgICAgIyBBIFBJQyBvYmplY3QuCisJICAgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgorCSAgICBhcmc9IiRwaWNfb2JqZWN0IgorCSAgZmkKKworCSAgIyBOb24tUElDIG9iamVjdC4KKwkgIGlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCSAgICBub25fcGljX29iamVjdD0iJHhkaXIkbm9uX3BpY19vYmplY3QiCisKKwkgICAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0CisJICAgIG5vbl9waWNfb2JqZWN0cz0iJG5vbl9waWNfb2JqZWN0cyAkbm9uX3BpY19vYmplY3QiCisJICAgIGlmIHRlc3QgLXogIiRwaWNfb2JqZWN0IiB8fCB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lIDsgdGhlbgorCSAgICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCSAgICBmaQorCSAgZWxzZQorCSAgICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJICAgICMgJHhkaXIgd2FzIHByZXBlbmRlZCB0byAkcGljX29iamVjdCBhYm92ZS4KKwkgICAgbm9uX3BpY19vYmplY3Q9IiRwaWNfb2JqZWN0IgorCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwllbHNlCisJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiIDE+JjIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBlbHNlCisJICAgICMgRHJ5LXJ1biBjYXNlLgorCisJICAgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJICAgIHhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCSAgICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgorCSAgICAgIHhkaXI9CisJICAgIGVsc2UKKwkgICAgICB4ZGlyPSIkeGRpci8iCisJICAgIGZpCisKKwkgICAgcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHtvYmpkaXJ9LyR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCSAgICBub25fcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCisJICAgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgorCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICouJGxpYmV4dCkKKwkjIEFuIGFyY2hpdmUuCisJZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlvbGRfZGVwbGlicz0iJG9sZF9kZXBsaWJzICRhcmciCisJY29udGludWUKKwk7OworCisgICAgICAqLmxhKQorCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KKworCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KKwkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgorCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJICAjIFRoZSBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxwcmVvcGVuLgorCSAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgIHByZXY9CisJZWxzZQorCSAgZGVwbGlicz0iJGRlcGxpYnMgJGFyZyIKKwlmaQorCWNvbnRpbnVlCisJOzsKKworICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGFyZ3VtZW50LgorICAgICAgKikKKwkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKKwkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgorCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKwljYXNlICRhcmcgaW4KKwkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKwkgIGFyZz0iXCIkYXJnXCIiCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYyAjIGFyZworCisgICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KKyAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisJZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKyAgICAgIGZpCisgICAgZG9uZSAjIGFyZ3VtZW50IHBhcnNpbmcgbG9vcAorCisgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICBpZiB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzICYmIHRlc3QgLW4gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiOyB0aGVuCisgICAgICBldmFsIGFyZz1cIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgorICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCisgICAgICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorICAgIGZpCisKKyAgICBvbGRsaWJzPQorICAgICMgY2FsY3VsYXRlIHRoZSBuYW1lIG9mIHRoZSBmaWxlLCB3aXRob3V0IGl0cyBkaXJlY3RvcnkKKyAgICBvdXRwdXRuYW1lPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKyAgICBsaWJvYmpzX3NhdmU9IiRsaWJvYmpzIgorCisgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisgICAgICAjIGdldCB0aGUgZGlyZWN0b3JpZXMgbGlzdGVkIGluICRzaGxpYnBhdGhfdmFyCisgICAgICBldmFsIHNobGliX3NlYXJjaF9wYXRoPVxgXCRlY2hvIFwiWFwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkWHNlZCAtZSBcJ3MvOi8gL2dcJ1xgCisgICAgZWxzZQorICAgICAgc2hsaWJfc2VhcmNoX3BhdGg9CisgICAgZmkKKyAgICBldmFsIHN5c19saWJfc2VhcmNoX3BhdGg9XCIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXCIKKyAgICBldmFsIHN5c19saWJfZGxzZWFyY2hfcGF0aD1cIiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY1wiCisKKyAgICBvdXRwdXRfb2JqZGlyPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgICBpZiB0ZXN0ICJYJG91dHB1dF9vYmpkaXIiID0gIlgkb3V0cHV0IjsgdGhlbgorICAgICAgb3V0cHV0X29iamRpcj0iJG9iamRpciIKKyAgICBlbHNlCisgICAgICBvdXRwdXRfb2JqZGlyPSIkb3V0cHV0X29iamRpci8kb2JqZGlyIgorICAgIGZpCisgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCisgICAgaWYgdGVzdCAhIC1kICIkb3V0cHV0X29iamRpciI7IHRoZW4KKyAgICAgICRzaG93ICIkbWtkaXIgJG91dHB1dF9vYmpkaXIiCisgICAgICAkcnVuICRta2RpciAkb3V0cHV0X29iamRpcgorICAgICAgZXhpdF9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkb3V0cHV0X29iamRpciI7IHRoZW4KKwlleGl0ICRleGl0X3N0YXR1cworICAgICAgZmkKKyAgICBmaQorCisgICAgIyBEZXRlcm1pbmUgdGhlIHR5cGUgb2Ygb3V0cHV0CisgICAgY2FzZSAkb3V0cHV0IGluCisgICAgIiIpCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIG91dHB1dCBmaWxlIiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgOzsKKyAgICAqLiRsaWJleHQpIGxpbmttb2RlPW9sZGxpYiA7OworICAgICoubG8gfCAqLiRvYmpleHQpIGxpbmttb2RlPW9iaiA7OworICAgICoubGEpIGxpbmttb2RlPWxpYiA7OworICAgICopIGxpbmttb2RlPXByb2cgOzsgIyBBbnl0aGluZyBlbHNlIHNob3VsZCBiZSBhIHByb2dyYW0uCisgICAgZXNhYworCisgICAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKikKKyAgICAgICMgZG9uJ3QgZWxpbWluYXRlIGR1cGxpY2F0aW9ucyBpbiAkcG9zdGRlcHMgYW5kICRwcmVkZXBzCisgICAgICBkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9eWVzCisgICAgICA7OworICAgICopCisgICAgICBkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM9JGR1cGxpY2F0ZV9kZXBzCisgICAgICA7OworICAgIGVzYWMKKyAgICBzcGVjaWFsZGVwbGlicz0KKworICAgIGxpYnM9CisgICAgIyBGaW5kIGFsbCBpbnRlcmRlcGVuZGVudCBkZXBsaWJzIGJ5IHNlYXJjaGluZyBmb3IgbGlicmFyaWVzCisgICAgIyB0aGF0IGFyZSBsaW5rZWQgbW9yZSB0aGFuIG9uY2UgKGUuZy4gLWxhIC1sYiAtbGEpCisgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKyAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCWNhc2UgIiRsaWJzICIgaW4KKwkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGxpYnM9IiRsaWJzICRkZXBsaWIiCisgICAgZG9uZQorCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorICAgICAgbGlicz0iJHByZWRlcHMgJGxpYnMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAkcG9zdGRlcHMiCisKKyAgICAgICMgQ29tcHV0ZSBsaWJyYXJpZXMgdGhhdCBhcmUgbGlzdGVkIG1vcmUgdGhhbiBvbmNlIGluICRwcmVkZXBzCisgICAgICAjICRwb3N0ZGVwcyBhbmQgbWFyayB0aGVtIGFzIHNwZWNpYWwgKGkuZS4sIHdob3NlIGR1cGxpY2F0ZXMgYXJlCisgICAgICAjIG5vdCB0byBiZSBlbGltaW5hdGVkKS4KKyAgICAgIHByZV9wb3N0X2RlcHM9CisgICAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJZm9yIHByZV9wb3N0X2RlcCBpbiAkcHJlZGVwcyAkcG9zdGRlcHM7IGRvCisJICBjYXNlICIkcHJlX3Bvc3RfZGVwcyAiIGluCisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRwcmVfcG9zdF9kZXBzIiA7OworCSAgZXNhYworCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwlkb25lCisgICAgICBmaQorICAgICAgcHJlX3Bvc3RfZGVwcz0KKyAgICBmaQorCisgICAgZGVwbGlicz0KKyAgICBuZXdkZXBlbmRlbmN5X2xpYnM9CisgICAgbmV3bGliX3NlYXJjaF9wYXRoPQorICAgIG5lZWRfcmVsaW5rPW5vICMgd2hldGhlciB3ZSdyZSBsaW5raW5nIGFueSB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfZGVwbGlicz0gIyBub3QtaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgICAgY2FzZSAkbGlua21vZGUgaW4KKyAgICBsaWIpCisJcGFzc2VzPSJjb252IGxpbmsiCisJZm9yIGZpbGUgaW4gJGRsZmlsZXMgJGRscHJlZmlsZXM7IGRvCisJICBjYXNlICRmaWxlIGluCisJICAqLmxhKSA7OworCSAgKikKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogbGlicmFyaWVzIGNhbiBcYC1kbG9wZW4nIG9ubHkgbGlidG9vbCBsaWJyYXJpZXM6ICRmaWxlIiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICA7OworCSAgZXNhYworCWRvbmUKKwk7OworICAgIHByb2cpCisJY29tcGlsZV9kZXBsaWJzPQorCWZpbmFsaXplX2RlcGxpYnM9CisJYWxsZGVwbGlicz1ubworCW5ld2RsZmlsZXM9CisJbmV3ZGxwcmVmaWxlcz0KKwlwYXNzZXM9ImNvbnYgc2NhbiBkbG9wZW4gZGxwcmVvcGVuIGxpbmsiCisJOzsKKyAgICAqKSAgcGFzc2VzPSJjb252IgorCTs7CisgICAgZXNhYworICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAorCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KKwlsaWJzPSIkZGVwbGlicyIKKwlkZXBsaWJzPQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJY2FzZSAkcGFzcyBpbgorCWRsb3BlbikgbGlicz0iJGRsZmlsZXMiIDs7CisJZGxwcmVvcGVuKSBsaWJzPSIkZGxwcmVmaWxlcyIgOzsKKwlsaW5rKSBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUgJGRlcGVuZGVuY3lfbGlicyIgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxvcGVuOyB0aGVuCisJIyBDb2xsZWN0IGRscHJlb3BlbmVkIGxpYnJhcmllcworCXNhdmVfZGVwbGlicz0iJGRlcGxpYnMiCisJZGVwbGlicz0KKyAgICAgIGZpCisgICAgICBmb3IgZGVwbGliIGluICRsaWJzOyBkbworCWxpYj0KKwlmb3VuZD1ubworCWNhc2UgJGRlcGxpYiBpbgorCS1tdHwtbXRocmVhZHN8LWt0aHJlYWR8LUt0aHJlYWR8LXB0aHJlYWR8LXB0aHJlYWRzfC0tdGhyZWFkLXNhZmUpCisJICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYiIKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwktbCopCisJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIgMT4mMgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIG5hbWU9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLWwvLydgCisJICBmb3Igc2VhcmNoZGlyIGluICRuZXdsaWJfc2VhcmNoX3BhdGggJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJICAgIGZvciBzZWFyY2hfZXh0IGluIC5sYSAkc3RkX3NocmV4dCAuc28gLmE7IGRvCisJICAgICAgIyBTZWFyY2ggdGhlIGxpYnRvb2wgbGlicmFyeQorCSAgICAgIGxpYj0iJHNlYXJjaGRpci9saWIke25hbWV9JHtzZWFyY2hfZXh0fSIKKwkgICAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCQlpZiB0ZXN0ICIkc2VhcmNoX2V4dCIgPSAiLmxhIjsgdGhlbgorCQkgIGZvdW5kPXllcworCQllbHNlCisJCSAgZm91bmQ9bm8KKwkJZmkKKwkJYnJlYWsgMgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGRvbmUKKwkgIGlmIHRlc3QgIiRmb3VuZCIgIT0geWVzOyB0aGVuCisJICAgICMgZGVwbGliIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGxpYnRvb2wgbGlicmFyeQorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgZWxzZSAjIGRlcGxpYiBpcyBhIGxpYnRvb2wgbGlicmFyeQorCSAgICAjIElmICRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMgJiYgJGRlcGxpYiBpcyBhIHN0ZGxpYiwKKwkgICAgIyBXZSBuZWVkIHRvIGRvIHNvbWUgc3BlY2lhbCB0aGluZ3MgaGVyZSwgYW5kIG5vdCBsYXRlci4KKwkgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopCisJCWlmICgke1NFRH0gLWUgJzJxJyAkbGliIHwKKyAgICAgICAgICAgICAgICAgICAgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJICBsaWJyYXJ5X25hbWVzPQorCQkgIG9sZF9saWJyYXJ5PQorCQkgIGNhc2UgJGxpYiBpbgorCQkgICovKiB8ICpcXCopIC4gJGxpYiA7OworCQkgICopIC4gLi8kbGliIDs7CisJCSAgZXNhYworCQkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkJICAgIGxsPSIkbCIKKwkJICBkb25lCisJCSAgaWYgdGVzdCAiWCRsbCIgPSAiWCRvbGRfbGlicmFyeSIgOyB0aGVuICMgb25seSBzdGF0aWMgdmVyc2lvbiBhdmFpbGFibGUKKwkJICAgIGZvdW5kPW5vCisJCSAgICBsYWRpcj1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJCSAgICB0ZXN0ICJYJGxhZGlyIiA9ICJYJGxpYiIgJiYgbGFkaXI9Ii4iCisJCSAgICBsaWI9JGxhZGlyLyRvbGRfbGlicmFyeQorCQkgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCQkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCQkgICAgZWxzZQorCQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCQkgICAgICB0ZXN0ICIkbGlua21vZGUiID0gbGliICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCQkgICAgZmkKKwkJICAgIGNvbnRpbnVlCisJCSAgZmkKKwkJZmkKKwkgICAgICAgIDs7CisJICAgICAgKikgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisJICBmaQorCSAgOzsgIyAtbAorCS1MKikKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIHRlc3QgIiRwYXNzIiA9IGNvbnYgJiYgY29udGludWUKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgICBjb250aW51ZQorCSAgICBmaQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBzY2FuOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGZpCisJICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgCisJICAgIDs7CisJICAqKQorCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIiAxPiYyCisJICAgIDs7CisJICBlc2FjICMgbGlua21vZGUKKwkgIGNvbnRpbnVlCisJICA7OyAjIC1MCisJLVIqKQorCSAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCSAgICBkaXI9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJICAgICMgTWFrZSBzdXJlIHRoZSB4cnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCisJICAgIGNhc2UgIiR4cnBhdGggIiBpbgorCSAgICAqIiAkZGlyICIqKSA7OworCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGRpciIgOzsKKwkgICAgZXNhYworCSAgZmkKKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBjb250aW51ZQorCSAgOzsKKwkqLmxhKSBsaWI9IiRkZXBsaWIiIDs7CisJKi4kbGliZXh0KQorCSAgaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBjb250aW51ZQorCSAgZmkKKwkgIGNhc2UgJGxpbmttb2RlIGluCisJICBsaWIpCisJICAgIHZhbGlkX2FfbGliPW5vCisJICAgIGNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCisJICAgICAgbWF0Y2hfcGF0dGVybiopCisJCXNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2QKKwkgICAgICAgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDIgXCguKlwpImAKKwkJaWYgZXZhbCAkZWNobyBcIiRkZXBsaWJcIiAyPi9kZXYvbnVsbCBcCisJCSAgICB8ICRTRUQgMTBxIFwKKwkJICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICB2YWxpZF9hX2xpYj15ZXMKKwkJZmkKKwkJOzsKKwkgICAgICBwYXNzX2FsbCkKKwkJdmFsaWRfYV9saWI9eWVzCisJCTs7CisgICAgICAgICAgICBlc2FjCisJICAgIGlmIHRlc3QgIiR2YWxpZF9hX2xpYiIgIT0geWVzOyB0aGVuCisJICAgICAgJGVjaG8KKwkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IFRyeWluZyB0byBsaW5rIHdpdGggc3RhdGljIGxpYiBhcmNoaXZlICRkZXBsaWIuIgorCSAgICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJICAgICAgJGVjaG8gIioqKiBiZWNhdXNlIHRoZSBmaWxlIGV4dGVuc2lvbnMgLiRsaWJleHQgb2YgdGhpcyBhcmd1bWVudCBtYWtlcyBtZSBiZWxpZXZlIgorCSAgICAgICRlY2hvICIqKiogdGhhdCBpdCBpcyBqdXN0IGEgc3RhdGljIGFyY2hpdmUgdGhhdCBJIHNob3VsZCBub3QgdXNlZCBoZXJlLiIKKwkgICAgZWxzZQorCSAgICAgICRlY2hvCisJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIgorCSAgICAgICRlY2hvICIqKiogc3RhdGljIGxpYnJhcnkgJGRlcGxpYiBpcyBub3QgcG9ydGFibGUhIgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGZpCisJICAgIGNvbnRpbnVlCisJICAgIDs7CisJICBwcm9nKQorCSAgICBpZiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBmaQorCSAgICBjb250aW51ZQorCSAgICA7OworCSAgZXNhYyAjIGxpbmttb2RlCisJICA7OyAjICouJGxpYmV4dAorCSoubG8gfCAqLiRvYmpleHQpCisJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCisJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGRscHJlb3BlbiB8fCB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgICAgIyBJZiB0aGVyZSBpcyBubyBkbG9wZW4gc3VwcG9ydCBvciB3ZSdyZSBsaW5raW5nIHN0YXRpY2FsbHksCisJICAgICAgIyB3ZSBuZWVkIHRvIHByZWxvYWQuCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRlcGxpYiIKKwkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGRlcGxpYiIKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKKwklREVQTElCUyUpCisJICBhbGxkZXBsaWJzPXllcworCSAgY29udGludWUKKwkgIDs7CisJZXNhYyAjIGNhc2UgJGRlcGxpYgorCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIENoZWNrIHRvIHNlZSB0aGF0IHRoaXMgcmVhbGx5IGlzIGEgbGlidG9vbCBhcmNoaXZlLgorCWlmICgke1NFRH0gLWUgJzJxJyAkbGliIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJbGFkaXI9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCXRlc3QgIlgkbGFkaXIiID0gIlgkbGliIiAmJiBsYWRpcj0iLiIKKworCWRsbmFtZT0KKwlkbG9wZW49CisJZGxwcmVvcGVuPQorCWxpYmRpcj0KKwlsaWJyYXJ5X25hbWVzPQorCW9sZF9saWJyYXJ5PQorCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCisJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCisJaW5zdGFsbGVkPXllcworCXNob3VsZG5vdGxpbms9bm8KKwlhdm9pZHRlbXBycGF0aD0KKworCisJIyBSZWFkIHRoZSAubGEgZmlsZQorCWNhc2UgJGxpYiBpbgorCSovKiB8ICpcXCopIC4gJGxpYiA7OworCSopIC4gLi8kbGliIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsbGluayIgfHwKKwkgICB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiIgfHwKKwkgICB7IHRlc3QgIiRsaW5rbW9kZSIgIT0gcHJvZyAmJiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYjsgfTsgdGhlbgorCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZGxmaWxlcz0iJGRsZmlsZXMgJGRsb3BlbiIKKwkgIHRlc3QgLW4gIiRkbHByZW9wZW4iICYmIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRkbHByZW9wZW4iCisJZmkKKworCWlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KKwkgICMgT25seSBjaGVjayBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzCisJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgorCSAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIiAxPiYyCisJICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICAgIGZpCisJICAgICMgSXQgaXMgYSBsaWJ0b29sIGNvbnZlbmllbmNlIGxpYnJhcnksIHNvIGFkZCBpbiBpdHMgb2JqZWN0cy4KKwkgICAgY29udmVuaWVuY2U9IiRjb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIG9sZF9jb252ZW5pZW5jZT0iJG9sZF9jb252ZW5pZW5jZSAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIHRtcF9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKyAgICAgICAgICAgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgorCSAgICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgICAgZXNhYworICAgICAgICAgICAgICBmaQorCSAgICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgICAgZG9uZQorCSAgZWxpZiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKwkgIGNvbnRpbnVlCisJZmkgIyAkcGFzcyA9IGNvbnYKKworCisJIyBHZXQgdGhlIG5hbWUgb2YgdGhlIGxpYnJhcnkgd2UgbGluayBhZ2FpbnN0LgorCWxpbmtsaWI9CisJZm9yIGwgaW4gJG9sZF9saWJyYXJ5ICRsaWJyYXJ5X25hbWVzOyBkbworCSAgbGlua2xpYj0iJGwiCisJZG9uZQorCWlmIHRlc3QgLXogIiRsaW5rbGliIjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGZpbmQgbmFtZSBvZiBsaW5rIGxpYnJhcnkgZm9yIFxgJGxpYiciIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KKwlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJICBpZiB0ZXN0IC16ICIkZGxuYW1lIiB8fAorCSAgICAgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gbm87IHRoZW4KKwkgICAgIyBJZiB0aGVyZSBpcyBubyBkbG5hbWUsIG5vIGRsb3BlbiBzdXBwb3J0IG9yIHdlJ3JlIGxpbmtpbmcKKwkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKKwkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKKwkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgorCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICBlbHNlCisJICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICBmaQorCSAgY29udGludWUKKwlmaSAjICRwYXNzID0gZGxvcGVuCisKKwkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwljYXNlICRsYWRpciBpbgorCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzX2xhZGlyPSIkbGFkaXIiIDs7CisJKikKKwkgIGFic19sYWRpcj1gY2QgIiRsYWRpciIgJiYgcHdkYAorCSAgaWYgdGVzdCAteiAiJGFic19sYWRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRsYWRpciciIDE+JjIKKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogcGFzc2luZyBpdCBsaXRlcmFsbHkgdG8gdGhlIGxpbmtlciwgYWx0aG91Z2ggaXQgbWlnaHQgZmFpbCIgMT4mMgorCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKKwkgIGZpCisJICA7OworCWVzYWMKKwlsYW5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCisJIyBGaW5kIHRoZSByZWxldmFudCBvYmplY3QgZGlyZWN0b3J5IGFuZCBsaWJyYXJ5IG5hbWUuCisJaWYgdGVzdCAiWCRpbnN0YWxsZWQiID0gWHllczsgdGhlbgorCSAgaWYgdGVzdCAhIC1mICIkbGliZGlyLyRsaW5rbGliIiAmJiB0ZXN0IC1mICIkYWJzX2xhZGlyLyRsaW5rbGliIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIgMT4mMgorCSAgICBkaXI9IiRsYWRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgorCSAgICBsaWJkaXI9IiRhYnNfbGFkaXIiCisJICBlbHNlCisJICAgIGRpcj0iJGxpYmRpciIKKwkgICAgYWJzZGlyPSIkbGliZGlyIgorCSAgZmkKKwkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCisJZWxzZQorCSAgaWYgdGVzdCAhIC1mICIkbGFkaXIvJG9iamRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZGlyPSIkbGFkaXIiCisJICAgIGFic2Rpcj0iJGFic19sYWRpciIKKwkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgorCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgIGVsc2UKKwkgICAgZGlyPSIkbGFkaXIvJG9iamRpciIKKwkgICAgYWJzZGlyPSIkYWJzX2xhZGlyLyRvYmpkaXIiCisJICAgICMgUmVtb3ZlIHRoaXMgc2VhcmNoIHBhdGggbGF0ZXIKKwkgICAgbm90aW5zdF9wYXRoPSIkbm90aW5zdF9wYXRoICRhYnNfbGFkaXIiCisJICBmaQorCWZpICMgJGluc3RhbGxlZCA9IHllcworCW5hbWU9YCRlY2hvICJYJGxhbmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJyAtZSAncy9ebGliLy8nYAorCisJIyBUaGlzIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCisJaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgorCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgLWRscHJlb3BlbiBhIGNvbnZlbmllbmNlIGxpYnJhcnk6IFxgJGxpYiciIDE+JjIKKwkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmaQorCSAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAjIGFyZSByZXF1aXJlZCB0byBsaW5rKS4KKwkgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kb2xkX2xpYnJhcnkiCisJICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgZWxpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRkbG5hbWUiCisJICBlbHNlCisJICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGxpbmtsaWIiCisJICBmaQorCWZpICMgJHBhc3MgPSBkbHByZW9wZW4KKworCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJICAjIExpbmsgdGhlIGNvbnZlbmllbmNlIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICBlbGlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgICBjb21waWxlX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJG9sZF9saWJyYXJ5ICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIiAjIHVzZWQgZm9yIHByb2csc2NhbiBwYXNzCisJICBmaQorCSAgY29udGludWUKKwlmaQorCisKKwlpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyAmJiB0ZXN0ICIkcGFzcyIgIT0gbGluazsgdGhlbgorCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRsYWRpciIKKwkgIGRlcGxpYnM9IiRsaWIgJGRlcGxpYnMiCisKKwkgIGxpbmthbGxkZXBsaWJzPW5vCisJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm8gfHwgdGVzdCAteiAiJGxpYnJhcnlfbmFtZXMiIHx8CisJICAgICB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG5vOyB0aGVuCisJICAgIGxpbmthbGxkZXBsaWJzPXllcworCSAgZmkKKworCSAgdG1wX2xpYnM9CisJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgIGNhc2UgJGRlcGxpYiBpbgorCSAgICAtTCopIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAiYCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAncy9eLUwvLydgOzsgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisJICAgIGVzYWMKKwkgICAgIyBOZWVkIHRvIGxpbmsgYWdhaW5zdCBhbGwgZGVwZW5kZW5jeV9saWJzPworCSAgICBpZiB0ZXN0ICIkbGlua2FsbGRlcGxpYnMiID0geWVzOyB0aGVuCisJICAgICAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKKwkgICAgZWxzZQorCSAgICAgICMgTmVlZCB0byBoYXJkY29kZSBzaGFyZWQgbGlicmFyeSBwYXRocworCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCisJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIgorCSAgZG9uZSAjIGZvciBkZXBsaWIKKwkgIGNvbnRpbnVlCisJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCisKKwlpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgICAgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8IHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IH07IHRoZW4KKwkgICAgIyBXZSBuZWVkIHRvIGhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGgKKwkgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiICYmIHRlc3QgLXogIiRhdm9pZHRlbXBycGF0aCIgOyB0aGVuCisJICAgICAgIyBNYWtlIHN1cmUgdGhlIHJwYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoICIgaW4KKwkgICAgICAqIiAkZGlyICIqKSA7OworCSAgICAgICoiICRhYnNkaXIgIiopIDs7CisJICAgICAgKikgdGVtcF9ycGF0aD0iJHRlbXBfcnBhdGggJGFic2RpciIgOzsKKwkgICAgICBlc2FjCisJICAgIGZpCisKKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaSAjICRsaW5rbW9kZSwkcGFzcyA9IHByb2csbGluay4uLgorCisJICBpZiB0ZXN0ICIkYWxsZGVwbGlicyIgPSB5ZXMgJiYKKwkgICAgIHsgdGVzdCAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA9IHBhc3NfYWxsIHx8CisJICAgICAgIHsgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYKKwkJIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgfTsgfTsgdGhlbgorCSAgICAjIFdlIG9ubHkgbmVlZCB0byBzZWFyY2ggZm9yIHN0YXRpYyBsaWJyYXJpZXMKKwkgICAgY29udGludWUKKwkgIGZpCisJZmkKKworCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKKwl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicworCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXMgOyB0aGVuCisJICB1c2Vfc3RhdGljX2xpYnM9bm8KKwlmaQorCWlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJgorCSAgIHsgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBubyB8fCB0ZXN0IC16ICIkb2xkX2xpYnJhcnkiOyB9OyB0aGVuCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IG5vOyB0aGVuCisJICAgIG5vdGluc3RfZGVwbGlicz0iJG5vdGluc3RfZGVwbGlicyAkbGliIgorCSAgICBuZWVkX3JlbGluaz15ZXMKKwkgIGZpCisJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQorCisJICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24KKwkgICMgc29tZSBzeXN0ZW1zIChkYXJ3aW4pCisJICBpZiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluayA7IHRoZW4KKwkgICAgJGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkZWNobyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmaQorCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgorCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KKwkgICAgIyBIYXJkY29kZSB0aGUgbGlicmFyeSBwYXRoLgorCSAgICAjIFNraXAgZGlyZWN0b3JpZXMgdGhhdCBhcmUgaW4gdGhlIHN5c3RlbSBkZWZhdWx0IHJ1bi10aW1lCisJICAgICMgc2VhcmNoIHBhdGguCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkY29tcGlsZV9ycGF0aCAiIGluCisJICAgICAgKiIgJGFic2RpciAiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3JwYXRoPSIkY29tcGlsZV9ycGF0aCAkYWJzZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIGNhc2UgIiAkc3lzX2xpYl9kbHNlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGxpYmRpciAiKikgOzsKKwkgICAgKikKKwkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgICAgICoiICRsaWJkaXIgIiopIDs7CisJICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCisJICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiOyB0aGVuCisJICAgICMgZmlndXJlIG91dCB0aGUgc29uYW1lCisJICAgIHNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCSAgICByZWFsbmFtZT0iJDIiCisJICAgIHNoaWZ0OyBzaGlmdAorCSAgICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJICAgICMgdXNlIGRsbmFtZSBpZiB3ZSBnb3QgaXQuIGl0J3MgcGVyZmVjdGx5IGdvb2QsIG5vPworCSAgICBpZiB0ZXN0IC1uICIkZGxuYW1lIjsgdGhlbgorCSAgICAgIHNvbmFtZT0iJGRsbmFtZSIKKwkgICAgZWxpZiB0ZXN0IC1uICIkc29uYW1lX3NwZWMiOyB0aGVuCisJICAgICAgIyBibGVoIHdpbmRvd3MKKwkgICAgICBjYXNlICRob3N0IGluCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyopCisJCW1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkJdmVyc3VmZml4PSItJG1ham9yIgorCQk7OworCSAgICAgIGVzYWMKKwkgICAgICBldmFsIHNvbmFtZT1cIiRzb25hbWVfc3BlY1wiCisJICAgIGVsc2UKKwkgICAgICBzb25hbWU9IiRyZWFsbmFtZSIKKwkgICAgZmkKKworCSAgICAjIE1ha2UgYSBuZXcgbmFtZSBmb3IgdGhlIGV4dHJhY3RfZXhwc3ltc19jbWRzIHRvIHVzZQorCSAgICBzb3Jvb3Q9IiRzb25hbWUiCisJICAgIHNvbmFtZT1gJGVjaG8gJHNvcm9vdCB8ICR7U0VEfSAtZSAncy9eLipcLy8vJ2AKKwkgICAgbmV3bGliPSJsaWJpbXAtYCRlY2hvICRzb25hbWUgfCAke1NFRH0gJ3MvXmxpYi8vO3MvXC5kbGwkLy8nYC5hIgorCisJICAgICMgSWYgdGhlIGxpYnJhcnkgaGFzIG5vIGV4cG9ydCBsaXN0LCB0aGVuIGNyZWF0ZSBvbmUgbm93CisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRzb25hbWUtZGVmIjsgdGhlbiA6CisJICAgIGVsc2UKKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIFxgJHNvbmFtZSciCisJICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICAgICAgY21kcz0kZXh0cmFjdF9leHBzeW1zX2NtZHMKKwkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCQlJRlM9IiRzYXZlX2lmcyIKKwkJZXZhbCBjbWQ9XCIkY21kXCIKKwkJJHNob3cgIiRjbWQiCisJCSRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgICAgIGRvbmUKKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZmkKKworCSAgICAjIENyZWF0ZSAkbmV3bGliCisJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKKwkgICAgICAkc2hvdyAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgICBjbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcworCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJCUlGUz0iJHNhdmVfaWZzIgorCQlldmFsIGNtZD1cIiRjbWRcIgorCQkkc2hvdyAiJGNtZCIKKwkJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJICAgICAgZG9uZQorCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmaQorCSAgICAjIG1ha2Ugc3VyZSB0aGUgbGlicmFyeSB2YXJpYWJsZXMgYXJlIHBvaW50aW5nIHRvIHRoZSBuZXcgbGlicmFyeQorCSAgICBkaXI9JG91dHB1dF9vYmpkaXIKKwkgICAgbGlua2xpYj0kbmV3bGliCisJICBmaSAjIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyIKKworCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgIGxpYl9saW5rZWQ9eWVzCisJICAgIGNhc2UgJGhhcmRjb2RlX2FjdGlvbiBpbgorCSAgICBpbW1lZGlhdGUgfCB1bnN1cHBvcnRlZCkKKwkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiA9IG5vOyB0aGVuCisJCWFkZD0iJGRpci8kbGlua2xpYiIKKwkJY2FzZSAkaG9zdCBpbgorCQkgICotKi1zY28zLjJ2NS4wLlswMjRdKikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1zeXN2NCp1dzIqKSBhZGRfZGlyPSItTCRkaXIiIDs7CisJCSAgKi0qLXN5c3Y1T3BlblVOSVgqIHwgKi0qLXN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCBcCisJCSAgICAqLSotdW5peHdhcmU3KikgYWRkX2Rpcj0iLUwkZGlyIiA7OworCQkgICotKi1kYXJ3aW4qICkKKwkJICAgICMgaWYgdGhlIGxpYiBpcyBhIG1vZHVsZSB0aGVuIHdlIGNhbiBub3QgbGluayBhZ2FpbnN0CisJCSAgICAjIGl0LCBzb21lb25lIGlzIGlnbm9yaW5nIHRoZSBuZXcgd2FybmluZ3MgSSBhZGRlZAorCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8CisgICAgICAgICAgICAgICAgICAgICAgJEVHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KKwkJICAgICAgJGVjaG8gIioqIFdhcm5pbmcsIGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCisJCSAgICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCisJCSAgICAgICAgJGVjaG8KKwkJICAgICAgICAkZWNobyAiKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJICAgICAgICAkZWNobyAiKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKKwkJICAgICAgZWxzZQorCQkgICAgICAgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCSAgICAgIGZpCisJCSAgICBmaQorCQllc2FjCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSBubzsgdGhlbgorCQljYXNlICRob3N0IGluCisJCSotKi1zdW5vcyopIGFkZF9zaGxpYnBhdGg9IiRkaXIiIDs7CisJCWVzYWMKKwkJYWRkX2Rpcj0iLUwkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSBubzsgdGhlbgorCQlhZGRfc2hsaWJwYXRoPSIkZGlyIgorCQlhZGQ9Ii1sJG5hbWUiCisJICAgICAgZWxzZQorCQlsaWJfbGlua2VkPW5vCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICByZWxpbmspCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKwkJYWRkPSIkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiID0geWVzOyB0aGVuCisJCWFkZF9kaXI9Ii1MJGRpciIKKwkJIyBUcnkgbG9va2luZyBmaXJzdCBpbiB0aGUgbG9jYXRpb24gd2UncmUgYmVpbmcgaW5zdGFsbGVkIHRvLgorCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQkgIGNhc2UgJGxpYmRpciBpbgorCQkgICAgW1xcL10qKQorCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkJYWRkPSItbCRuYW1lIgorCSAgICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWFkZF9zaGxpYnBhdGg9IiRkaXIiCisJCWFkZD0iLWwkbmFtZSIKKwkgICAgICBlbHNlCisJCWxpYl9saW5rZWQ9bm8KKwkgICAgICBmaQorCSAgICAgIDs7CisJICAgICopIGxpYl9saW5rZWQ9bm8gOzsKKwkgICAgZXNhYworCisJICAgIGlmIHRlc3QgIiRsaWJfbGlua2VkIiAhPSB5ZXM7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjb25maWd1cmF0aW9uIGVycm9yOiB1bnN1cHBvcnRlZCBoYXJkY29kZSBwcm9wZXJ0aWVzIgorCSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRhZGRfc2hsaWJwYXRoIjsgdGhlbgorCSAgICAgIGNhc2UgOiRjb21waWxlX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokYWRkX3NobGlicGF0aDoiKikgOzsKKwkgICAgICAqKSBjb21waWxlX3NobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJGFkZF9zaGxpYnBhdGg6IiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgY29tcGlsZV9kZXBsaWJzPSIkYWRkX2RpciAkY29tcGlsZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGNvbXBpbGVfZGVwbGlicz0iJGFkZCAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBlbHNlCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGRlcGxpYnM9IiRhZGRfZGlyICRkZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGRlcGxpYnM9IiRhZGQgJGRlcGxpYnMiCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmIFwKKwkJIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiAhPSB5ZXMgJiYgXAorCQkgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJCWNhc2UgOiRmaW5hbGl6ZV9zaGxpYnBhdGg6IGluCisJCSoiOiRsaWJkaXI6IiopIDs7CisJCSopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCQllc2FjCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGZpCisKKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICBhZGRfc2hsaWJwYXRoPQorCSAgICBhZGRfZGlyPQorCSAgICBhZGQ9CisJICAgICMgRmluYWxpemUgY29tbWFuZCBmb3IgYm90aCBpcyBzaW1wbGU6IGp1c3QgaGFyZGNvZGUgaXQuCisJICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJICAgICAgYWRkPSIkbGliZGlyLyRsaW5rbGliIgorCSAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgorCSAgICAgIGFkZF9kaXI9Ii1MJGxpYmRpciIKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCisJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KKwkgICAgICAqIjokbGliZGlyOiIqKSA7OworCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgIGVzYWMKKwkgICAgICBhZGQ9Ii1sJG5hbWUiCisJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIiAmJgorCQkgdGVzdCAtZiAiJGluc3RfcHJlZml4X2RpciRsaWJkaXIvJGxpbmtsaWIiIDsgdGhlbgorCSAgICAgICAgYWRkPSIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIKKwkgICAgICBlbHNlCisJICAgICAgICBhZGQ9IiRsaWJkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgV2UgY2Fubm90IHNlZW0gdG8gaGFyZGNvZGUgaXQsIGd1ZXNzIHdlJ2xsIGZha2UgaXQuCisJICAgICAgYWRkX2Rpcj0iLUwkbGliZGlyIgorCSAgICAgICMgVHJ5IGxvb2tpbmcgZmlyc3QgaW4gdGhlIGxvY2F0aW9uIHdlJ3JlIGJlaW5nIGluc3RhbGxlZCB0by4KKwkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgorCQljYXNlICRsaWJkaXIgaW4KKwkJICBbXFwvXSopCisJCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgYWRkPSItbCRuYW1lIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgICAgdGVzdCAtbiAiJGFkZF9kaXIiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGRfZGlyICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgICAgIHRlc3QgLW4gIiRhZGQiICYmIGZpbmFsaXplX2RlcGxpYnM9IiRhZGQgJGZpbmFsaXplX2RlcGxpYnMiCisJICAgIGVsc2UKKwkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCisJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKKwkgICAgZmkKKwkgIGZpCisJZWxpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZzsgdGhlbgorCSAgIyBIZXJlIHdlIGFzc3VtZSB0aGF0IG9uZSBvZiBoYXJkY29kZV9kaXJlY3Qgb3IgaGFyZGNvZGVfbWludXNfTAorCSAgIyBpcyBub3QgdW5zdXBwb3J0ZWQuICBUaGlzIGlzIHZhbGlkIG9uIGFsbCBrbm93biBzdGF0aWMgYW5kCisJICAjIHNoYXJlZCBwbGF0Zm9ybXMuCisJICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB1bnN1cHBvcnRlZDsgdGhlbgorCSAgICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGxpbmtsaWI9IiRvbGRfbGlicmFyeSIKKwkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGlyLyRsaW5rbGliICRjb21waWxlX2RlcGxpYnMiCisJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkaXIvJGxpbmtsaWIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBlbHNlCisJICAgIGNvbXBpbGVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGNvbXBpbGVfZGVwbGlicyIKKwkgICAgZmluYWxpemVfZGVwbGlicz0iLWwkbmFtZSAtTCRkaXIgJGZpbmFsaXplX2RlcGxpYnMiCisJICBmaQorCWVsaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKwkgICMgTm90IGEgc2hhcmVkIGxpYnJhcnkKKwkgIGlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICAgIyBXZSdyZSB0cnlpbmcgbGluayBhIHNoYXJlZCBsaWJyYXJ5IGFnYWluc3QgYSBzdGF0aWMgb25lCisJICAgICMgYnV0IHRoZSBzeXN0ZW0gZG9lc24ndCBzdXBwb3J0IGl0LgorCisJICAgICMgSnVzdCBwcmludCBhIHdhcm5pbmcgYW5kIGFkZCB0aGUgbGlicmFyeSB0byBkZXBlbmRlbmN5X2xpYnMgc28KKwkgICAgIyB0aGF0IHRoZSBwcm9ncmFtIGNhbiBiZSBsaW5rZWQgYWdhaW5zdCB0aGUgc3RhdGljIGxpYnJhcnkuCisJICAgICRlY2hvCisJICAgICRlY2hvICIqKiogV2FybmluZzogVGhpcyBzeXN0ZW0gY2FuIG5vdCBsaW5rIHRvIHN0YXRpYyBsaWIgYXJjaGl2ZSAkbGliLiIKKwkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlLiIKKwkgICAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KKwkgICAgICAkZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgICRlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyBhcHBsaWNhdGlvbiIKKwkgICAgICAkZWNobyAiKioqIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcgdG8gcmVzb2x2ZSBzeW1ib2xzIGF0IHJ1bnRpbWUuIgorCSAgICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJCSRlY2hvCisJCSRlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkJJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCSRlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCisJCSRlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCQlidWlsZF9saWJ0b29sX2xpYnM9bW9kdWxlCisJCWJ1aWxkX29sZF9saWJzPXllcworCSAgICAgIGVsc2UKKwkJYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgICAgZmkKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgZGVwbGlicz0iJGRpci8kb2xkX2xpYnJhcnkgJGRlcGxpYnMiCisJICAgIGxpbmtfc3RhdGljPXllcworCSAgZmkKKwlmaSAjIGxpbmsgc2hhcmVkL3N0YXRpYyBsaWJyYXJ5PworCisJaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGRlcGVuZGVuY3lfbGlicyIgJiYKKwkgICAgIHsgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8CisJICAgICAgIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXMgfHwKKwkgICAgICAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IHllczsgfTsgdGhlbgorCSAgICAjIEV4dHJhY3QgLVIgZnJvbSBkZXBlbmRlbmN5X2xpYnMKKwkgICAgdGVtcF9kZXBsaWJzPQorCSAgICBmb3IgbGliZGlyIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkbGliZGlyIGluCisJICAgICAgLVIqKSB0ZW1wX3hycGF0aD1gJGVjaG8gIlgkbGliZGlyIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwkJICAgY2FzZSAiICR4cnBhdGggIiBpbgorCQkgICAqIiAkdGVtcF94cnBhdGggIiopIDs7CisJCSAgICopIHhycGF0aD0iJHhycGF0aCAkdGVtcF94cnBhdGgiOzsKKwkJICAgZXNhYzs7CisJICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICBlc2FjCisJICAgIGRvbmUKKwkgICAgZGVwZW5kZW5jeV9saWJzPSIkdGVtcF9kZXBsaWJzIgorCSAgZmkKKworCSAgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICRhYnNkaXIiCisJICAjIExpbmsgYWdhaW5zdCB0aGlzIGxpYnJhcnkKKwkgIHRlc3QgIiRsaW5rX3N0YXRpYyIgPSBubyAmJiBuZXdkZXBlbmRlbmN5X2xpYnM9IiRhYnNfbGFkaXIvJGxhbmFtZSAkbmV3ZGVwZW5kZW5jeV9saWJzIgorCSAgIyAuLi4gYW5kIGl0cyBkZXBlbmRlbmN5X2xpYnMKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBuZXdkZXBlbmRlbmN5X2xpYnM9IiRkZXBsaWIgJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisJICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCisJICBkb25lCisKKwkgIGlmIHRlc3QgIiRsaW5rX2FsbF9kZXBsaWJzIiAhPSBubzsgdGhlbgorCSAgICAjIEFkZCB0aGUgc2VhcmNoIHBhdGhzIG9mIGFsbCBkZXBlbmRlbmN5IGxpYnJhcmllcworCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OworCSAgICAgICoubGEpCisJCWRpcj1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJCXRlc3QgIlgkZGlyIiA9ICJYJGRlcGxpYiIgJiYgZGlyPSIuIgorCQkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KKwkJY2FzZSAkZGlyIGluCisJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgYWJzZGlyPSIkZGlyIiA7OworCQkqKQorCQkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKwkJICBpZiB0ZXN0IC16ICIkYWJzZGlyIjsgdGhlbgorCQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIiAxPiYyCisJCSAgICBhYnNkaXI9IiRkaXIiCisJCSAgZmkKKwkJICA7OworCQllc2FjCisJCWlmIGdyZXAgIl5pbnN0YWxsZWQ9bm8iICRkZXBsaWIgPiAvZGV2L251bGw7IHRoZW4KKwkJICBwYXRoPSIkYWJzZGlyLyRvYmpkaXIiCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSAgICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisJCSAgZmkKKwkJICBpZiB0ZXN0ICIkYWJzZGlyIiAhPSAiJGxpYmRpciI7IHRoZW4KKwkJICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiIDE+JjIKKwkJICBmaQorCQkgIHBhdGg9IiRhYnNkaXIiCisJCWZpCisJCWRlcGRlcGw9CisJCWNhc2UgJGhvc3QgaW4KKwkJKi0qLWRhcndpbiopCisJCSAgIyB3ZSBkbyBub3Qgd2FudCB0byBsaW5rIGFnYWluc3Qgc3RhdGljIGxpYnMsCisJCSAgIyBidXQgbmVlZCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkCisJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIGlmIHRlc3QgLW4gIiRkZXBsaWJyYXJ5X25hbWVzIiA7IHRoZW4KKwkJICAgIGZvciB0bXAgaW4gJGRlcGxpYnJhcnlfbmFtZXMgOyBkbworCQkgICAgICBkZXBkZXBsPSR0bXAKKwkJICAgIGRvbmUKKwkJICAgIGlmIHRlc3QgLWYgIiRwYXRoLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJHBhdGgvJGRlcGRlcGwiCisJCSAgICBmaQorCQkgICAgIyBkbyBub3QgYWRkIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5IHRoZXJlCisJCSAgICBjYXNlICIgJG5ld2xpYl9zZWFyY2hfcGF0aCAiIGluCisJCSAgICAqIiAkcGF0aCAiKikgOzsKKwkJICAgICopIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkcGF0aCI7OworCQkgICAgZXNhYworCQkgIGZpCisJCSAgcGF0aD0iIgorCQkgIDs7CisJCSopCisJCSAgcGF0aD0iLUwkcGF0aCIKKwkJICA7OworCQllc2FjCisJCTs7CisJICAgICAgLWwqKQorCQljYXNlICRob3N0IGluCisJCSotKi1kYXJ3aW4qKQorCQkgICMgQWdhaW4sIHdlIG9ubHkgd2FudCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcworCQkgIGV2YWwgdG1wX2xpYnM9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAicyxeXC1sLCwiYAorCQkgIGZvciB0bXAgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aCA7IGRvCisJCSAgICBpZiB0ZXN0IC1mICIkdG1wL2xpYiR0bXBfbGlicy5keWxpYiIgOyB0aGVuCisJCSAgICAgIGV2YWwgZGVwZGVwbD0iJHRtcC9saWIkdG1wX2xpYnMuZHlsaWIiCisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgIGRvbmUKKwkJICBwYXRoPSIiCisJCSAgOzsKKwkJKikgY29udGludWUgOzsKKwkJZXNhYworCQk7OworCSAgICAgICopIGNvbnRpbnVlIDs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJHBhdGggIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCisJICAgICAgKiIgJGRlcGRlcGwgIiopIDs7CisJICAgICAgKikgZGVwbGlicz0iJGRlcGRlcGwgJGRlcGxpYnMiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KKwlmaSAjIGxpbmttb2RlID0gbGliCisgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgorICAgICAgaWYgdGVzdCAiJHBhc3MiID0gZGxwcmVvcGVuOyB0aGVuCisJIyBMaW5rIHRoZSBkbHByZW9wZW5lZCBsaWJyYXJpZXMgYmVmb3JlIG90aGVyIGxpYnJhcmllcworCWZvciBkZXBsaWIgaW4gJHNhdmVfZGVwbGliczsgZG8KKwkgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJZG9uZQorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiRwYXNzIiAhPSBkbG9wZW47IHRoZW4KKwlpZiB0ZXN0ICIkcGFzcyIgIT0gY29udjsgdGhlbgorCSAgIyBNYWtlIHN1cmUgbGliX3NlYXJjaF9wYXRoIGNvbnRhaW5zIG9ubHkgdW5pcXVlIGRpcmVjdG9yaWVzLgorCSAgbGliX3NlYXJjaF9wYXRoPQorCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbworCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KKwkgICAgKiIgJGRpciAiKikgOzsKKwkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KKwlmaQorCisJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiAhPSAicHJvZyxsaW5rIjsgdGhlbgorCSAgdmFycz0iZGVwbGlicyIKKwllbHNlCisJICB2YXJzPSJjb21waWxlX2RlcGxpYnMgZmluYWxpemVfZGVwbGlicyIKKwlmaQorCWZvciB2YXIgaW4gJHZhcnMgZGVwZW5kZW5jeV9saWJzOyBkbworCSAgIyBBZGQgbGlicmFyaWVzIHRvICR2YXIgaW4gcmV2ZXJzZSBvcmRlcgorCSAgZXZhbCB0bXBfbGlicz1cIlwkJHZhclwiCisJICBuZXdfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJHRtcF9saWJzOyBkbworCSAgICAjIEZJWE1FOiBQZWRhbnRpY2FsbHksIHRoaXMgaXMgdGhlIHJpZ2h0IHRoaW5nIHRvIGRvLCBzbworCSAgICAjICAgICAgICB0aGF0IHNvbWUgbmFzdHkgZGVwZW5kZW5jeSBsb29wIGlzbid0IGFjY2lkZW50YWxseQorCSAgICAjICAgICAgICBicm9rZW46CisJICAgICNuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiCisJICAgICMgUHJhZ21hdGljYWxseSwgdGhpcyBzZWVtcyB0byBjYXVzZSB2ZXJ5IGZldyBwcm9ibGVtcyBpbgorCSAgICAjIHByYWN0aWNlOgorCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgIC1SKikgOzsKKwkgICAgKikKKwkgICAgICAjIEFuZCBoZXJlIGlzIHRoZSByZWFzb246IHdoZW4gYSBsaWJyYXJ5IGFwcGVhcnMgbW9yZQorCSAgICAgICMgdGhhbiBvbmNlIGFzIGFuIGV4cGxpY2l0IGRlcGVuZGVuY2Ugb2YgYSBsaWJyYXJ5LCBvcgorCSAgICAgICMgaXMgaW1wbGljaXRseSBsaW5rZWQgaW4gbW9yZSB0aGFuIG9uY2UgYnkgdGhlCisJICAgICAgIyBjb21waWxlciwgaXQgaXMgY29uc2lkZXJlZCBzcGVjaWFsLCBhbmQgbXVsdGlwbGUKKwkgICAgICAjIG9jY3VycmVuY2VzIHRoZXJlb2YgYXJlIG5vdCByZW1vdmVkLiAgQ29tcGFyZSB0aGlzCisJICAgICAgIyB3aXRoIGhhdmluZyB0aGUgc2FtZSBsaWJyYXJ5IGJlaW5nIGxpc3RlZCBhcyBhCisJICAgICAgIyBkZXBlbmRlbmN5IG9mIG11bHRpcGxlIG90aGVyIGxpYnJhcmllczogaW4gdGhpcyBjYXNlLAorCSAgICAgICMgd2Uga25vdyAocGVkYW50aWNhbGx5LCB3ZSBhc3N1bWUpIHRoZSBsaWJyYXJ5IGRvZXMgbm90CisJICAgICAgIyBuZWVkIHRvIGJlIGxpc3RlZCBtb3JlIHRoYW4gb25jZSwgc28gd2Uga2VlcCBvbmx5IHRoZQorCSAgICAgICMgbGFzdCBjb3B5LiAgVGhpcyBpcyBub3QgYWx3YXlzIHJpZ2h0LCBidXQgaXQgaXMgcmFyZQorCSAgICAgICMgZW5vdWdoIHRoYXQgd2UgcmVxdWlyZSB1c2VycyB0aGF0IHJlYWxseSBtZWFuIHRvIHBsYXkKKwkgICAgICAjIHN1Y2ggdW5wb3J0YWJsZSBsaW5raW5nIHRyaWNrcyB0byBsaW5rIHRoZSBsaWJyYXJ5CisJICAgICAgIyB1c2luZyAtV2wsLWxuYW1lLCBzbyB0aGF0IGxpYnRvb2wgZG9lcyBub3QgY29uc2lkZXIgaXQKKwkgICAgICAjIGZvciBkdXBsaWNhdGUgcmVtb3ZhbC4KKwkgICAgICBjYXNlICIgJHNwZWNpYWxkZXBsaWJzICIgaW4KKwkgICAgICAqIiAkZGVwbGliICIqKSBuZXdfbGlicz0iJGRlcGxpYiAkbmV3X2xpYnMiIDs7CisJICAgICAgKikKKwkJY2FzZSAiICRuZXdfbGlicyAiIGluCisJCSoiICRkZXBsaWIgIiopIDs7CisJCSopIG5ld19saWJzPSIkZGVwbGliICRuZXdfbGlicyIgOzsKKwkJZXNhYworCQk7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICBlc2FjCisJICBkb25lCisJICB0bXBfbGlicz0KKwkgIGZvciBkZXBsaWIgaW4gJG5ld19saWJzOyBkbworCSAgICBjYXNlICRkZXBsaWIgaW4KKwkgICAgLUwqKQorCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgorCSAgICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgICAqKSB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiIDs7CisJICAgIGVzYWMKKwkgIGRvbmUKKwkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCisJZG9uZSAjIGZvciB2YXIKKyAgICAgIGZpCisgICAgICAjIExhc3Qgc3RlcDogcmVtb3ZlIHJ1bnRpbWUgbGlicyBmcm9tIGRlcGVuZGVuY3lfbGlicworICAgICAgIyAodGhleSBzdGF5IGluIGRlcGxpYnMpCisgICAgICB0bXBfbGlicz0KKyAgICAgIGZvciBpIGluICRkZXBlbmRlbmN5X2xpYnMgOyBkbworCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgJGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCAiIGluCisJKiIgJGkgIiopCisJICBpPSIiCisJICA7OworCWVzYWMKKwlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCisJICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCWZpCisgICAgICBkb25lCisgICAgICBkZXBlbmRlbmN5X2xpYnM9JHRtcF9saWJzCisgICAgZG9uZSAjIGZvciBwYXNzCisgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKyAgICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCisgICAgZmkKKworICAgIGNhc2UgJGxpbmttb2RlIGluCisgICAgb2xkbGliKQorICAgICAgaWYgdGVzdCAtbiAiJGRlcGxpYnMiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgYW5kIFxgLUwnIGFyZSBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisgICAgICBvbGRsaWJzPSIkb3V0cHV0IgorICAgICAgb2Jqcz0iJG9ianMkb2xkX2RlcGxpYnMiCisgICAgICA7OworCisgICAgbGliKQorICAgICAgIyBNYWtlIHN1cmUgd2Ugb25seSBnZW5lcmF0ZSBsaWJyYXJpZXMgb2YgdGhlIGZvcm0gYGxpYk5BTUUubGEnLgorICAgICAgY2FzZSAkb3V0cHV0bmFtZSBpbgorICAgICAgbGliKikKKwluYW1lPWAkZWNobyAiWCRvdXRwdXRuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nIC1lICdzL15saWIvLydgCisJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKKwlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKKwk7OworICAgICAgKikKKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IG5vOyB0aGVuCisJICAkZWNobyAiJG1vZGVuYW1lOiBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisJaWYgdGVzdCAiJG5lZWRfbGliX3ByZWZpeCIgIT0gbm87IHRoZW4KKwkgICMgQWRkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXMgaWYgcmVxdWlyZWQKKwkgIG5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLydgCisJICBldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCSAgZXZhbCBsaWJuYW1lPVwiJGxpYm5hbWVfc3BlY1wiCisJZWxzZQorCSAgbGlibmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJ2AKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgorCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIiAyPiYxCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwllbHNlCisJICAkZWNobworCSAgJGVjaG8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJGVjaG8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBsaWJvYmpzPSIkbGlib2JqcyAkb2JqcyIKKwlmaQorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4gc2VsZicgaXMgaWdub3JlZCBmb3IgbGlidG9vbCBsaWJyYXJpZXMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIHNldCBkdW1teSAkcnBhdGgKKyAgICAgIGlmIHRlc3QgIiQjIiAtZ3QgMjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGlnbm9yaW5nIG11bHRpcGxlIFxgLXJwYXRoJ3MgZm9yIGEgbGlidG9vbCBsaWJyYXJ5IiAxPiYyCisgICAgICBmaQorICAgICAgaW5zdGFsbF9saWJkaXI9IiQyIgorCisgICAgICBvbGRsaWJzPQorICAgICAgaWYgdGVzdCAteiAiJHJwYXRoIjsgdGhlbgorCWlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEJ1aWxkaW5nIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCSAgIyBTb21lIGNvbXBpbGVycyBoYXZlIHByb2JsZW1zIHdpdGggYSBgLmFsJyBleHRlbnNpb24gc28KKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIHNob3VsZCBoYXZlIHRoZSBzYW1lIGV4dGVuc2lvbiBhbgorCSAgIyBhcmNoaXZlIG5vcm1hbGx5IHdvdWxkLgorCSAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCAkb2xkbGlicyIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1jb252ZW5pZW5jZQorCSAgYnVpbGRfb2xkX2xpYnM9eWVzCisJZmkKKworCWlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgorCWZpCisKKwlpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgorCWZpCisgICAgICBlbHNlCisKKwkjIFBhcnNlIHRoZSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFyZ3VtZW50LgorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSc6JworCXNldCBkdW1teSAkdmluZm8gMCAwIDAKKwlJRlM9IiRzYXZlX2lmcyIKKworCWlmIHRlc3QgLW4gIiQ4IjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogdG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIGNvbnZlcnQgYWJzb2x1dGUgdmVyc2lvbiBudW1iZXJzIHRvIGxpYnRvb2wgYWdlcworCSMgdGhpcyByZXRhaW5zIGNvbXBhdGliaWxpdHkgd2l0aCAubGEgZmlsZXMgYW5kIGF0dGVtcHRzCisJIyB0byBtYWtlIHRoZSBjb2RlIGJlbG93IGEgYml0IG1vcmUgY29tcHJlaGVuc2libGUKKworCWNhc2UgJHZpbmZvX251bWJlciBpbgorCXllcykKKwkgIG51bWJlcl9tYWpvcj0iJDIiCisJICBudW1iZXJfbWlub3I9IiQzIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkNCIKKwkgICMKKwkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CisJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgorCSAgIyBhbmQgdGhvc2UgdGhhdCBzdWJ0cmFjdCBhZ2UgYW5kIHVzZSBhZ2UgYXMKKwkgICMgYSBtaW5vciB2ZXJzaW9uLiAgQnV0LCB0aGVuIHRoZXJlIGlzIGlyaXgKKwkgICMgd2hpY2ggaGFzIGFuIGV4dHJhIDEgYWRkZWQganVzdCBmb3IgZnVuCisJICAjCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgIGRhcndpbnxsaW51eHxvc2Z8d2luZG93cykKKwkgICAgY3VycmVudD1gZXhwciAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcmAKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9yZXZpc2lvbiIKKwkgICAgOzsKKwkgIGZyZWVic2QtYW91dHxmcmVlYnNkLWVsZnxzdW5vcykKKwkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKKwkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCisJICAgIGFnZT0iMCIKKwkgICAgOzsKKwkgIGlyaXh8bm9uc3RvcHV4KQorCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yIC0gMWAKKwkgICAgYWdlPSIkbnVtYmVyX21pbm9yIgorCSAgICByZXZpc2lvbj0iJG51bWJlcl9taW5vciIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJbm8pCisJICBjdXJyZW50PSIkMiIKKwkgIHJldmlzaW9uPSIkMyIKKwkgIGFnZT0iJDQiCisJICA7OworCWVzYWMKKworCSMgQ2hlY2sgdGhhdCBlYWNoIG9mIHRoZSB0aGluZ3MgYXJlIHZhbGlkIG51bWJlcnMuCisJY2FzZSAkY3VycmVudCBpbgorCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIDs7CisJZXNhYworCisJY2FzZSAkcmV2aXNpb24gaW4KKwkwfFsxLTldfFsxLTldWzAtOV18WzEtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldfFsxLTldWzAtOV1bMC05XVswLTldWzAtOV0pIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IFJFVklTSU9OIFxgJHJldmlzaW9uJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIDs7CisJZXNhYworCisJY2FzZSAkYWdlIGluCisJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OworCSopCisJICAkZWNobyAiJG1vZGVuYW1lOiBBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgorCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIDs7CisJZXNhYworCisJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIiAxPiYyCisJICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIENhbGN1bGF0ZSB0aGUgdmVyc2lvbiB2YXJpYWJsZXMuCisJbWFqb3I9CisJdmVyc3VmZml4PQorCXZlcnN0cmluZz0KKwljYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwlub25lKSA7OworCisJZGFyd2luKQorCSAgIyBMaWtlIExpbnV4LCBidXQgd2l0aCB0aGUgY3VycmVudCB2ZXJzaW9uIGF2YWlsYWJsZSBpbgorCSAgIyB2ZXJzdHJpbmcgZm9yIGNvZGluZyBpdCBpbnRvIHRoZSBsaWJyYXJ5IGhlYWRlcgorCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KKwkgIG1pbm9yX2N1cnJlbnQ9YGV4cHIgJGN1cnJlbnQgKyAxYAorCSAgdmVyc3RyaW5nPSIke3dsfS1jb21wYXRpYmlsaXR5X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudCAke3dsfS1jdXJyZW50X3ZlcnNpb24gJHt3bH0kbWlub3JfY3VycmVudC4kcmV2aXNpb24iCisJICA7OworCisJZnJlZWJzZC1hb3V0KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiI7CisJICA7OworCisJZnJlZWJzZC1lbGYpCisJICBtYWpvcj0iLiRjdXJyZW50IgorCSAgdmVyc3VmZml4PSIuJGN1cnJlbnQiOworCSAgOzsKKworCWlyaXggfCBub25zdG9wdXgpCisJICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2UgKyAxYAorCisJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKwkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OworCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CisJICBlc2FjCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmdfcHJlZml4JG1ham9yLiRyZXZpc2lvbiIKKworCSAgIyBBZGQgaW4gYWxsIHRoZSBpbnRlcmZhY2VzIHRoYXQgd2UgYXJlIGNvbXBhdGlibGUgd2l0aC4KKwkgIGxvb3A9JHJldmlzaW9uCisJICB3aGlsZSB0ZXN0ICIkbG9vcCIgLW5lIDA7IGRvCisJICAgIGlmYWNlPWBleHByICRyZXZpc2lvbiAtICRsb29wYAorCSAgICBsb29wPWBleHByICRsb29wIC0gMWAKKwkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nX3ByZWZpeCRtYWpvci4kaWZhY2U6JHZlcnN0cmluZyIKKwkgIGRvbmUKKworCSAgIyBCZWZvcmUgdGhpcyBwb2ludCwgJG1ham9yIG11c3Qgbm90IGNvbnRhaW4gYC4nLgorCSAgbWFqb3I9LiRtYWpvcgorCSAgdmVyc3VmZml4PSIkbWFqb3IuJHJldmlzaW9uIgorCSAgOzsKKworCWxpbnV4KQorCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgorCSAgOzsKKworCW9zZikKKwkgIG1ham9yPS5gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKKwkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCisKKwkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCisJICBsb29wPSRhZ2UKKwkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KKwkgICAgaWZhY2U9YGV4cHIgJGN1cnJlbnQgLSAkbG9vcGAKKwkgICAgbG9vcD1gZXhwciAkbG9vcCAtIDFgCisJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2lmYWNlfS4wIgorCSAgZG9uZQorCisJICAjIE1ha2UgZXhlY3V0YWJsZXMgZGVwZW5kIG9uIG91ciBjdXJyZW50IHZlcnNpb24uCisJICB2ZXJzdHJpbmc9IiR2ZXJzdHJpbmc6JHtjdXJyZW50fS4wIgorCSAgOzsKKworCXN1bm9zKQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50LiRyZXZpc2lvbiIKKwkgIDs7CisKKwl3aW5kb3dzKQorCSAgIyBVc2UgJy0nIHJhdGhlciB0aGFuICcuJywgc2luY2Ugd2Ugb25seSB3YW50IG9uZQorCSAgIyBleHRlbnNpb24gb24gRE9TIDguMyBmaWxlc3lzdGVtcy4KKwkgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIHZlcnN1ZmZpeD0iLSRtYWpvciIKKwkgIDs7CisKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBsaWJyYXJ5IHZlcnNpb24gdHlwZSBcYCR2ZXJzaW9uX3R5cGUnIiAxPiYyCisJICAkZWNobyAiRmF0YWwgY29uZmlndXJhdGlvbiBlcnJvci4gIFNlZSB0aGUgJFBBQ0tBR0UgZG9jcyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisKKwkjIENsZWFyIHRoZSB2ZXJzaW9uIGluZm8gaWYgd2UgZGVmYXVsdGVkLCBhbmQgdGhleSBzcGVjaWZpZWQgYSByZWxlYXNlLgorCWlmIHRlc3QgLXogIiR2aW5mbyIgJiYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJICBtYWpvcj0KKwkgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorCSAgZGFyd2luKQorCSAgICAjIHdlIGNhbid0IGNoZWNrIGZvciAiMC4wIiBpbiBhcmNoaXZlX2NtZHMgZHVlIHRvIHF1b3RpbmcKKwkgICAgIyBwcm9ibGVtcywgc28gd2UgcmVzZXQgaXQgY29tcGxldGVseQorCSAgICB2ZXJzdHJpbmc9CisJICAgIDs7CisJICAqKQorCSAgICB2ZXJzdHJpbmc9IjAuMCIKKwkgICAgOzsKKwkgIGVzYWMKKwkgIGlmIHRlc3QgIiRuZWVkX3ZlcnNpb24iID0gbm87IHRoZW4KKwkgICAgdmVyc3VmZml4PQorCSAgZWxzZQorCSAgICB2ZXJzdWZmaXg9Ii4wLjAiCisJICBmaQorCWZpCisKKwkjIFJlbW92ZSB2ZXJzaW9uIGluZm8gZnJvbSBuYW1lIGlmIHZlcnNpb25pbmcgc2hvdWxkIGJlIGF2b2lkZWQKKwlpZiB0ZXN0ICIkYXZvaWRfdmVyc2lvbiIgPSB5ZXMgJiYgdGVzdCAiJG5lZWRfdmVyc2lvbiIgPSBubzsgdGhlbgorCSAgbWFqb3I9CisJICB2ZXJzdWZmaXg9CisJICB2ZXJzdHJpbmc9IiIKKwlmaQorCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIGFyY2hpdmUgd2lsbCBoYXZlIHVuZGVmaW5lZCBzeW1ib2xzLgorCWlmIHRlc3QgIiRhbGxvd191bmRlZmluZWQiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciID0gdW5zdXBwb3J0ZWQ7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdW5kZWZpbmVkIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gJGhvc3Qgc2hhcmVkIGxpYnJhcmllcyIgMT4mMgorCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KKwkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCisJICBmaQorCWVsc2UKKwkgICMgRG9uJ3QgYWxsb3cgdW5kZWZpbmVkIHN5bWJvbHMuCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0iJG5vX3VuZGVmaW5lZF9mbGFnIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rOyB0aGVuCisJIyBSZW1vdmUgb3VyIG91dHB1dHMsIGJ1dCBkb24ndCByZW1vdmUgb2JqZWN0IGZpbGVzIHNpbmNlIHRoZXkKKwkjIG1heSBoYXZlIGJlZW4gY3JlYXRlZCB3aGVuIGNvbXBpbGluZyBQSUMgb2JqZWN0cy4KKwlyZW1vdmVsaXN0PQorCXRlbXByZW1vdmVsaXN0PWAkZWNobyAiJG91dHB1dF9vYmpkaXIvKiJgCisJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbworCSAgY2FzZSAkcCBpbgorCSAgICAqLiRvYmpleHQpCisJICAgICAgIDs7CisJICAgICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIHwgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuKiB8ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0ke3JlbGVhc2V9LiopCisJICAgICAgIGlmIHRlc3QgIlgkcHJlY2lvdXNfZmlsZXNfcmVnZXgiICE9ICJYIjsgdGhlbgorCSAgICAgICAgIGlmIGVjaG8gJHAgfCAkRUdSRVAgLWUgIiRwcmVjaW91c19maWxlc19yZWdleCIgPi9kZXYvbnVsbCAyPiYxCisJICAgICAgICAgdGhlbgorCQkgICBjb250aW51ZQorCQkgZmkKKwkgICAgICAgZmkKKwkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIDs7CisJICAgICopIDs7CisJICBlc2FjCisJZG9uZQorCWlmIHRlc3QgLW4gIiRyZW1vdmVsaXN0IjsgdGhlbgorCSAgJHNob3cgIiR7cm19ciAkcmVtb3ZlbGlzdCIKKwkgICRydW4gJHtybX1yICRyZW1vdmVsaXN0CisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgorICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KKwlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCisJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgorCW9sZG9ianM9IiRvYmpzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisgICAgICBmaQorCisgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwlsaWJfc2VhcmNoX3BhdGg9YCRlY2hvICIkbGliX3NlYXJjaF9wYXRoICIgfCAke1NFRH0gLWUgInMlICRwYXRoICUgJWciYAorCWRlcGxpYnM9YCRlY2hvICIkZGVwbGlicyAiIHwgJHtTRUR9IC1lICJzJSAtTCRwYXRoICUgJWciYAorCWRlcGVuZGVuY3lfbGlicz1gJGVjaG8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICR7U0VEfSAtZSAicyUgLUwkcGF0aCAlICVnImAKKyAgICAgIGRvbmUKKworICAgICAgaWYgdGVzdCAtbiAiJHhycGF0aCI7IHRoZW4KKwkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCisJdGVtcF94cnBhdGg9CisJZm9yIGxpYmRpciBpbiAkeHJwYXRoOyBkbworCSAgdGVtcF94cnBhdGg9IiR0ZW1wX3hycGF0aCAtUiRsaWJkaXIiCisJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgIGVzYWMKKwlkb25lCisJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKwkgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfeHJwYXRoICRkZXBlbmRlbmN5X2xpYnMiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgTWFrZSBzdXJlIGRsZmlsZXMgY29udGFpbnMgb25seSB1bmlxdWUgZmlsZXMgdGhhdCB3b24ndCBiZSBkbHByZW9wZW5lZAorICAgICAgb2xkX2RsZmlsZXM9IiRkbGZpbGVzIgorICAgICAgZGxmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbGZpbGVzOyBkbworCWNhc2UgIiAkZGxwcmVmaWxlcyAkZGxmaWxlcyAiIGluCisJKiIgJGxpYiAiKikgOzsKKwkqKSBkbGZpbGVzPSIkZGxmaWxlcyAkbGliIiA7OworCWVzYWMKKyAgICAgIGRvbmUKKworICAgICAgIyBNYWtlIHN1cmUgZGxwcmVmaWxlcyBjb250YWlucyBvbmx5IHVuaXF1ZSBmaWxlcworICAgICAgb2xkX2RscHJlZmlsZXM9IiRkbHByZWZpbGVzIgorICAgICAgZGxwcmVmaWxlcz0KKyAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbworCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KKwkqIiAkbGliICIqKSA7OworCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisJZXNhYworICAgICAgZG9uZQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqKQorCSAgICAjIHRoZXNlIHN5c3RlbXMgZG9uJ3QgYWN0dWFsbHkgaGF2ZSBhIGMgbGlicmFyeSAoYXMgc3VjaCkhCisJICAgIDs7CisJICAqLSotcmhhcHNvZHkqIHwgKi0qLWRhcndpbjEuWzAxMl0pCisJICAgICMgUmhhcHNvZHkgQyBsaWJyYXJ5IGlzIGluIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1mcmFtZXdvcmsgU3lzdGVtIgorCSAgICA7OworCSAgKi0qLW5ldGJzZCopCisJICAgICMgRG9uJ3QgbGluayB3aXRoIGxpYmMgdW50aWwgdGhlIGEub3V0IGxkLnNvIGlzIGZpeGVkLgorCSAgICA7OworCSAgKi0qLW9wZW5ic2QqIHwgKi0qLWZyZWVic2QqIHwgKi0qLWRyYWdvbmZseSopCisJICAgICMgRG8gbm90IGluY2x1ZGUgbGliYyBkdWUgdG8gdXMgaGF2aW5nIGxpYmMvbGliY19yLgorCSAgICA7OworCSAgKi0qLXNjbzMuMnY1KiB8ICotKi1zY281djYqKQorCSAgICAjIENhdXNlcyBwcm9ibGVtcyB3aXRoIF9fY3R5cGUKKwkgICAgOzsKKwkgICotKi1zeXN2NC4ydXcyKiB8ICotKi1zeXN2NSogfCAqLSotdW5peHdhcmUqIHwgKi0qLU9wZW5VTklYKikKKwkgICAgIyBDb21waWxlciBpbnNlcnRzIGxpYmMgaW4gdGhlIGNvcnJlY3QgcGxhY2UgZm9yIHRocmVhZHMgdG8gd29yaworCSAgICA7OworIAkgICopCisJICAgICMgQWRkIGxpYmMgdG8gZGVwbGlicyBvbiBhbGwgb3RoZXIgc3lzdGVtcyBpZiBuZWNlc3NhcnkuCisJICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX25lZWRfbGMiID0gInllcyI7IHRoZW4KKwkgICAgICBkZXBsaWJzPSIkZGVwbGlicyAtbGMiCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJZmkKKworCSMgVHJhbnNmb3JtIGRlcGxpYnMgaW50byBvbmx5IGRlcGxpYnMgdGhhdCBjYW4gYmUgbGlua2VkIGluIHNoYXJlZC4KKwluYW1lX3NhdmU9JG5hbWUKKwlsaWJuYW1lX3NhdmU9JGxpYm5hbWUKKwlyZWxlYXNlX3NhdmU9JHJlbGVhc2UKKwl2ZXJzdWZmaXhfc2F2ZT0kdmVyc3VmZml4CisJbWFqb3Jfc2F2ZT0kbWFqb3IKKwkjIEknbSBub3Qgc3VyZSBpZiBJJ20gdHJlYXRpbmcgdGhlIHJlbGVhc2UgY29ycmVjdGx5LiAgSSB0aGluaworCSMgcmVsZWFzZSBzaG91bGQgc2hvdyB1cCBpbiB0aGUgLWwgKGllIC1sZ21wNSkgc28gd2UgZG9uJ3Qgd2FudCB0bworCSMgYWRkIGl0IGluIHR3aWNlLiAgSXMgdGhhdCBjb3JyZWN0PworCXJlbGVhc2U9IiIKKwl2ZXJzdWZmaXg9IiIKKwltYWpvcj0iIgorCW5ld2RlcGxpYnM9CisJZHJvcHBlZGRlcHM9bm8KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCXBhc3NfYWxsKQorCSAgIyBEb24ndCBjaGVjayBmb3Igc2hhcmVkL3N0YXRpYy4gIEV2ZXJ5dGhpbmcgd29ya3MuCisJICAjIFRoaXMgbWlnaHQgYmUgYSBsaXR0bGUgbmFpdmUuICBXZSBtaWdodCB3YW50IHRvIGNoZWNrCisJICAjIHdoZXRoZXIgdGhlIGxpYnJhcnkgZXhpc3RzIG9yIG5vdC4gIEJ1dCB0aGlzIGlzIG9uCisJICAjIG9zZjMgJiBvc2Y0IGFuZCBJJ20gbm90IHJlYWxseSBzdXJlLi4uIEp1c3QKKwkgICMgaW1wbGVtZW50aW5nIHdoYXQgd2FzIGFscmVhZHkgdGhlIGJlaGF2aW9yLgorCSAgbmV3ZGVwbGlicz0kZGVwbGlicworCSAgOzsKKwl0ZXN0X2NvbXBpbGUpCisJICAjIFRoaXMgY29kZSBzdHJlc3NlcyB0aGUgImxpYnJhcmllcyBhcmUgcHJvZ3JhbXMiIHBhcmFkaWdtIHRvIGl0cworCSAgIyBsaW1pdHMuIE1heWJlIGV2ZW4gYnJlYWtzIGl0LiAgV2UgY29tcGlsZSBhIHByb2dyYW0sIGxpbmtpbmcgaXQKKwkgICMgYWdhaW5zdCB0aGUgZGVwbGlicyBhcyBhIHByb3h5IGZvciB0aGUgbGlicmFyeS4gIFRoZW4gd2UgY2FuIGNoZWNrCisJICAjIHdoZXRoZXIgdGhleSBsaW5rZWQgaW4gc3RhdGljYWxseSBvciBkeW5hbWljYWxseSB3aXRoIGxkZC4KKwkgICRybSBjb25mdGVzdC5jCisJICBjYXQgPiBjb25mdGVzdC5jIDw8RU9GCisJICBpbnQgbWFpbigpIHsgcmV0dXJuIDA7IH0KK0VPRgorCSAgJHJtIGNvbmZ0ZXN0CisJICAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkZGVwbGlicworCSAgaWYgdGVzdCAiJD8iIC1lcSAwIDsgdGhlbgorCSAgICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJICAgIGZvciBpIGluICRkZXBsaWJzOyBkbworCSAgICAgIG5hbWU9YGV4cHIgJGkgOiAnLWxcKC4qXCknYAorCSAgICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgorICAgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAiJG5hbWUiIC1uZSAiMCI7IHRoZW4KKwkJaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgIGNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkgICoiICRpICIqKQorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBpPSIiCisJCSAgICA7OworCQkgIGVzYWMKKwkgICAgICAgIGZpCisJCWlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJCSAgZGVwbGliX21hdGNoZXM9YGV2YWwgXFwkZWNobyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcImAKKwkJICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzCisJCSAgZGVwbGliX21hdGNoPSQyCisJCSAgaWYgdGVzdCBgZXhwciAiJGxkZF9vdXRwdXQiIDogIi4qJGRlcGxpYl9tYXRjaCJgIC1uZSAwIDsgdGhlbgorCQkgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgZWxzZQorCQkgICAgZHJvcHBlZGRlcHM9eWVzCisJCSAgICAkZWNobworCQkgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICAkZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgaXQgZm9yIgorCQkgICAgJGVjaG8gIioqKiBpdHMgZHluYW1pYyBkZXBlbmRlbmN5IGxpc3QgdGhhdCBwcm9ncmFtcyBnZXQgcmVzb2x2ZWQgd2l0aCBhdCBydW50aW1lLiIKKwkJICBmaQorCQlmaQorCSAgICAgIGVsc2UKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZWxzZQorCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKKwkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgorCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KKwkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKKwkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KKyAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkJJHJtIGNvbmZ0ZXN0CisJCSRMVENDICRMVENGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jICRpCisJCSMgRGlkIGl0IHdvcms/CisJCWlmIHRlc3QgIiQ/IiAtZXEgMCA7IHRoZW4KKwkJICBsZGRfb3V0cHV0PWBsZGQgY29uZnRlc3RgCisJCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQkgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCisJCSAgICAqIiAkaSAiKikKKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGk9IiIKKwkJICAgICAgOzsKKwkJICAgIGVzYWMKKwkJICBmaQorCQkgIGlmIHRlc3QgLW4gIiRpIiA7IHRoZW4KKwkJICAgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsIFxcJGVjaG8gXCIkbGlicmFyeV9uYW1lc19zcGVjXCJgCisJCSAgICBzZXQgZHVtbXkgJGRlcGxpYl9tYXRjaGVzCisJCSAgICBkZXBsaWJfbWF0Y2g9JDIKKwkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICBlbHNlCisJCSAgICAgIGRyb3BwZWRkZXBzPXllcworCQkgICAgICAkZWNobworCQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCisJCSAgICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJICAgICAgJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJICAgICAgJGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgorCQkgICAgICAkZWNobyAiKioqIGFzIGEgZHluYW1pYyBkZXBlbmRlbmN5IHRoYXQgcHJvZ3JhbXMgY2FuIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZmkKKwkJICBmaQorCQllbHNlCisJCSAgZHJvcHBlZGRlcHM9eWVzCisJCSAgJGVjaG8KKwkJICAkZWNobyAiKioqIFdhcm5pbmchICBMaWJyYXJ5ICRpIGlzIG5lZWRlZCBieSB0aGlzIGxpYnJhcnkgYnV0IEkgd2FzIG5vdCBhYmxlIHRvIgorCQkgICRlY2hvICIqKiogIG1ha2UgaXQgbGluayBpbiEgIFlvdSB3aWxsIHByb2JhYmx5IG5lZWQgdG8gaW5zdGFsbCBpdCBvciBzb21lIgorCQkgICRlY2hvICIqKiogbGlicmFyeSB0aGF0IGl0IGRlcGVuZHMgb24gYmVmb3JlIHRoaXMgbGlicmFyeSB3aWxsIGJlIGZ1bGx5IgorCQkgICRlY2hvICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgorCQlmaQorCSAgICAgIGVsc2UKKwkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgZmkKKwkgIDs7CisJZmlsZV9tYWdpYyopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisgICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgorCQkqIiAkYV9kZXBsaWIgIiopCisJCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGFfZGVwbGliPSIiCisJCSAgOzsKKwkJZXNhYworCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KKwkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCisJCSAgICAgICMgRm9sbG93IHNvZnQgbGlua3MuCisJCSAgICAgIGlmIGxzIC1sTGQgIiRwb3RlbnRfbGliIiAyPi9kZXYvbnVsbCBcCisJCQkgfCBncmVwICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCisJCQljb250aW51ZQorCQkgICAgICBmaQorCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KKwkJICAgICAgIyBlbmRsZXNzIGxvb3AgYmVsb3csIGluIGNhc2Ugb2YgY3ljbGljIGxpbmtzLgorCQkgICAgICAjIFdlIG1pZ2h0IHN0aWxsIGVudGVyIGFuIGVuZGxlc3MgbG9vcCwgc2luY2UgYSBsaW5rCisJCSAgICAgICMgbG9vcCBjYW4gYmUgY2xvc2VkIHdoaWxlIHdlIGZvbGxvdyBsaW5rcywKKwkJICAgICAgIyBidXQgc28gd2hhdD8KKwkJICAgICAgcG90bGliPSIkcG90ZW50X2xpYiIKKwkJICAgICAgd2hpbGUgdGVzdCAtaCAiJHBvdGxpYiIgMj4vZGV2L251bGw7IGRvCisJCQlwb3RsaWJsaW5rPWBscyAtbGQgJHBvdGxpYiB8ICR7U0VEfSAncy8uKiAtPiAvLydgCisJCQljYXNlICRwb3RsaWJsaW5rIGluCisJCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHBvdGxpYj0iJHBvdGxpYmxpbmsiOzsKKwkJCSopIHBvdGxpYj1gJGVjaG8gIlgkcG90bGliIiB8ICRYc2VkIC1lICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKKwkJCWVzYWMKKwkJICAgICAgZG9uZQorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgXAorCQkJIHwgJHtTRUR9IDEwcSBcCisJCQkgfCAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkJYV9kZXBsaWI9IiIKKwkJCWJyZWFrIDIKKwkJICAgICAgZmkKKwkJICBkb25lCisJCWRvbmUKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWRyb3BwZWRkZXBzPXllcworCQkkZWNobworCQkkZWNobyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCisJCSRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJJGVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgorCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCisJCWVsc2UKKwkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkZWNobyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCWZpCisJICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCisJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCSAgICBmaQorCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KKwkgIDs7CisJbWF0Y2hfcGF0dGVybiopCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCisJICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKKwkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCisJICAgIGlmIHRlc3QgLW4gIiRuYW1lIiAmJiB0ZXN0ICIkbmFtZSIgIT0gIjAiOyB0aGVuCisJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgorCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KKwkJKiIgJGFfZGVwbGliICIqKQorCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBhX2RlcGxpYj0iIgorCQkgIDs7CisJCWVzYWMKKwkgICAgICBmaQorCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCisJCWxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKKwkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCisJCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbworCQkgICAgcG90bGliPSIkcG90ZW50X2xpYiIgIyBzZWUgc3ltbGluay1jaGVjayBhYm92ZSBpbiBmaWxlX21hZ2ljIHRlc3QKKwkJICAgIGlmIGV2YWwgJGVjaG8gXCIkcG90ZW50X2xpYlwiIDI+L2Rldi9udWxsIFwKKwkJICAgICAgICB8ICR7U0VEfSAxMHEgXAorCQkgICAgICAgIHwgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBhX2RlcGxpYj0iIgorCQkgICAgICBicmVhayAyCisJCSAgICBmaQorCQkgIGRvbmUKKwkJZG9uZQorCSAgICAgIGZpCisJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KKwkJZHJvcHBlZGRlcHM9eWVzCisJCSRlY2hvCisJCSRlY2hvICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCSRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQkkZWNobyAiKioqIGJlY2F1c2UgSSBkaWQgY2hlY2sgdGhlIGxpbmtlciBwYXRoIGxvb2tpbmcgZm9yIGEgZmlsZSBzdGFydGluZyIKKwkJaWYgdGVzdCAteiAiJHBvdGxpYiIgOyB0aGVuCisJCSAgJGVjaG8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKKwkJZWxzZQorCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgorCQkgICRlY2hvICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJZmkKKwkgICAgICBmaQorCSAgICBlbHNlCisJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KKwkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJICAgIGZpCisJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgorCSAgOzsKKwlub25lIHwgdW5rbm93biB8ICopCisJICBuZXdkZXBsaWJzPSIiCisJICB0bXBfZGVwbGlicz1gJGVjaG8gIlggJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyQvLycgXAorCSAgICAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCisJICAgIGZvciBpIGluICRwcmVkZXBzICRwb3N0ZGVwcyA7IGRvCisJICAgICAgIyBjYW4ndCB1c2UgWHNlZCBiZWxvdywgYmVjYXVzZSAkaSBtaWdodCBjb250YWluICcvJworCSAgICAgIHRtcF9kZXBsaWJzPWAkZWNobyAiWCAkdG1wX2RlcGxpYnMiIHwgJHtTRUR9IC1lICIxcyxeWCwsIiAtZSAicywkaSwsImAKKwkgICAgZG9uZQorCSAgZmkKKwkgIGlmICRlY2hvICJYICR0bXBfZGVwbGlicyIgfCAkWHNlZCAtZSAncy9bIAldLy9nJyBcCisJICAgIHwgZ3JlcCAuID4vZGV2L251bGw7IHRoZW4KKwkgICAgJGVjaG8KKwkgICAgaWYgdGVzdCAiWCRkZXBsaWJzX2NoZWNrX21ldGhvZCIgPSAiWG5vbmUiOyB0aGVuCisJICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHBsYXRmb3JtLiIKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBrbm93biB0byBiZSBzdXBwb3J0ZWQuIgorCSAgICBmaQorCSAgICAkZWNobyAiKioqIEFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgYmVpbmcgZHJvcHBlZC4iCisJICAgIGRyb3BwZWRkZXBzPXllcworCSAgZmkKKwkgIDs7CisJZXNhYworCXZlcnN1ZmZpeD0kdmVyc3VmZml4X3NhdmUKKwltYWpvcj0kbWFqb3Jfc2F2ZQorCXJlbGVhc2U9JHJlbGVhc2Vfc2F2ZQorCWxpYm5hbWU9JGxpYm5hbWVfc2F2ZQorCW5hbWU9JG5hbWVfc2F2ZQorCisJY2FzZSAkaG9zdCBpbgorCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkZWNobyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJICA7OworCWVzYWMKKworCWlmIHRlc3QgIiRkcm9wcGVkZGVwcyIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiRtb2R1bGUiID0geWVzOyB0aGVuCisJICAgICRlY2hvCisJICAgICRlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJGVjaG8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICAkZWNobyAiKioqIGEgc3RhdGljIG1vZHVsZSwgdGhhdCBzaG91bGQgd29yayBhcyBsb25nIGFzIHRoZSBkbG9wZW5pbmciCisJICAgICRlY2hvICIqKiogYXBwbGljYXRpb24gaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZy4iCisJICAgIGlmIHRlc3QgLXogIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJICAgICAgJGVjaG8KKwkgICAgICAkZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJICAgICAgJGVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJICAgICAgJGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICAkZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJICAgIGZpCisJICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSBubzsgdGhlbgorCSAgICAgIG9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCSAgICAgIGJ1aWxkX29sZF9saWJzPXllcworCSAgICBlbHNlCisJICAgICAgYnVpbGRfbGlidG9vbF9saWJzPW5vCisJICAgIGZpCisJICBlbHNlCisJICAgICRlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICAkZWNobyAiKioqIGF1dG9tYXRpY2FsbHkgYWRkZWQgd2hlbmV2ZXIgYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIHRoaXMgbGlicmFyeSIKKwkgICAgJGVjaG8gIioqKiBvciBpcyBkZWNsYXJlZCB0byAtZGxvcGVuIGl0LiIKKworCSAgICBpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IG5vOyB0aGVuCisJICAgICAgJGVjaG8KKwkgICAgICAkZWNobyAiKioqIFNpbmNlIHRoaXMgbGlicmFyeSBtdXN0IG5vdCBjb250YWluIHVuZGVmaW5lZCBzeW1ib2xzLCIKKwkgICAgICAkZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgJGVjaG8gIioqKiBpdCB3YXMgZXhwbGljaXRseSByZXF1ZXN0ZWQgd2l0aCAtbm8tdW5kZWZpbmVkLCIKKwkgICAgICAkZWNobyAiKioqIGxpYnRvb2wgd2lsbCBvbmx5IGNyZWF0ZSBhIHN0YXRpYyB2ZXJzaW9uIG9mIGl0LiIKKwkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KKwkJb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKKwkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQorCQlidWlsZF9vbGRfbGlicz15ZXMKKwkgICAgICBlbHNlCisJCWJ1aWxkX2xpYnRvb2xfbGlicz1ubworCSAgICAgIGZpCisJICAgIGZpCisJICBmaQorCWZpCisJIyBEb25lIGNoZWNraW5nIGRlcGxpYnMhCisJZGVwbGlicz0kbmV3ZGVwbGlicworICAgICAgZmkKKworCisgICAgICAjIG1vdmUgbGlicmFyeSBzZWFyY2ggcGF0aHMgdGhhdCBjb2luY2lkZSB3aXRoIHBhdGhzIHRvIG5vdCB5ZXQKKyAgICAgICMgaW5zdGFsbGVkIGxpYnJhcmllcyB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBsaWJyYXJ5IHNlYXJjaCBsaXN0CisgICAgICBuZXdfbGlicz0KKyAgICAgIGZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCisJY2FzZSAiICRuZXdfbGlicyAiIGluCisJKiIgLUwkcGF0aC8kb2JqZGlyICIqKSA7OworCSopCisJICBjYXNlICIgJGRlcGxpYnMgIiBpbgorCSAgKiIgLUwkcGF0aC8kb2JqZGlyICIqKQorCSAgICBuZXdfbGlicz0iJG5ld19saWJzIC1MJHBhdGgvJG9iamRpciIgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZm9yIGRlcGxpYiBpbiAkZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBkZXBsaWJzPSIkbmV3X2xpYnMiCisKKworICAgICAgIyBBbGwgdGhlIGxpYnJhcnktc3BlY2lmaWMgdmFyaWFibGVzIChpbnN0YWxsX2xpYmRpciBpcyBzZXQgYWJvdmUpLgorICAgICAgbGlicmFyeV9uYW1lcz0KKyAgICAgIG9sZF9saWJyYXJ5PQorICAgICAgZGxuYW1lPQorCisgICAgICAjIFRlc3QgYWdhaW4sIHdlIG1heSBoYXZlIGRlY2lkZWQgbm90IHRvIGJ1aWxkIGl0IGFueSBtb3JlCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgorCWlmIHRlc3QgIiRoYXJkY29kZV9pbnRvX2xpYnMiID0geWVzOyB0aGVuCisJICAjIEhhcmRjb2RlIHRoZSBsaWJyYXJ5IHBhdGhzCisJICBoYXJkY29kZV9saWJkaXJzPQorCSAgZGVwX3JwYXRoPQorCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKKwkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlpZiB0ZXN0IC16ICIkaGFyZGNvZGVfbGliZGlycyI7IHRoZW4KKwkJICBoYXJkY29kZV9saWJkaXJzPSIkbGliZGlyIgorCQllbHNlCisJCSAgIyBKdXN0IGFjY3VtdWxhdGUgdGhlIHVuaXF1ZSBsaWJkaXJzLgorCQkgIGNhc2UgJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIGluCisJCSAgKiIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIqKQorCQkgICAgOzsKKwkJICAqKQorCQkgICAgaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCSAgICA7OworCQkgIGVzYWMKKwkJZmkKKwkgICAgICBlbHNlCisJCWV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKwkJZGVwX3JwYXRoPSIkZGVwX3JwYXRoICRmbGFnIgorCSAgICAgIGZpCisJICAgIGVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgICAgIGNhc2UgIiRwZXJtX3JwYXRoICIgaW4KKwkgICAgICAqIiAkbGliZGlyICIqKSA7OworCSAgICAgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZG9uZQorCSAgIyBTdWJzdGl0dXRlIHRoZSBoYXJkY29kZWQgbGliZGlycyBpbnRvIHRoZSBycGF0aC4KKwkgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiAmJgorCSAgICAgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJICAgIGxpYmRpcj0iJGhhcmRjb2RlX2xpYmRpcnMiCisJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIjsgdGhlbgorCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgorCSAgICBlbHNlCisJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIGZpCisJICBmaQorCSAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkcGVybV9ycGF0aCI7IHRoZW4KKwkgICAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgICAgcnBhdGg9CisJICAgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCisJICAgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBkb25lCisJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgorCSAgZmkKKwkgIHRlc3QgLW4gIiRkZXBfcnBhdGgiICYmIGRlcGxpYnM9IiRkZXBfcnBhdGggJGRlcGxpYnMiCisJZmkKKworCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKKwl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwlpZiB0ZXN0IC1uICIkc2hsaWJwYXRoIjsgdGhlbgorCSAgZXZhbCAiJHNobGlicGF0aF92YXI9JyRzaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyJzsgZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorCWZpCisKKwkjIEdldCB0aGUgcmVhbCBhbmQgbGluayBuYW1lcyBvZiB0aGUgbGlicmFyeS4KKwlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgorCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcworCXJlYWxuYW1lPSIkMiIKKwlzaGlmdDsgc2hpZnQKKworCWlmIHRlc3QgLW4gIiRzb25hbWVfc3BlYyI7IHRoZW4KKwkgIGV2YWwgc29uYW1lPVwiJHNvbmFtZV9zcGVjXCIKKwllbHNlCisJICBzb25hbWU9IiRyZWFsbmFtZSIKKwlmaQorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICBkbG5hbWU9JHNvbmFtZQorCWZpCisKKwlsaWI9IiRvdXRwdXRfb2JqZGlyLyRyZWFsbmFtZSIKKwlsaW5rbmFtZXM9CisJZm9yIGxpbmsKKwlkbworCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCWRvbmUKKworCSMgVXNlIHN0YW5kYXJkIG9iamVjdHMgaWYgdGhleSBhcmUgcGljCisJdGVzdCAteiAiJHBpY19mbGFnIiAmJiBsaWJvYmpzPWAkZWNobyAiWCRsaWJvYmpzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisKKwkjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCWlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgIGlmIHRlc3QgIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiID0geWVzIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIgorCSAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZXhwIgorCSAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgY21kcz0kZXhwb3J0X3N5bWJvbHNfY21kcworCSAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAgIGlmIGxlbj1gZXhwciAiWCRjbWQiIDogIi4qImAgJiYKKwkgICAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICAgICAgICAkc2hvdyAiJGNtZCIKKwkgICAgICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPworCSAgICAgICAgc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICBlbHNlCisJICAgICAgICAjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkgICAgICAgICRzaG93ICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkgICAgICAgIHNraXBwZWRfZXhwb3J0PToKKwkJIyBCcmVhayBvdXQgZWFybHksIG90aGVyd2lzZSBza2lwcGVkX2V4cG9ydCBtYXkgYmUKKwkJIyBzZXQgdG8gZmFsc2UgYnkgYSBsYXRlciBidXQgc2hvcnRlciBjbWQuCisJCWJyZWFrCisJICAgICAgZmkKKwkgICAgZG9uZQorCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAgICRzaG93ICIkRUdSRVAgLWUgXCIkZXhwb3J0X3N5bWJvbHNfcmVnZXhcIiBcIiRleHBvcnRfc3ltYm9sc1wiID4gXCIke2V4cG9ydF9zeW1ib2xzfVRcIiIKKwkgICAgICAkcnVuIGV2YWwgJyRFR1JFUCAtZSAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IiAiJGV4cG9ydF9zeW1ib2xzIiA+ICIke2V4cG9ydF9zeW1ib2xzfVQiJworCSAgICAgICRzaG93ICIkbXYgXCIke2V4cG9ydF9zeW1ib2xzfVRcIiBcIiRleHBvcnRfc3ltYm9sc1wiIgorCSAgICAgICRydW4gZXZhbCAnJG12ICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJworCSAgICBmaQorCSAgZmkKKwlmaQorCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgJHJ1biBldmFsICckZWNobyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwl0bXBfZGVwbGlicz0KKwlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCisJCWNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCQkqIiAkdGVzdF9kZXBsaWIgIiopIDs7CisJCSopCisJCQl0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKKwkJCTs7CisJCWVzYWMKKwlkb25lCisJZGVwbGlicz0iJHRtcF9kZXBsaWJzIgorCisJaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICBzYXZlX2xpYm9ianM9JGxpYm9ianMKKwkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICBlbHNlCisJICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgorCisJICAgIGZ1bmNfZXh0cmFjdF9hcmNoaXZlcyAkZ2VudG9wICRjb252ZW5pZW5jZQorCSAgICBsaWJvYmpzPSIkbGlib2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIiR0aHJlYWRfc2FmZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJHRocmVhZF9zYWZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgZmxhZz1cIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWNcIgorCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorCWZpCisKKwkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVUgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJZmkKKworCSMgRG8gZWFjaCBvZiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyAmJiB0ZXN0IC1uICIkbW9kdWxlX2NtZHMiIDsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRtb2R1bGVfZXhwc3ltX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkbW9kdWxlX2NtZHNcIgorCSAgICBjbWRzPSRtb2R1bGVfY21kcworCSAgZmkKKwllbHNlCisJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfZXhwc3ltX2NtZHNcIgorCSAgY21kcz0kYXJjaGl2ZV9leHBzeW1fY21kcworCWVsc2UKKwkgIGV2YWwgdGVzdF9jbWRzPVwiJGFyY2hpdmVfY21kc1wiCisJICBjbWRzPSRhcmNoaXZlX2NtZHMKKwkgIGZpCisJZmkKKworCWlmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYKKwkgICBsZW49YGV4cHIgIlgkdGVzdF9jbWRzIiA6ICIuKiIgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICA6CisJZWxzZQorCSAgIyBUaGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgcGllY2V3aXNlLgorCSAgJGVjaG8gImNyZWF0aW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLi4uIgorCisJICAjIFNhdmUgdGhlIHZhbHVlIG9mICRvdXRwdXQgYW5kICRsaWJvYmpzIGJlY2F1c2Ugd2Ugd2FudCB0bworCSAgIyB1c2UgdGhlbSBsYXRlci4gIElmIHdlIGhhdmUgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsIHdlCisJICAjIHdhbnQgdG8gdXNlIHNhdmVfbGlib2JqcyBhcyBpdCB3YXMgYmVmb3JlCisJICAjIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIHdhcyBleHBhbmRlZCwgYmVjYXVzZSB3ZSBjYW4ndAorCSAgIyBhc3N1bWUgdGhlIGxpbmtlciB1bmRlcnN0YW5kcyB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYy4KKwkgICMgVGhpcyBtYXkgaGF2ZSB0byBiZSByZXZpc2l0ZWQsIGluIGNhc2UgdG9vIG1hbnkKKwkgICMgY29udmVuaWVuY2UgbGlicmFyaWVzIGdldCBsaW5rZWQgaW4gYW5kIGVuZCB1cCBleGNlZWRpbmcKKwkgICMgdGhlIHNwZWMuCisJICBpZiB0ZXN0IC16ICIkY29udmVuaWVuY2UiIHx8IHRlc3QgLXogIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJICBmaQorCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAorCSAgb3V0cHV0X2xhPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCisKKwkgICMgQ2xlYXIgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGNyZWF0aW9uIGNvbW1hbmQgcXVldWUgYW5kCisJICAjIGluaXRpYWxpemUgayB0byBvbmUuCisJICB0ZXN0X2NtZHM9CisJICBjb25jYXRfY21kcz0KKwkgIG9iamxpc3Q9CisJICBkZWxmaWxlcz0KKwkgIGxhc3Rfcm9iaj0KKwkgIGs9MQorCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJICAjIExvb3Agb3ZlciB0aGUgbGlzdCBvZiBvYmplY3RzIHRvIGJlIGxpbmtlZC4KKwkgIGZvciBvYmogaW4gJHNhdmVfbGlib2JqcworCSAgZG8KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgIGlmIHRlc3QgIlgkb2JqbGlzdCIgPSBYIHx8CisJICAgICAgIHsgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgorCQkgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iOyB9OyB0aGVuCisJICAgICAgb2JqbGlzdD0iJG9iamxpc3QgJG9iaiIKKwkgICAgZWxzZQorCSAgICAgICMgVGhlIGNvbW1hbmQgJHRlc3RfY21kcyBpcyBhbG1vc3QgdG9vIGxvbmcsIGFkZCBhCisJICAgICAgIyBjb21tYW5kIHRvIHRoZSBxdWV1ZS4KKwkgICAgICBpZiB0ZXN0ICIkayIgLWVxIDEgOyB0aGVuCisJCSMgVGhlIGZpcnN0IGZpbGUgZG9lc24ndCBoYXZlIGEgcHJldmlvdXMgY29tbWFuZCB0byBhZGQuCisJCWV2YWwgY29uY2F0X2NtZHM9XCIkcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgICAgZWxzZQorCQkjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkjIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCQlldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBrPWBleHByICRrICsgMWAKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBvYmpsaXN0PSRvYmoKKwkgICAgICBsZW49MQorCSAgICBmaQorCSAgZG9uZQorCSAgIyBIYW5kbGUgdGhlIHJlbWFpbmluZyBvYmplY3RzIGJ5IGNyZWF0aW5nIG9uZSBsYXN0CisJICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgIyBmaWxlcyB3aWxsIGxpbmsgaW4gdGhlIGxhc3Qgb25lIGNyZWF0ZWQuCisJICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHMgJG9iamxpc3QgJGxhc3Rfcm9ialwiCisKKwkgIGlmICR7c2tpcHBlZF9leHBvcnQtZmFsc2V9OyB0aGVuCisJICAgICRzaG93ICJnZW5lcmF0aW5nIHN5bWJvbCBsaXN0IGZvciBcYCRsaWJuYW1lLmxhJyIKKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgJHJ1biAkcm0gJGV4cG9ydF9zeW1ib2xzCisJICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byBjcmVhdGUgdGhlIGV4cG9ydCBmaWxlLgorCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCRjb25jYXRfY21kc34kZXhwb3J0X3N5bWJvbHNfY21kc1wiCisgICAgICAgICAgZmkKKworCSAgIyBTZXQgdXAgYSBjb21tYW5kIHRvIHJlbW92ZSB0aGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMKKwkgICMgYWZ0ZXIgdGhleSBhcmUgdXNlZC4KKwkgIGk9MAorCSAgd2hpbGUgdGVzdCAiJGkiIC1sdCAiJGsiCisJICBkbworCSAgICBpPWBleHByICRpICsgMWAKKwkgICAgZGVsZmlsZXM9IiRkZWxmaWxlcyAkb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7aX0uJG9iamV4dCIKKwkgIGRvbmUKKworCSAgJGVjaG8gImNyZWF0aW5nIGEgdGVtcG9yYXJ5IHJlbG9hZGFibGUgb2JqZWN0IGZpbGU6ICRvdXRwdXQiCisKKwkgICMgTG9vcCB0aHJvdWdoIHRoZSBjb21tYW5kcyBnZW5lcmF0ZWQgYWJvdmUgYW5kIGV4ZWN1dGUgdGhlbS4KKwkgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgZm9yIGNtZCBpbiAkY29uY2F0X2NtZHM7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAkc2hvdyAiJGNtZCIKKwkgICAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKworCSAgbGlib2Jqcz0kb3V0cHV0CisJICAjIFJlc3RvcmUgdGhlIHZhbHVlIG9mIG91dHB1dC4KKwkgIG91dHB1dD0kc2F2ZV9vdXRwdXQKKworCSAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIiAmJiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCisJICAgIGV2YWwgbGlib2Jqcz1cIlwkbGlib2JqcyAkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgorCSAgZmkKKwkgICMgRXhwYW5kIHRoZSBsaWJyYXJ5IGxpbmtpbmcgY29tbWFuZHMgYWdhaW4gdG8gcmVzZXQgdGhlCisJICAjIHZhbHVlIG9mICRsaWJvYmpzIGZvciBwaWVjZXdpc2UgbGlua2luZy4KKworCSAgIyBEbyBlYWNoIG9mIHRoZSBhcmNoaXZlIGNvbW1hbmRzLgorCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXMgJiYgdGVzdCAtbiAiJG1vZHVsZV9jbWRzIiA7IHRoZW4KKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkbW9kdWxlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JG1vZHVsZV9leHBzeW1fY21kcworCSAgICBlbHNlCisJICAgICAgY21kcz0kbW9kdWxlX2NtZHMKKwkgICAgZmkKKwkgIGVsc2UKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiOyB0aGVuCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCisJICAgIGZpCisJICBmaQorCisJICAjIEFwcGVuZCB0aGUgY29tbWFuZCB0byByZW1vdmUgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzCisJICAjIHRvIHRoZSBqdXN0LXJlc2V0ICRjbWRzLgorCSAgZXZhbCBjbWRzPVwiXCRjbWRzflwkcm0gJGRlbGZpbGVzXCIKKwlmaQorCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCWZvciBjbWQgaW4gJGNtZHM7IGRvCisJICBJRlM9IiRzYXZlX2lmcyIKKwkgIGV2YWwgY21kPVwiJGNtZFwiCisJICAkc2hvdyAiJGNtZCIKKwkgICRydW4gZXZhbCAiJGNtZCIgfHwgeworCSAgICBsdF9leGl0PSQ/CisKKwkgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0CisJICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJworCSAgICBmaQorCisJICAgIGV4aXQgJGx0X2V4aXQKKwkgIH0KKwlkb25lCisJSUZTPSIkc2F2ZV9pZnMiCisKKwkjIFJlc3RvcmUgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgYW5kIGV4aXQKKwlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KKwkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJG12ICIkcmVhbG5hbWUiVSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CisKKwkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgorCSAgICAgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICAgICAkcnVuICR7cm19ciAiJGdlbnRvcCIKKwkgICAgZmkKKwkgIGZpCisKKwkgIGV4aXQgJEVYSVRfU1VDQ0VTUworCWZpCisKKwkjIENyZWF0ZSBsaW5rcyB0byB0aGUgcmVhbCBsaWJyYXJ5LgorCWZvciBsaW5rbmFtZSBpbiAkbGlua25hbWVzOyBkbworCSAgaWYgdGVzdCAiJHJlYWxuYW1lIiAhPSAiJGxpbmtuYW1lIjsgdGhlbgorCSAgICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSkiCisJICAgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZSknIHx8IGV4aXQgJD8KKwkgIGZpCisJZG9uZQorCisJIyBJZiAtbW9kdWxlIG9yIC1leHBvcnQtZHluYW1pYyB3YXMgc3BlY2lmaWVkLCBzZXQgdGhlIGRsbmFtZS4KKwlpZiB0ZXN0ICIkbW9kdWxlIiA9IHllcyB8fCB0ZXN0ICIkZXhwb3J0X2R5bmFtaWMiID0geWVzOyB0aGVuCisJICAjIE9uIGFsbCBrbm93biBvcGVyYXRpbmcgc3lzdGVtcywgdGhlc2UgYXJlIGlkZW50aWNhbC4KKwkgIGRsbmFtZT0iJHNvbmFtZSIKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBvYmopCisgICAgICBpZiB0ZXN0IC1uICIkZGVwbGlicyI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtUicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgorICAgICAgZmkKKworICAgICAgY2FzZSAkb3V0cHV0IGluCisgICAgICAqLmxvKQorCWlmIHRlc3QgLW4gIiRvYmpzJG9sZF9kZXBsaWJzIjsgdGhlbgorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGJ1aWxkIGxpYnJhcnkgb2JqZWN0IFxgJG91dHB1dCcgZnJvbSBub24tbGlidG9vbCBvYmplY3RzIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCWxpYm9iaj0iJG91dHB1dCIKKwlvYmo9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCTs7CisgICAgICAqKQorCWxpYm9iaj0KKwlvYmo9IiRvdXRwdXQiCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBEZWxldGUgdGhlIG9sZCBvYmplY3RzLgorICAgICAgJHJ1biAkcm0gJG9iaiAkbGlib2JqCisKKyAgICAgICMgT2JqZWN0cyBmcm9tIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFRoaXMgYXNzdW1lcworICAgICAgIyBzaW5nbGUtdmVyc2lvbiBjb252ZW5pZW5jZSBsaWJyYXJpZXMuICBXaGVuZXZlciB3ZSBjcmVhdGUKKyAgICAgICMgZGlmZmVyZW50IG9uZXMgZm9yIFBJQy9ub24tUElDLCB0aGlzIHdlJ2xsIGhhdmUgdG8gZHVwbGljYXRlCisgICAgICAjIHRoZSBleHRyYWN0aW9uLgorICAgICAgcmVsb2FkX2NvbnZfb2Jqcz0KKyAgICAgIGdlbnRvcD0KKyAgICAgICMgcmVsb2FkX2NtZHMgcnVucyAkTEQgZGlyZWN0bHksIHNvIGxldCB1cyBnZXQgcmlkIG9mCisgICAgICAjIC1XbCBmcm9tIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjCisgICAgICB3bD0KKworICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgorCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KKwkgIGV2YWwgcmVsb2FkX2NvbnZfb2Jqcz1cIlwkcmVsb2FkX29ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwllbHNlCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b2JqfXgiCisJICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCisJICByZWxvYWRfY29udl9vYmpzPSIkcmVsb2FkX29ianMgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgQ3JlYXRlIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSQnL2QnIC1lICcvXC5saWIkL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CisKKyAgICAgIG91dHB1dD0iJG9iaiIKKyAgICAgIGNtZHM9JHJlbG9hZF9jbWRzCisgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKyAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJSUZTPSIkc2F2ZV9pZnMiCisJZXZhbCBjbWQ9XCIkY21kXCIKKwkkc2hvdyAiJGNtZCIKKwkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfaWZzIgorCisgICAgICAjIEV4aXQgaWYgd2UgYXJlbid0IGRvaW5nIGEgbGlicmFyeSBvYmplY3QgZmlsZS4KKyAgICAgIGlmIHRlc3QgLXogIiRsaWJvYmoiOyB0aGVuCisJaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKKwkgICRydW4gJHtybX1yICRnZW50b3AKKwlmaQorCisJZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgorCSAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgorCSAgJHJ1biAke3JtfXIgJGdlbnRvcAorCWZpCisKKwkjIENyZWF0ZSBhbiBpbnZhbGlkIGxpYnRvb2wgb2JqZWN0IGlmIG5vIFBJQywgc28gdGhhdCB3ZSBkb24ndAorCSMgYWNjaWRlbnRhbGx5IGxpbmsgaXQgaW50byBhIHByb2dyYW0uCisJIyAkc2hvdyAiZWNobyB0aW1lc3RhbXAgPiAkbGlib2JqIgorCSMgJHJ1biBldmFsICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiIHx8IGV4aXQgJD8KKwlleGl0ICRFWElUX1NVQ0NFU1MKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwaWNfZmxhZyIgfHwgdGVzdCAiJHBpY19tb2RlIiAhPSBkZWZhdWx0OyB0aGVuCisJIyBPbmx5IGRvIGNvbW1hbmRzIGlmIHdlIHJlYWxseSBoYXZlIGRpZmZlcmVudCBQSUMgb2JqZWN0cy4KKwlyZWxvYWRfb2Jqcz0iJGxpYm9ianMgJHJlbG9hZF9jb252X29ianMiCisJb3V0cHV0PSIkbGlib2JqIgorCWNtZHM9JHJlbG9hZF9jbWRzCisJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJZm9yIGNtZCBpbiAkY21kczsgZG8KKwkgIElGUz0iJHNhdmVfaWZzIgorCSAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICRzaG93ICIkY21kIgorCSAgJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisJZG9uZQorCUlGUz0iJHNhdmVfaWZzIgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAtbiAiJGdlbnRvcCI7IHRoZW4KKwkkc2hvdyAiJHtybX1yICRnZW50b3AiCisJJHJ1biAke3JtfXIgJGdlbnRvcAorICAgICAgZmkKKworICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworCisgICAgcHJvZykKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKikgb3V0cHV0PWAkZWNobyAkb3V0cHV0IHwgJHtTRUR9IC1lICdzLC5leGUkLCw7cywkLC5leGUsJ2AgOzsKKyAgICAgIGVzYWMKKyAgICAgIGlmIHRlc3QgLW4gIiR2aW5mbyI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8nIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIiAxPiYyCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBwcm9ncmFtcyIgMT4mMgorICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJHByZWxvYWQiID0geWVzOyB0aGVuCisJaWYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHVua25vd24gJiYgdGVzdCAiJGRsb3Blbl9zZWxmIiA9IHVua25vd24gJiYKKwkgICB0ZXN0ICIkZGxvcGVuX3NlbGZfc3RhdGljIiA9IHVua25vd247IHRoZW4KKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgQUNfTElCVE9PTF9ETE9QRU4nIG5vdCB1c2VkLiBBc3N1bWluZyBubyBkbG9wZW4gc3VwcG9ydC4iCisJZmkKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKKwkjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSBpcyB0aGUgU3lzdGVtIGZyYW1ld29yaworCWNvbXBpbGVfZGVwbGlicz1gJGVjaG8gIlggJGNvbXBpbGVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJZmluYWxpemVfZGVwbGlicz1gJGVjaG8gIlggJGZpbmFsaXplX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyAvIC1mcmFtZXdvcmsgU3lzdGVtIC8nYAorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICpkYXJ3aW4qKQorICAgICAgICAjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCisgICAgICAgIGlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KKyAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKKyAgICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgorICAgICAgICBmaQorICAgICAgICA7OworICAgICAgZXNhYworCisKKyAgICAgICMgbW92ZSBsaWJyYXJ5IHNlYXJjaCBwYXRocyB0aGF0IGNvaW5jaWRlIHdpdGggcGF0aHMgdG8gbm90IHlldAorICAgICAgIyBpbnN0YWxsZWQgbGlicmFyaWVzIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxpYnJhcnkgc2VhcmNoIGxpc3QKKyAgICAgIG5ld19saWJzPQorICAgICAgZm9yIHBhdGggaW4gJG5vdGluc3RfcGF0aDsgZG8KKwljYXNlICIgJG5ld19saWJzICIgaW4KKwkqIiAtTCRwYXRoLyRvYmpkaXIgIiopIDs7CisJKikKKwkgIGNhc2UgIiAkY29tcGlsZV9kZXBsaWJzICIgaW4KKwkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKKwkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIGZvciBkZXBsaWIgaW4gJGNvbXBpbGVfZGVwbGliczsgZG8KKwljYXNlICRkZXBsaWIgaW4KKwktTCopCisJICBjYXNlICIgJG5ld19saWJzICIgaW4KKwkgICoiICRkZXBsaWIgIiopIDs7CisJICAqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJICBlc2FjCisJICA7OworCSopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwllc2FjCisgICAgICBkb25lCisgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKKworCisgICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorCisgICAgICBpZiB0ZXN0IC1uICIkcnBhdGgkeHJwYXRoIjsgdGhlbgorCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KKwlmb3IgbGliZGlyIGluICRycGF0aCAkeHJwYXRoOyBkbworCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgorCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZG9uZQorICAgICAgZmkKKworICAgICAgIyBOb3cgaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aHMKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGNvbXBpbGVfcnBhdGggJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIHBlcm1fcnBhdGg9IiRwZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKwljYXNlICRob3N0IGluCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiopCisJICB0ZXN0YmluZGlyPWAkZWNobyAiWCRsaWJkaXIiIHwgJFhzZWQgLWUgJ3MqL2xpYiQqL2JpbionYAorCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokbGliZGlyOiIqKSA7OworCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworCSAgZXNhYworCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCisJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKKwkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICBlc2FjCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBjb21waWxlX3JwYXRoPSIkcnBhdGgiCisKKyAgICAgIHJwYXRoPQorICAgICAgaGFyZGNvZGVfbGliZGlycz0KKyAgICAgIGZvciBsaWJkaXIgaW4gJGZpbmFsaXplX3JwYXRoOyBkbworCWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCSAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiOyB0aGVuCisJICAgIGlmIHRlc3QgLXogIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgorCSAgICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRsaWJkaXIiCisJICAgIGVsc2UKKwkgICAgICAjIEp1c3QgYWNjdW11bGF0ZSB0aGUgdW5pcXVlIGxpYmRpcnMuCisJICAgICAgY2FzZSAkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IgaW4KKwkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCisJCTs7CisJICAgICAgKikKKwkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCTs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgZWxzZQorCSAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisJICAgIHJwYXRoPSIkcnBhdGggJGZsYWciCisJICBmaQorCWVsaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCSAgY2FzZSAiJGZpbmFsaXplX3Blcm1fcnBhdGggIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZpbmFsaXplX3Blcm1fcnBhdGg9IiRmaW5hbGl6ZV9wZXJtX3JwYXRoICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKyAgICAgIGRvbmUKKyAgICAgICMgU3Vic3RpdHV0ZSB0aGUgaGFyZGNvZGVkIGxpYmRpcnMgaW50byB0aGUgcnBhdGguCisgICAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciIgJiYKKwkgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCisJbGliZGlyPSIkaGFyZGNvZGVfbGliZGlycyIKKwlldmFsIHJwYXRoPVwiICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKKyAgICAgIGZpCisgICAgICBmaW5hbGl6ZV9ycGF0aD0iJHJwYXRoIgorCisgICAgICBpZiB0ZXN0IC1uICIkbGlib2JqcyIgJiYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSMgVHJhbnNmb3JtIGFsbCB0aGUgbGlicmFyeSBvYmplY3RzIGludG8gc3RhbmRhcmQgb2JqZWN0cy4KKwljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKyAgICAgIGZpCisKKyAgICAgIGRsc3ltcz0KKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJaWYgdGVzdCAtbiAiJE5NIiAmJiB0ZXN0IC1uICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorCSAgZGxzeW1zPSIke291dHB1dG5hbWV9Uy5jIgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IG5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIgMT4mMgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0IC1uICIkZGxzeW1zIjsgdGhlbgorCWNhc2UgJGRsc3ltcyBpbgorCSIiKSA7OworCSouYykKKwkgICMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJICBubGlzdD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5ubSIKKworCSAgJHNob3cgIiRybSAkbmxpc3QgJHtubGlzdH1TICR7bmxpc3R9VCIKKwkgICRydW4gJHJtICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCisKKwkgICMgUGFyc2UgdGhlIG5hbWUgbGlzdCBpbnRvIGEgc291cmNlIGZpbGUuCisJICAkc2hvdyAiY3JlYXRpbmcgJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKworCSAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gPiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKy8qICRkbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworLyogUHJldmVudCB0aGUgb25seSBraW5kIG9mIGRlY2xhcmF0aW9uIGNvbmZsaWN0cyB3ZSBjYW4gbWFrZS4gKi8KKyNkZWZpbmUgbHRfcHJlbG9hZGVkX3N5bWJvbHMgc29tZV9vdGhlcl9zeW1ib2wKKworLyogRXh0ZXJuYWwgc3ltYm9sIGRlY2xhcmF0aW9ucyBmb3IgdGhlIGNvbXBpbGVyLiAqL1wKKyIKKworCSAgaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgICAgJHNob3cgImdlbmVyYXRpbmcgc3ltYm9sIGxpc3QgZm9yIFxgJG91dHB1dCciCisKKwkgICAgdGVzdCAteiAiJHJ1biIgJiYgJGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAgICMgQWRkIG91ciBvd24gcHJvZ3JhbSBvYmplY3RzIHRvIHRoZSBzeW1ib2wgbGlzdC4KKwkgICAgcHJvZ2ZpbGVzPWAkZWNobyAiWCRvYmpzJG9sZF9kZXBsaWJzIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJICAgIGZvciBhcmcgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKKwkgICAgICAkcnVuIGV2YWwgIiROTSAkYXJnIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgZG9uZQorCisJICAgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgJHJ1biBldmFsICckRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVCcKKwkgICAgICAkcnVuIGV2YWwgJyRtdiAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgorCSAgICAgICRydW4gZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgICRydW4gZXZhbCAnJG12ICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgZmkKKworCSAgICAjIFByZXBhcmUgdGhlIGxpc3Qgb2YgZXhwb3J0ZWQgc3ltYm9scworCSAgICBpZiB0ZXN0IC16ICIkZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgICAkcnVuICRybSAkZXhwb3J0X3N5bWJvbHMKKwkgICAgICAkcnVuIGV2YWwgIiR7U0VEfSAtbiAtZSAnL146IEBQUk9HUkFNQCAkL2QnIC1lICdzL14uKiBcKC4qXCkkL1wxL3AnICInPCAiJG5saXN0IiA+ICIkZXhwb3J0X3N5bWJvbHMiJworICAgICAgICAgICAgICBjYXNlICRob3N0IGluCisgICAgICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisJICAgICAgICAkcnVuIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJCSRydW4gZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgIGVzYWMKKwkgICAgZWxzZQorCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1lICdzL1woW10uWypeJF1cKS9cXFxcXDEvZycgLWUgJ3MvXi8gLycgLWUgJ3MvJC8kLyciJyA8ICIkZXhwb3J0X3N5bWJvbHMiID4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCInCisJICAgICAgJHJ1biBldmFsICdncmVwIC1mICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5leHAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgJHJ1biBldmFsICdtdiAiJG5saXN0IlQgIiRubGlzdCInCisgICAgICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICAgICAgICRydW4gZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkJJHJ1biBldmFsICdjYXQgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgZXNhYworCSAgICBmaQorCSAgZmkKKworCSAgZm9yIGFyZyBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgJHNob3cgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGFyZyciCisJICAgIG5hbWU9YCRlY2hvICIkYXJnIiB8ICR7U0VEfSAtZSAncyVeLiovJSUnYAorCSAgICAkcnVuIGV2YWwgJyRlY2hvICI6ICRuYW1lICIgPj4gIiRubGlzdCInCisJICAgICRydW4gZXZhbCAiJE5NICRhcmcgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgorCSAgICAjIE1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IGFuIGVtcHR5IGZpbGUuCisJICAgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgICAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICAgICAkRUdSRVAgLXYgIiAoJGV4Y2x1ZGVfZXhwc3ltcykkIiAiJG5saXN0IiA+ICIkbmxpc3QiVAorCSAgICAgICRtdiAiJG5saXN0IlQgIiRubGlzdCIKKwkgICAgZmkKKworCSAgICAjIFRyeSBzb3J0aW5nIGFuZCB1bmlxdWlmeWluZyB0aGUgb3V0cHV0LgorCSAgICBpZiBncmVwIC12ICJeOiAiIDwgIiRubGlzdCIgfAorCQlpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJICBzb3J0IC1rIDMKKwkJZWxzZQorCQkgIHNvcnQgKzIKKwkJZmkgfAorCQl1bmlxID4gIiRubGlzdCJTOyB0aGVuCisJICAgICAgOgorCSAgICBlbHNlCisJICAgICAgZ3JlcCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtZiAiJG5saXN0IlM7IHRoZW4KKwkgICAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIicKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICcvKiBOT05FICovJyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKwkgICAgZmkKKworCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKworI3VuZGVmIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisKKyNpZiBkZWZpbmVkIChfX1NURENfXykgJiYgX19TVERDX18KKyMgZGVmaW5lIGx0X3B0ciB2b2lkICoKKyNlbHNlCisjIGRlZmluZSBsdF9wdHIgY2hhciAqCisjIGRlZmluZSBjb25zdAorI2VuZGlmCisKKy8qIFRoZSBtYXBwaW5nIGJldHdlZW4gc3ltYm9sIG5hbWVzIGFuZCBzeW1ib2xzLiAqLworIgorCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKKwkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAorLyogREFUQSBpbXBvcnRzIGZyb20gRExMcyBvbiBXSU4zMiBjYW4ndCBiZSBjb25zdCwgYmVjYXVzZQorICAgcnVudGltZSByZWxvY2F0aW9ucyBhcmUgcGVyZm9ybWVkIC0tIHNlZSBsZCdzIGRvY3VtZW50YXRpb24KKyAgIG9uIHBzZXVkby1yZWxvY3MgKi8KK3N0cnVjdCB7CisiCisJICAgICAgOzsKKwkgICAgKiApCisJICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKK2NvbnN0IHN0cnVjdCB7CisiCisJICAgICAgOzsKKwkgICAgZXNhYworCisKKwkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAorICBjb25zdCBjaGFyICpuYW1lOworICBsdF9wdHIgYWRkcmVzczsKK30KK2x0X3ByZWxvYWRlZF9zeW1ib2xzW10gPQore1wKKyIKKworCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIKKworCSAgICAkZWNobyA+PiAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIlwKKyAgezAsIChsdF9wdHIpIDB9Cit9OworCisvKiBUaGlzIHdvcmtzIGFyb3VuZCBhIHByb2JsZW0gaW4gRnJlZUJTRCBsaW5rZXIgKi8KKyNpZmRlZiBGUkVFQlNEX1dPUktBUk9VTkQKK3N0YXRpYyBjb25zdCB2b2lkICpsdF9wcmVsb2FkZWRfc2V0dXAoKSB7CisgIHJldHVybiBsdF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZlwKKyIKKwkgIGZpCisKKwkgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwkgIGNhc2UgJGhvc3QgaW4KKwkgICMgY29tcGlsaW5nIHRoZSBzeW1ib2wgdGFibGUgZmlsZSB3aXRoIHBpY19mbGFnIHdvcmtzIGFyb3VuZAorCSAgIyBhIEZyZWVCU0QgYnVnIHRoYXQgY2F1c2VzIHByb2dyYW1zIHRvIGNyYXNoIHdoZW4gLWxtIGlzCisJICAjIGxpbmtlZCBiZWZvcmUgYW55IG90aGVyIFBJQyBvYmplY3QuICBCdXQgd2UgbXVzdCBub3QgdXNlCisJICAjIHBpY19mbGFnIHdoZW4gbGlua2luZyB3aXRoIC1zdGF0aWMuICBUaGUgcHJvYmxlbSBleGlzdHMgaW4KKwkgICMgRnJlZUJTRCAyLjIuNiBhbmQgaXMgZml4ZWQgaW4gRnJlZUJTRCAzLjEuCisJICAqLSotZnJlZWJzZDIqfCotKi1mcmVlYnNkMy4wKnwqLSotZnJlZWJzZGVsZjMuMCopCisJICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSAgICAqIiAtc3RhdGljICIqKSA7OworCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiOzsKKwkgICAgZXNhYzs7CisJICAqLSotaHB1eCopCisJICAgIGNhc2UgIiRjb21waWxlX2NvbW1hbmQgIiBpbgorCSAgICAqIiAtc3RhdGljICIqKSA7OworCSAgICAqKSBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciOzsKKwkgICAgZXNhYworCSAgZXNhYworCisJICAjIE5vdyBjb21waWxlIHRoZSBkeW5hbWljIHN5bWJvbCBmaWxlLgorCSAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyAgJExUQ0ZMQUdTIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgXCIkZGxzeW1zXCIpIgorCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJExUQ0MgICRMVENGTEFHUyAtYyRub19idWlsdGluX2ZsYWckcGljX2ZsYWdfZm9yX3N5bXRhYmxlICIkZGxzeW1zIiknIHx8IGV4aXQgJD8KKworCSAgIyBDbGVhbiB1cCB0aGUgZ2VuZXJhdGVkIGZpbGVzLgorCSAgJHNob3cgIiRybSAkb3V0cHV0X29iamRpci8kZGxzeW1zICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICIkbmxpc3QiICIke25saXN0fVMiICIke25saXN0fVQiCisKKwkgICMgVHJhbnNmb3JtIHRoZSBzeW1ib2wgZmlsZSBpbnRvIHRoZSBjb3JyZWN0IG5hbWUuCisgICAgICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgICAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiIgOyB0aGVuCisgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiAkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lImAKKyAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfS5kZWYgJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSJgCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lImAKKyAgICAgICAgICAgICAgZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSJgCisgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKiApCisgICAgICAgICAgICBjb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9JSJgCisgICAgICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lImAKKyAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogdW5rbm93biBzdWZmaXggZm9yIFxgJGRsc3ltcyciIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJIyBXZSBrZWVwIGdvaW5nIGp1c3QgaW4gY2FzZSB0aGUgdXNlciBkaWRuJ3QgcmVmZXIgdG8KKwkjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisJIyByZWFsbHkgd2FzIHJlcXVpcmVkLgorCisJIyBOdWxsaWZ5IHRoZSBzeW1ib2wgZmlsZS4KKwljb21waWxlX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfY29tbWFuZCIgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFhzZWQgLWUgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgIiRuZWVkX3JlbGluayIgPSBubyB8fCB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKwkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCisJbGlua19jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisKKwkjIFdlIGhhdmUgbm8gdW5pbnN0YWxsZWQgbGlicmFyeSBkZXBlbmRlbmNpZXMsIHNvIGZpbmFsaXplIHJpZ2h0IG5vdy4KKwkkc2hvdyAiJGxpbmtfY29tbWFuZCIKKwkkcnVuIGV2YWwgIiRsaW5rX2NvbW1hbmQiCisJZXhpdF9zdGF0dXM9JD8KKworCSMgRGVsZXRlIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJaWYgdGVzdCAtbiAiJGRsc3ltcyI7IHRoZW4KKwkgICRzaG93ICIkcm0gJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IgorCSAgJHJ1biAkcm0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSIKKwlmaQorCisJZXhpdCAkZXhpdF9zdGF0dXMKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCSMgV2Ugc2hvdWxkIHNldCB0aGUgc2hsaWJwYXRoX3ZhcgorCXJwYXRoPQorCWZvciBkaXIgaW4gJHRlbXBfcnBhdGg7IGRvCisJICBjYXNlICRkaXIgaW4KKwkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikKKwkgICAgIyBBYnNvbHV0ZSBwYXRoLgorCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgIDs7CisJICAqKQorCSAgICAjIFJlbGF0aXZlIHBhdGg6IGFkZCBhIHRoaXNkaXIgZW50cnkuCisJICAgIHJwYXRoPSIkcnBhdGhcJHRoaXNkaXIvJGRpcjoiCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCXRlbXBfcnBhdGg9IiRycGF0aCIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGgiOyB0aGVuCisJY29tcGlsZV9jb21tYW5kPSIkc2hsaWJwYXRoX3Zhcj1cIiRjb21waWxlX3NobGlicGF0aCRmaW5hbGl6ZV9zaGxpYnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIgJGNvbXBpbGVfY29tbWFuZCIKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0IC1uICIkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgorCWZpbmFsaXplX2NvbW1hbmQ9IiRzaGxpYnBhdGhfdmFyPVwiJGZpbmFsaXplX3NobGlicGF0aFwkJHNobGlicGF0aF92YXJcIiAkZmluYWxpemVfY29tbWFuZCIKKyAgICAgIGZpCisKKyAgICAgIGNvbXBpbGVfdmFyPQorICAgICAgZmluYWxpemVfdmFyPQorICAgICAgaWYgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIjsgdGhlbgorCWlmIHRlc3QgLW4gIiRwZXJtX3JwYXRoIjsgdGhlbgorCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KKwkgIHJwYXRoPQorCSAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KKwkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgZG9uZQorCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisJaWYgdGVzdCAtbiAiJGZpbmFsaXplX3Blcm1fcnBhdGgiOyB0aGVuCisJICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgorCSAgcnBhdGg9CisJICBmb3IgZGlyIGluICRmaW5hbGl6ZV9wZXJtX3JwYXRoOyBkbworCSAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICBkb25lCisJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgorCWZpCisgICAgICBmaQorCisgICAgICBpZiB0ZXN0ICIkbm9faW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkjIFdlIGRvbid0IG5lZWQgdG8gY3JlYXRlIGEgd3JhcHBlciBzY3JpcHQuCisJbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAorCSMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGUuCisJJHJ1biAkcm0gJG91dHB1dAorCSMgTGluayB0aGUgZXhlY3V0YWJsZSBhbmQgZXhpdAorCSRzaG93ICIkbGlua19jb21tYW5kIgorCSRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCWV4aXQgJEVYSVRfU1VDQ0VTUworICAgICAgZmkKKworICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKwkjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKwlsaW5rX2NvbW1hbmQ9IiRjb21waWxlX3ZhciRjb21waWxlX2NvbW1hbmQkY29tcGlsZV9ycGF0aCIKKwlyZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCisJJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogdGhpcyBwbGF0Zm9ybSBkb2VzIG5vdCBsaWtlIHVuaW5zdGFsbGVkIHNoYXJlZCBsaWJyYXJpZXMiIDE+JjIKKwkkZWNobyAiJG1vZGVuYW1lOiBcYCRvdXRwdXQnIHdpbGwgYmUgcmVsaW5rZWQgZHVyaW5nIGluc3RhbGxhdGlvbiIgMT4mMgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCisJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZydgCisJICBlbHNlCisJICAgICMgZmFzdF9pbnN0YWxsIGlzIHNldCB0byBuZWVkbGVzcworCSAgICByZWxpbmtfY29tbWFuZD0KKwkgIGZpCisJZWxzZQorCSAgbGlua19jb21tYW5kPSIkY29tcGlsZV92YXIkY29tcGlsZV9jb21tYW5kJGNvbXBpbGVfcnBhdGgiCisJICByZWxpbmtfY29tbWFuZD0iJGZpbmFsaXplX3ZhciRmaW5hbGl6ZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgorCWZpCisgICAgICBmaQorCisgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisgICAgICBsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCisKKyAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgorICAgICAgJHJ1biAkcm0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorCisgICAgICAkc2hvdyAiJGxpbmtfY29tbWFuZCIKKyAgICAgICRydW4gZXZhbCAiJGxpbmtfY29tbWFuZCIgfHwgZXhpdCAkPworCisgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgorICAgICAgJHNob3cgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KKyAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KKwkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCisJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCisJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgZWxpZiBldmFsIHZhcl92YWx1ZT1cJCR2YXI7IHRlc3QgLXogIiR2YXJfdmFsdWUiOyB0aGVuCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPTsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGVsc2UKKwkgICAgdmFyX3ZhbHVlPWAkZWNobyAiWCR2YXJfdmFsdWUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj1cIiR2YXJfdmFsdWVcIjsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKKwkgIGZpCisJZG9uZQorCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCisJcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgUXVvdGUgJGVjaG8gZm9yIHNoaXBwaW5nLgorICAgICAgaWYgdGVzdCAiWCRlY2hvIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCisJY2FzZSAkcHJvZ3BhdGggaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OworCWVzYWMKKwlxZWNobz1gJGVjaG8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgZWxzZQorCXFlY2hvPWAkZWNobyAiWCRlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGZpCisKKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgb3VyIHJ1biBjb21tYW5kIGlzIG5vbi1udWxsLgorICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwkjIHdpbjMyIHdpbGwgdGhpbmsgdGhlIHNjcmlwdCBpcyBhIGJpbmFyeSBpZiBpdCBoYXMKKwkjIGEgLmV4ZSBzdWZmaXgsIHNvIHdlIHN0cmlwIGl0IG9mZiBoZXJlLgorCWNhc2UgJG91dHB1dCBpbgorCSAgKi5leGUpIG91dHB1dD1gJGVjaG8gJG91dHB1dHwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJZXNhYworCSMgdGVzdCBmb3IgY3lnd2luIGJlY2F1c2UgbXYgZmFpbHMgdy9vIC5leGUgZXh0ZW5zaW9ucworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qKQorCSAgICBleGVleHQ9LmV4ZQorCSAgICBvdXRwdXRuYW1lPWAkZWNobyAkb3V0cHV0bmFtZXwke1NFRH0gJ3MsLmV4ZSQsLCdgIDs7CisJICAqKSBleGVleHQ9IDs7CisJZXNhYworCWNhc2UgJGhvc3QgaW4KKwkgICpjeWd3aW4qIHwgKm1pbmd3KiApCisgICAgICAgICAgICBvdXRwdXRfbmFtZT1gYmFzZW5hbWUgJG91dHB1dGAKKyAgICAgICAgICAgIG91dHB1dF9wYXRoPWBkaXJuYW1lICRvdXRwdXRgCisgICAgICAgICAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisgICAgICAgICAgICBjd3JhcHBlcj0iJG91dHB1dF9wYXRoLyRvdXRwdXRfbmFtZS5leGUiCisgICAgICAgICAgICAkcm0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcgorICAgICAgICAgICAgdHJhcCAiJHJtICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkgICAgY2F0ID4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisKKy8qICRjd3JhcHBlcnNvdXJjZSAtIHRlbXBvcmFyeSB3cmFwcGVyIGV4ZWN1dGFibGUgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyAgIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAtIEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVAKKworICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCisgICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisKKyAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KKworICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIi9iaW4vc2ggJG91dHB1dCIsCisgICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCisgICBleGVjICRvYmpkaXIvJG91dHB1dG5hbWUgZGlyZWN0bHkuCisqLworRU9GCisJICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2U8PCJFT0YiCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNpZiBkZWZpbmVkKFBBVEhfTUFYKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAorI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQorIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCisjZWxzZQorIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0CisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SCisjIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJworIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKKyAgZGVmaW5lZCAoX19PUzJfXykKKyMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCisjIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJworIyBlbmRpZgorIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCisjZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKKyAgICAgICAgKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCisjZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCisKKyNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQorI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCisjZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLworCisjZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCisjZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKKyAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKK30gd2hpbGUgKDApCisKKy8qIC1EREVCVUcgaXMgZmFpcmx5IGNvbW1vbiBpbiBDRkxBR1MuICAqLworI3VuZGVmIERFQlVHCisjaWYgZGVmaW5lZCBERUJVR1dSQVBQRVIKKyMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjIGRlZmluZSBERUJVRyhmb3JtYXQsIC4uLikKKyNlbmRpZgorCitjb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOworCit2b2lkICogeG1hbGxvYyAoc2l6ZV90IG51bSk7CitjaGFyICogeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKK2NvbnN0IGNoYXIgKiBiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqIGZpbmRfZXhlY3V0YWJsZShjb25zdCBjaGFyICp3cmFwcGVyKTsKK2ludCAgICBjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKnBhdGgpOworY2hhciAqIHN0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Cit2b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGNoYXIgKipuZXdhcmd6OworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgREVCVUcoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIixhcmd2WzBdKTsKKyAgREVCVUcoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIixwcm9ncmFtX25hbWUpOworICBuZXdhcmd6ID0gWE1BTExPQyhjaGFyICosIGFyZ2MrMik7CitFT0YKKworICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgorICBuZXdhcmd6WzBdID0gKGNoYXIgKikgeHN0cmR1cCgiJFNIRUxMIik7CitFT0YKKworICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PCJFT0YiCisgIG5ld2FyZ3pbMV0gPSBmaW5kX2V4ZWN1dGFibGUoYXJndlswXSk7CisgIGlmIChuZXdhcmd6WzFdID09IE5VTEwpCisgICAgbHRfZmF0YWwoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgREVCVUcoIihtYWluKSBmb3VuZCBleGUgYXQgOiAlc1xuIixuZXdhcmd6WzFdKTsKKyAgLyogd2Uga25vdyB0aGUgc2NyaXB0IGhhcyB0aGUgc2FtZSBuYW1lLCB3aXRob3V0IHRoZSAuZXhlICovCisgIC8qIHNvIG1ha2Ugc3VyZSBuZXdhcmd6WzFdIGRvZXNuJ3QgZW5kIGluIC5leGUgKi8KKyAgc3RyZW5kemFwKG5ld2FyZ3pbMV0sIi5leGUiKTsKKyAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKKyAgICBuZXdhcmd6W2krMV0gPSB4c3RyZHVwKGFyZ3ZbaV0pOworICBuZXdhcmd6W2FyZ2MrMV0gPSBOVUxMOworCisgIGZvciAoaT0wOyBpPGFyZ2MrMTsgaSsrKQorICB7CisgICAgREVCVUcoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsaSxuZXdhcmd6W2ldKTsKKyAgICA7CisgIH0KKworRU9GCisKKyAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgICAgICAgbWluZ3cqKQorICAgICAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKKyAgZXhlY3YoIiRTSEVMTCIsKGNoYXIgY29uc3QgKiopbmV3YXJneik7CitFT0YKKyAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisgIGV4ZWN2KCIkU0hFTEwiLG5ld2FyZ3opOworRU9GCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisKKyAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDwiRU9GIgorICByZXR1cm4gMTI3OworfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKiBwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOworICBpZiAoIXApCisgICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7CisKKyAgcmV0dXJuIHA7Cit9CisKK2NoYXIgKgoreHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQoreworICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwgc3RyaW5nKSA6IE5VTEwKKzsKK30KKworY29uc3QgY2hhciAqCitiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgIGNvbnN0IGNoYXIgKmJhc2U7CisKKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLworICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKiBwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBERUJVRygiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLCBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpOworICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKKyAgICByZXR1cm4gMDsKKworICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkgJiYKKyAgICAgICgKKyAgICAgICAgLyogTWluR1cgJiBuYXRpdmUgV0lOMzIgZG8gbm90IHN1cHBvcnQgU19JWE9USCBvciBTX0lYR1JQICovCisjaWYgZGVmaW5lZCAoU19JWE9USCkKKyAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYT1RIKSA9PSBTX0lYT1RIKSB8fAorI2VuZGlmCisjaWYgZGVmaW5lZCAoU19JWEdSUCkKKyAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYR1JQKSA9PSBTX0lYR1JQKSB8fAorI2VuZGlmCisgICAgICAgKChzdC5zdF9tb2RlICYgU19JWFVTUikgPT0gU19JWFVTUikpCisgICAgICApCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCisgICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlICovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciogd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIqIHA7CisgIGNvbnN0IGNoYXIqIHBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIqIGNvbmNhdF9uYW1lOworCisgIERFQlVHKCIoZmluZF9leGVjdXRhYmxlKSAgOiAlc1xuIiwgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKKworICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQorICAgIHJldHVybiBOVUxMOworCisgIC8qIEFic29sdXRlIHBhdGg/ICovCisjaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcil3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgeworICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQorICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKKyAgfQorICBlbHNlCisgIHsKKyNlbmRpZgorICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQorICAgICAgICByZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRShjb25jYXRfbmFtZSk7CisgICAgfQorI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgeworICAgICAgaGFzX3NsYXNoID0gMTsKKyAgICAgIGJyZWFrOworICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgIHsKKyAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLworICAgIGNvbnN0IGNoYXIqIHBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgaWYgKHBhdGggIT0gTlVMTCkKKyAgICB7CisgICAgICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKKyAgICAgIHsKKyAgICAgICAgY29uc3QgY2hhciogcTsKKyAgICAgICAgc2l6ZV90IHBfbGVuOworICAgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQorICAgICAgICAgIGlmIChJU19QQVRIX1NFUEFSQVRPUigqcSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcF9sZW4gPSBxIC0gcDsKKyAgICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOworICAgICAgICBpZiAocF9sZW4gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCisgICAgICAgICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgICAgICAgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgICAgICAgICAgdG1wX2xlbiA9IHN0cmxlbih0bXApOworICAgICAgICAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOworICAgICAgICAgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgICAgICAgICAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgICAgICAgICAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7CisgICAgICAgICAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworICAgICAgICAgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKyAgICAgICAgICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCisgICAgICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOworICAgICAgICBYRlJFRShjb25jYXRfbmFtZSk7CisgICAgICB9CisgICAgfQorICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCisgIH0KKyAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLworICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCisgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7CisgIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7CisgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7CisgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOworCisgIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFKGNvbmNhdF9uYW1lKTsKKyAgcmV0dXJuIE5VTEw7Cit9CisKK2NoYXIgKgorc3RyZW5kemFwKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQoreworICBzaXplX3QgbGVuLCBwYXRsZW47CisKKyAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0KHBhdCAhPSBOVUxMKTsKKworICBsZW4gPSBzdHJsZW4oc3RyKTsKKyAgcGF0bGVuID0gc3RybGVuKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgIHsKKyAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOworICAgIGlmIChzdHJjbXAoc3RyLCBwYXQpID09IDApCisgICAgICAqc3RyID0gJ1wwJzsKKyAgfQorICByZXR1cm4gc3RyOworfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICogbW9kZSwKKyAgICAgICAgICBjb25zdCBjaGFyICogbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiAiLCBwcm9ncmFtX25hbWUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKyAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKKyAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7CisgIHZhX2VuZCAoYXApOworfQorRU9GCisgICAgICAgICAgIyB3ZSBzaG91bGQgcmVhbGx5IHVzZSBhIGJ1aWxkLXBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyCisgICAgICAgICAgIyBoZXJlLCBidXQgT1RPSCwgdGhlIHdyYXBwZXJzIChzaGVsbCBzY3JpcHQgYW5kIHRoaXMgQyBvbmUpCisgICAgICAgICAgIyBhcmUgb25seSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZXhlY3V0ZSB0aGUgInJlYWwiIGJpbmFyeS4KKyAgICAgICAgICAjIFNpbmNlIHRoZSAicmVhbCIgYmluYXJ5IGlzIGJ1aWx0IGZvciAkaG9zdCwgdGhlbiB0aGlzCisgICAgICAgICAgIyB3cmFwcGVyIG1pZ2h0IGFzIHdlbGwgYmUgYnVpbHQgZm9yICRob3N0LCB0b28uCisgICAgICAgICAgJHJ1biAkTFRDQyAkTFRDRkxBR1MgLXMgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQorICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgJHJtICRvdXRwdXQKKyAgICAgICAgdHJhcCAiJHJtICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisKKwkkZWNobyA+ICRvdXRwdXQgIlwKKyMhICRTSEVMTAorCisjICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAorIworIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgorIworIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKyMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorCisjIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCisjIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorWHNlZD0nJHtTRUR9IC1lIDFzL15YLy8nCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIKKworIyBUaGlzIGVudmlyb25tZW50IHZhcmlhYmxlIGRldGVybWluZXMgb3VyIG9wZXJhdGlvbiBtb2RlLgoraWYgdGVzdCBcIlwkbGlidG9vbF9pbnN0YWxsX21hZ2ljXCIgPSBcIiRtYWdpY1wiOyB0aGVuCisgICMgaW5zdGFsbCBtb2RlIG5lZWRzIHRoZSBmb2xsb3dpbmcgdmFyaWFibGU6CisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJGVjaG8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZWNobz1cIiRxZWNob1wiCisgICAgZmlsZT1cIlwkMFwiCisgICAgIyBNYWtlIHN1cmUgZWNobyB3b3Jrcy4KKyAgICBpZiB0ZXN0IFwiWFwkMVwiID0gWC0tbm8tcmVleGVjOyB0aGVuCisgICAgICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KKyAgICAgIHNoaWZ0CisgICAgZWxpZiB0ZXN0IFwiWFxgKFwkZWNobyAnXHQnKSAyPi9kZXYvbnVsbFxgXCIgPSAnWFx0JzsgdGhlbgorICAgICAgIyBZaXBwZWUsIFwkZWNobyB3b3JrcyEKKyAgICAgIDoKKyAgICBlbHNlCisgICAgICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwsIGFuZCB0aGVuIG1heWJlIFwkZWNobyB3aWxsIHdvcmsuCisgICAgICBleGVjICRTSEVMTCBcIlwkMFwiIC0tbm8tcmVleGVjIFwkezErXCJcJEBcIn0KKyAgICBmaQorICBmaVwKKyIKKwkkZWNobyA+PiAkb3V0cHV0ICJcCisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkZWNobyBcIlhcJGZpbGVcIiB8IFwkWHNlZCAtZSAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKKyAgd2hpbGUgdGVzdCAtbiBcIlwkZmlsZVwiOyBkbworICAgIGRlc3RkaXI9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qXCQlJSdcYAorCisgICAgIyBJZiB0aGVyZSB3YXMgYSBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGNoYW5nZSB0aGlzZGlyLgorICAgIGlmIHRlc3QgXCJ4XCRkZXN0ZGlyXCIgIT0gXCJ4XCRmaWxlXCI7IHRoZW4KKyAgICAgIGNhc2UgXCJcJGRlc3RkaXJcIiBpbgorICAgICAgW1xcXFwvXSogfCBbQS1aYS16XTpbXFxcXC9dKikgdGhpc2Rpcj1cIlwkZGVzdGRpclwiIDs7CisgICAgICAqKSB0aGlzZGlyPVwiXCR0aGlzZGlyL1wkZGVzdGRpclwiIDs7CisgICAgICBlc2FjCisgICAgZmkKKworICAgIGZpbGU9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlXi4qLyUlJ1xgCisgICAgZmlsZT1cYGxzIC1sZCBcIlwkdGhpc2Rpci9cJGZpbGVcIiB8ICR7U0VEfSAtbiAncy8uKi0+IC8vcCdcYAorICBkb25lCisKKyAgIyBUcnkgdG8gZ2V0IHRoZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZS4KKyAgYWJzZGlyPVxgY2QgXCJcJHRoaXNkaXJcIiAmJiBwd2RcYAorICB0ZXN0IC1uIFwiXCRhYnNkaXJcIiAmJiB0aGlzZGlyPVwiXCRhYnNkaXJcIgorIgorCisJaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fCBcXAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJG1rZGlyIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorCisgICAgIyByZWxpbmsgZXhlY3V0YWJsZSBpZiBuZWNlc3NhcnkKKyAgICBpZiB0ZXN0IC1uIFwiXCRyZWxpbmtfY29tbWFuZFwiOyB0aGVuCisgICAgICBpZiByZWxpbmtfY29tbWFuZF9vdXRwdXQ9XGBldmFsIFwkcmVsaW5rX2NvbW1hbmQgMj4mMVxgOyB0aGVuIDoKKyAgICAgIGVsc2UKKwkkZWNobyBcIlwkcmVsaW5rX2NvbW1hbmRfb3V0cHV0XCIgPiYyCisJJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorICAgIGZpCisKKyAgICAkbXYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgMj4vZGV2L251bGwgfHwKKyAgICB7ICRybSBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsKKyAgICAgICRtdiBcIlwkcHJvZ2Rpci9cJGZpbGVcIiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgfQorICAgICRybSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorICBmaSIKKwllbHNlCisJICAkZWNobyA+PiAkb3V0cHV0ICJcCisgIHByb2dyYW09JyRvdXRwdXRuYW1lJworICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorIgorCWZpCisKKwkkZWNobyA+PiAkb3V0cHV0ICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAjIEFkZCBvdXIgb3duIGxpYnJhcnkgcGF0aCB0byAkc2hsaWJwYXRoX3ZhcgorICAgICRzaGxpYnBhdGhfdmFyPVwiJHRlbXBfcnBhdGhcJCRzaGxpYnBhdGhfdmFyXCIKKworICAgICMgU29tZSBzeXN0ZW1zIGNhbm5vdCBjb3BlIHdpdGggY29sb24tdGVybWluYXRlZCAkc2hsaWJwYXRoX3ZhcgorICAgICMgVGhlIHNlY29uZCBjb2xvbiBpcyBhIHdvcmthcm91bmQgZm9yIGEgYnVnIGluIEJlT1MgUjQgc2VkCisgICAgJHNobGlicGF0aF92YXI9XGBcJGVjaG8gXCJYXCQkc2hsaWJwYXRoX3ZhclwiIHwgXCRYc2VkIC1lICdzLzo6KlwkLy8nXGAKKworICAgIGV4cG9ydCAkc2hsaWJwYXRoX3ZhcgorIgorCWZpCisKKwkjIGZpeHVwIHRoZSBkbGwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICMgQWRkIHRoZSBkbGwgc2VhcmNoIHBhdGggY29tcG9uZW50cyB0byB0aGUgZXhlY3V0YWJsZSBQQVRICisgICAgUEFUSD0kZGxsc2VhcmNocGF0aDpcJFBBVEgKKyIKKwlmaQorCisJJGVjaG8gPj4gJG91dHB1dCAiXAorICAgIGlmIHRlc3QgXCJcJGxpYnRvb2xfZXhlY3V0ZV9tYWdpY1wiICE9IFwiJG1hZ2ljXCI7IHRoZW4KKyAgICAgICMgUnVuIHRoZSBhY3R1YWwgcHJvZ3JhbSB3aXRoIG91ciBhcmd1bWVudHMuCisiCisJY2FzZSAkaG9zdCBpbgorCSMgQmFja3NsYXNoZXMgc2VwYXJhdGUgZGlyZWN0b3JpZXMgb24gcGxhaW4gd2luZG93cworCSotKi1taW5ndyB8ICotKi1vczIqKQorCSAgJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisJICA7OworCisJKikKKwkgICRlY2hvID4+ICRvdXRwdXQgIlwKKyAgICAgIGV4ZWMgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQorIgorCSAgOzsKKwllc2FjCisJJGVjaG8gPj4gJG91dHB1dCAiXAorICAgICAgXCRlY2hvIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCR7MStcIlwkQFwifVwiCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorICBlbHNlCisgICAgIyBUaGUgcHJvZ3JhbSBkb2Vzbid0IGV4aXN0LgorICAgIFwkZWNobyBcIlwkMDogZXJyb3I6IFxcXGBcJHByb2dkaXIvXCRwcm9ncmFtJyBkb2VzIG5vdCBleGlzdFwiIDE+JjIKKyAgICBcJGVjaG8gXCJUaGlzIHNjcmlwdCBpcyBqdXN0IGEgd3JhcHBlciBmb3IgXCRwcm9ncmFtLlwiIDE+JjIKKyAgICAkZWNobyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgIGZpCitmaVwKKyIKKwljaG1vZCAreCAkb3V0cHV0CisgICAgICBmaQorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIHdlIG5lZWQgdG8gYnVpbGQgYW4gb2xkLWZhc2hpb25lZCBhcmNoaXZlLgorICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCisKKyAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KKwlvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCWFkZGxpYnM9IiRjb252ZW5pZW5jZSIKKwlidWlsZF9saWJ0b29sX2xpYnM9bm8KKyAgICAgIGVsc2UKKwlpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IG1vZHVsZTsgdGhlbgorCSAgb2xkb2Jqcz0iJGxpYm9ianNfc2F2ZSIKKwkgIGJ1aWxkX2xpYnRvb2xfbGlicz1ubworCWVsc2UKKwkgIG9sZG9ianM9IiRvbGRfZGVwbGlicyAkbm9uX3BpY19vYmplY3RzIgorCWZpCisJYWRkbGlicz0iJG9sZF9jb252ZW5pZW5jZSIKKyAgICAgIGZpCisKKyAgICAgIGlmIHRlc3QgLW4gIiRhZGRsaWJzIjsgdGhlbgorCWdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisKKwlmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkYWRkbGlicworCW9sZG9ianM9IiRvbGRvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorICAgICAgZmkKKworICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGFyY2hpdmUgY29tbWFuZHMuCisgICAgICBpZiB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyIgJiYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgICBjbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCisgICAgICBlbHNlCisJIyBQT1NJWCBkZW1hbmRzIG5vIHBhdGhzIHRvIGJlIGVuY29kZWQgaW4gYXJjaGl2ZXMuICBXZSBoYXZlCisJIyB0byBhdm9pZCBjcmVhdGluZyBhcmNoaXZlcyB3aXRoIGR1cGxpY2F0ZSBiYXNlbmFtZXMgaWYgd2UKKwkjIG1pZ2h0IGhhdmUgdG8gZXh0cmFjdCB0aGVtIGFmdGVyd2FyZHMsIGUuZy4sIHdoZW4gY3JlYXRpbmcgYQorCSMgc3RhdGljIGFyY2hpdmUgb3V0IG9mIGEgY29udmVuaWVuY2UgbGlicmFyeSwgb3Igd2hlbiBsaW5raW5nCisJIyB0aGUgZW50aXJldHkgb2YgYSBsaWJ0b29sIGFyY2hpdmUgaW50byBhbm90aGVyIChjdXJyZW50bHkKKwkjIG5vdCBzdXBwb3J0ZWQgYnkgbGlidG9vbCkuCisJaWYgKGZvciBvYmogaW4gJG9sZG9ianMKKwkgICAgZG8KKwkgICAgICAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJworCSAgICBkb25lIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KKwkgIDoKKwllbHNlCisJICAkZWNobyAiY29weWluZyBzZWxlY3RlZCBvYmplY3QgZmlsZXMgdG8gYXZvaWQgYmFzZW5hbWUgY29uZmxpY3RzLi4uIgorCisJICBpZiB0ZXN0IC16ICIkZ2VudG9wIjsgdGhlbgorCSAgICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgICBnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKworCSAgICAkc2hvdyAiJHtybX1yICRnZW50b3AiCisJICAgICRydW4gJHtybX1yICIkZ2VudG9wIgorCSAgICAkc2hvdyAiJG1rZGlyICRnZW50b3AiCisJICAgICRydW4gJG1rZGlyICIkZ2VudG9wIgorCSAgICBleGl0X3N0YXR1cz0kPworCSAgICBpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJGdlbnRvcCI7IHRoZW4KKwkgICAgICBleGl0ICRleGl0X3N0YXR1cworCSAgICBmaQorCSAgZmkKKworCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCisJICBvbGRvYmpzPQorCSAgY291bnRlcj0xCisJICBmb3Igb2JqIGluICRzYXZlX29sZG9ianMKKwkgIGRvCisJICAgIG9iamJhc2U9YCRlY2hvICJYJG9iaiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgorCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OworCSAgICAqW1wgL10iJG9iamJhc2UgIiopCisJICAgICAgd2hpbGUgOjsgZG8KKwkJIyBNYWtlIHN1cmUgd2UgZG9uJ3QgcGljayBhbiBhbHRlcm5hdGUgbmFtZSB0aGF0IGFsc28KKwkJIyBvdmVybGFwcy4KKwkJbmV3b2JqPWx0JGNvdW50ZXItJG9iamJhc2UKKwkJY291bnRlcj1gZXhwciAkY291bnRlciArIDFgCisJCWNhc2UgIiAkb2xkb2JqcyAiIGluCisJCSpbXCAvXSIkbmV3b2JqICIqKSA7OworCQkqKSBpZiB0ZXN0ICEgLWYgIiRnZW50b3AvJG5ld29iaiI7IHRoZW4gYnJlYWs7IGZpIDs7CisJCWVzYWMKKwkgICAgICBkb25lCisJICAgICAgJHNob3cgImxuICRvYmogJGdlbnRvcC8kbmV3b2JqIHx8IGNwICRvYmogJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgICRydW4gbG4gIiRvYmoiICIkZ2VudG9wLyRuZXdvYmoiIHx8CisJICAgICAgJHJ1biBjcCAiJG9iaiIgIiRnZW50b3AvJG5ld29iaiIKKwkgICAgICBvbGRvYmpzPSIkb2xkb2JqcyAkZ2VudG9wLyRuZXdvYmoiCisJICAgICAgOzsKKwkgICAgKikgb2xkb2Jqcz0iJG9sZG9ianMgJG9iaiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWZpCisKKwlldmFsIGNtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisKKwlpZiBsZW49YGV4cHIgIlgkY21kcyIgOiAiLioiYCAmJgorCSAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxzZQorCSAgIyB0aGUgY29tbWFuZCBsaW5lIGlzIHRvbyBsb25nIHRvIGxpbmsgaW4gb25lIHN0ZXAsIGxpbmsgaW4gcGFydHMKKwkgICRlY2hvICJ1c2luZyBwaWVjZXdpc2UgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgc2F2ZV9SQU5MSUI9JFJBTkxJQgorCSAgUkFOTElCPToKKwkgIG9iamxpc3Q9CisJICBjb25jYXRfY21kcz0KKwkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcworCisJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KKwkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcworCSAgZG8KKwkgICAgbGFzdF9vbGRvYmo9JG9iagorCSAgZG9uZQorCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCisJICBkbworCSAgICBvbGRvYmpzPSIkb2JqbGlzdCAkb2JqIgorCSAgICBvYmpsaXN0PSIkb2JqbGlzdCAkb2JqIgorCSAgICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKKwkgICAgaWYgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgorCSAgICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgICA6CisJICAgIGVsc2UKKwkgICAgICAjIHRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBiZSB1c2VkIGJlZm9yZSBpdCBnZXRzIHRvbyBsb25nCisJICAgICAgb2xkb2Jqcz0kb2JqbGlzdAorCSAgICAgIGlmIHRlc3QgIiRvYmoiID0gIiRsYXN0X29sZG9iaiIgOyB0aGVuCisJICAgICAgICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICAgICAgZmkKKwkgICAgICB0ZXN0IC16ICIkY29uY2F0X2NtZHMiIHx8IGNvbmNhdF9jbWRzPSRjb25jYXRfY21kc34KKwkgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9JG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgICAgIG9iamxpc3Q9CisJICAgIGZpCisJICBkb25lCisJICBSQU5MSUI9JHNhdmVfUkFOTElCCisJICBvbGRvYmpzPSRvYmpsaXN0CisJICBpZiB0ZXN0ICJYJG9sZG9ianMiID0gIlgiIDsgdGhlbgorCSAgICBldmFsIGNtZHM9XCJcJGNvbmNhdF9jbWRzXCIKKwkgIGVsc2UKKwkgICAgZXZhbCBjbWRzPVwiXCRjb25jYXRfY21kc35cJG9sZF9hcmNoaXZlX2NtZHNcIgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KKyAgICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKwlJRlM9IiRzYXZlX2lmcyIKKwkkc2hvdyAiJGNtZCIKKwkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJHNhdmVfaWZzIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLW4gIiRnZW5lcmF0ZWQiOyB0aGVuCisgICAgICAkc2hvdyAiJHtybX1yJGdlbmVyYXRlZCIKKyAgICAgICRydW4gJHtybX1yJGdlbmVyYXRlZAorICAgIGZpCisKKyAgICAjIE5vdyBjcmVhdGUgdGhlIGxpYnRvb2wgYXJjaGl2ZS4KKyAgICBjYXNlICRvdXRwdXQgaW4KKyAgICAqLmxhKQorICAgICAgb2xkX2xpYnJhcnk9CisgICAgICB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzICYmIG9sZF9saWJyYXJ5PSIkbGlibmFtZS4kbGliZXh0IgorICAgICAgJHNob3cgImNyZWF0aW5nICRvdXRwdXQiCisKKyAgICAgICMgUHJlc2VydmUgYW55IHZhcmlhYmxlcyB0aGF0IG1heSBhZmZlY3QgY29tcGlsZXIgYmVoYXZpb3IKKyAgICAgIGZvciB2YXIgaW4gJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rOyBkbworCWlmIGV2YWwgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiOyB0aGVuCisJICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgorCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWVsc2UKKwkgIHZhcl92YWx1ZT1gJGVjaG8gIlgkdmFyX3ZhbHVlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPVwiJHZhcl92YWx1ZVwiOyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCWZpCisgICAgICBkb25lCisgICAgICAjIFF1b3RlIHRoZSBsaW5rIGNvbW1hbmQgZm9yIHNoaXBwaW5nLgorICAgICAgcmVsaW5rX2NvbW1hbmQ9IihjZCBgcHdkYDsgJFNIRUxMICRwcm9ncGF0aCAkcHJlc2VydmVfYXJncyAtLW1vZGU9cmVsaW5rICRsaWJ0b29sX2FyZ3MgQGluc3RfcHJlZml4X2RpckApIgorICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgorCXJlbGlua19jb21tYW5kPQorICAgICAgZmkKKworCisgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KKyAgICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisJZm9yIGluc3RhbGxlZCBpbiBubyB5ZXM7IGRvCisJICBpZiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgorCSAgICBpZiB0ZXN0IC16ICIkaW5zdGFsbF9saWJkaXIiOyB0aGVuCisJICAgICAgYnJlYWsKKwkgICAgZmkKKwkgICAgb3V0cHV0PSIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSJpCisJICAgICMgUmVwbGFjZSBhbGwgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMgd2l0aCB0aGUgaW5zdGFsbGVkIG9uZXMKKwkgICAgbmV3ZGVwZW5kZW5jeV9saWJzPQorCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCisJICAgICAgY2FzZSAkZGVwbGliIGluCisJICAgICAgKi5sYSkKKwkJbmFtZT1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJCWV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCisJCWlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKKwkJICBleGl0ICRFWElUX0ZBSUxVUkUKKwkJZmkKKwkJbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgbmV3ZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzICRkZXBsaWIiIDs7CisJICAgICAgZXNhYworCSAgICBkb25lCisJICAgIGRlcGVuZGVuY3lfbGlicz0iJG5ld2RlcGVuZGVuY3lfbGlicyIKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgICAgICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCSAgICAgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCisJCWV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICAgIGZpCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgICAgICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCSAgICAgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCisJCSRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCisJCWV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICAgIGZpCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGxpYmRpci8kbmFtZSIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGVsc2UKKwkgICAgbmV3ZGxmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxmaWxlcz0iJG5ld2RsZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKwkgICAgbmV3ZGxwcmVmaWxlcz0KKwkgICAgZm9yIGxpYiBpbiAkZGxwcmVmaWxlczsgZG8KKwkgICAgICBjYXNlICRsaWIgaW4KKwkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnM9IiRsaWIiIDs7CisJCSopIGFicz1gcHdkYCIvJGxpYiIgOzsKKwkgICAgICBlc2FjCisJICAgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGFicyIKKwkgICAgZG9uZQorCSAgICBkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyIKKwkgIGZpCisJICAkcm0gJG91dHB1dAorCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICB0ZGxuYW1lPSRkbG5hbWUKKwkgIGNhc2UgJGhvc3QsJG91dHB1dCwkaW5zdGFsbGVkLCRtb2R1bGUsJGRsbmFtZSBpbgorCSAgICAqY3lnd2luKiwqbGFpLHllcyxubywqLmRsbCB8ICptaW5ndyosKmxhaSx5ZXMsbm8sKi5kbGwpIHRkbG5hbWU9Li4vYmluLyRkbG5hbWUgOzsKKwkgIGVzYWMKKwkgICRlY2hvID4gJG91dHB1dCAiXAorIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKKyMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAorIworIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCisjIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KKworIyBUaGUgbmFtZSB0aGF0IHdlIGNhbiBkbG9wZW4oMykuCitkbG5hbWU9JyR0ZGxuYW1lJworCisjIE5hbWVzIG9mIHRoaXMgbGlicmFyeS4KK2xpYnJhcnlfbmFtZXM9JyRsaWJyYXJ5X25hbWVzJworCisjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KK29sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCisKKyMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgorZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJworCisjIFZlcnNpb24gaW5mb3JtYXRpb24gZm9yICRsaWJuYW1lLgorY3VycmVudD0kY3VycmVudAorYWdlPSRhZ2UKK3JldmlzaW9uPSRyZXZpc2lvbgorCisjIElzIHRoaXMgYW4gYWxyZWFkeSBpbnN0YWxsZWQgbGlicmFyeT8KK2luc3RhbGxlZD0kaW5zdGFsbGVkCisKKyMgU2hvdWxkIHdlIHdhcm4gYWJvdXQgcG9ydGFiaWxpdHkgd2hlbiBsaW5raW5nIGFnYWluc3QgLW1vZHVsZXM/CitzaG91bGRub3RsaW5rPSRtb2R1bGUKKworIyBGaWxlcyB0byBkbG9wZW4vZGxwcmVvcGVuCitkbG9wZW49JyRkbGZpbGVzJworZGxwcmVvcGVuPSckZGxwcmVmaWxlcycKKworIyBEaXJlY3RvcnkgdGhhdCB0aGlzIGxpYnJhcnkgbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGluOgorbGliZGlyPSckaW5zdGFsbF9saWJkaXInIgorCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubyAmJiB0ZXN0ICIkbmVlZF9yZWxpbmsiID0geWVzOyB0aGVuCisJICAgICRlY2hvID4+ICRvdXRwdXQgIlwKK3JlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCisJICBmaQorCWRvbmUKKyAgICAgIGZpCisKKyAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KKyAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisgICAgICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkb3V0cHV0bmFtZSAmJiAkTE5fUyAuLi8kb3V0cHV0bmFtZSAkb3V0cHV0bmFtZSkiCisgICAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJG91dHB1dG5hbWUgJiYgJExOX1MgLi4vJG91dHB1dG5hbWUgJG91dHB1dG5hbWUpJyB8fCBleGl0ICQ/CisgICAgICA7OworICAgIGVzYWMKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICA7OworCisgICMgbGlidG9vbCBpbnN0YWxsIG1vZGUKKyAgaW5zdGFsbCkKKyAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBpbnN0YWxsIgorCisgICAgIyBUaGVyZSBtYXkgYmUgYW4gb3B0aW9uYWwgc2goMSkgYXJndW1lbnQgYXQgdGhlIGJlZ2lubmluZyBvZgorICAgICMgaW5zdGFsbF9wcm9nIChlc3BlY2lhbGx5IG9uIFdpbmRvd3MgTlQpLgorICAgIGlmIHRlc3QgIiRub25vcHQiID0gIiRTSEVMTCIgfHwgdGVzdCAiJG5vbm9wdCIgPSAvYmluL3NoIHx8CisgICAgICAgIyBBbGxvdyB0aGUgdXNlIG9mIEdOVSBzaHRvb2wncyBpbnN0YWxsIGNvbW1hbmQuCisgICAgICAgJGVjaG8gIlgkbm9ub3B0IiB8IGdyZXAgc2h0b29sID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAjIEFlc3RoZXRpY2FsbHkgcXVvdGUgaXQuCisgICAgICBhcmc9YCRlY2hvICJYJG5vbm9wdCIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCWFyZz0iXCIkYXJnXCIiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGluc3RhbGxfcHJvZz0iJGFyZyAiCisgICAgICBhcmc9IiQxIgorICAgICAgc2hpZnQKKyAgICBlbHNlCisgICAgICBpbnN0YWxsX3Byb2c9CisgICAgICBhcmc9JG5vbm9wdAorICAgIGZpCisKKyAgICAjIFRoZSByZWFsIGZpcnN0IGFyZ3VtZW50IHNob3VsZCBiZSB0aGUgbmFtZSBvZiB0aGUgaW5zdGFsbGF0aW9uIHByb2dyYW0uCisgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgorICAgIGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICBjYXNlICRhcmcgaW4KKyAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgIGFyZz0iXCIkYXJnXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgICBpbnN0YWxsX3Byb2c9IiRpbnN0YWxsX3Byb2ckYXJnIgorCisgICAgIyBXZSBuZWVkIHRvIGFjY2VwdCBhdCBsZWFzdCBhbGwgdGhlIEJTRCBpbnN0YWxsIGZsYWdzLgorICAgIGRlc3Q9CisgICAgZmlsZXM9CisgICAgb3B0cz0KKyAgICBwcmV2PQorICAgIGluc3RhbGxfdHlwZT0KKyAgICBpc2Rpcj1ubworICAgIHN0cmlwbWU9CisgICAgZm9yIGFyZworICAgIGRvCisgICAgICBpZiB0ZXN0IC1uICIkZGVzdCI7IHRoZW4KKwlmaWxlcz0iJGZpbGVzICRkZXN0IgorCWRlc3Q9JGFyZworCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1kKSBpc2Rpcj15ZXMgOzsKKyAgICAgIC1mKQorICAgICAgCWNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKwkqW1xcXCAvXWNwXCAqKSA7OworCSopIHByZXY9JGFyZyA7OworCWVzYWMKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKSBwcmV2PSRhcmcgOzsKKyAgICAgIC1zKQorCXN0cmlwbWU9IiAtcyIKKwljb250aW51ZQorCTs7CisgICAgICAtKikKKwk7OworICAgICAgKikKKwkjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZGVkIGFuIGFyZ3VtZW50LCB0aGVuIHNraXAgaXQuCisJaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisJICBwcmV2PQorCWVsc2UKKwkgIGRlc3Q9JGFyZworCSAgY29udGludWUKKwlmaQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSB0aGUgYXJndW1lbnQuCisgICAgICBhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCisgICAgICBjYXNlICRhcmcgaW4KKyAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQorCWFyZz0iXCIkYXJnXCIiCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIGluc3RhbGxfcHJvZz0iJGluc3RhbGxfcHJvZyAkYXJnIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGluc3RhbGwgcHJvZ3JhbSIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiIDE+JjIKKyAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiBubyBmaWxlIG9yIGRlc3RpbmF0aW9uIHNwZWNpZmllZCIgMT4mMgorICAgICAgZWxzZQorCSRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBkZXN0aW5hdGlvbiIgMT4mMgorICAgICAgZmkKKyAgICAgICRlY2hvICIkaGVscCIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgU3RyaXAgYW55IHRyYWlsaW5nIHNsYXNoIGZyb20gdGhlIGRlc3RpbmF0aW9uLgorICAgIGRlc3Q9YCRlY2hvICJYJGRlc3QiIHwgJFhzZWQgLWUgJ3MlLyQlJSdgCisKKyAgICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBkZXN0aW5hdGlvbiBpcyBhIGRpcmVjdG9yeS4KKyAgICB0ZXN0IC1kICIkZGVzdCIgJiYgaXNkaXI9eWVzCisgICAgaWYgdGVzdCAiJGlzZGlyIiA9IHllczsgdGhlbgorICAgICAgZGVzdGRpcj0iJGRlc3QiCisgICAgICBkZXN0bmFtZT0KKyAgICBlbHNlCisgICAgICBkZXN0ZGlyPWAkZWNobyAiWCRkZXN0IiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisgICAgICB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkZGVzdCIgJiYgZGVzdGRpcj0uCisgICAgICBkZXN0bmFtZT1gJGVjaG8gIlgkZGVzdCIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCisgICAgICAjIE5vdCBhIGRpcmVjdG9yeSwgc28gY2hlY2sgdG8gc2VlIHRoYXQgdGhlcmUgaXMgb25seSBvbmUgZmlsZSBzcGVjaWZpZWQuCisgICAgICBzZXQgZHVtbXkgJGZpbGVzCisgICAgICBpZiB0ZXN0ICIkIyIgLWd0IDI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiIDE+JjIKKwkkZWNobyAiJGhlbHAiIDE+JjIKKwlleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZpCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGRlc3RkaXInIG11c3QgYmUgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUiIDE+JjIKKwkgICRlY2hvICIkaGVscCIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKyAgICAgIGRvbmUKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBzdGF0aWNsaWJzPQorICAgIGZ1dHVyZV9saWJkaXJzPQorICAgIGN1cnJlbnRfbGliZGlycz0KKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisKKyAgICAgICMgRG8gZWFjaCBpbnN0YWxsYXRpb24uCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLiRsaWJleHQpCisJIyBEbyB0aGUgc3RhdGljIGxpYnJhcmllcyBsYXRlci4KKwlzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGZpbGUnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgorCSAgJGVjaG8gIiRoZWxwIiAxPiYyCisJICBleGl0ICRFWElUX0ZBSUxVUkUKKwlmaQorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwljYXNlICRmaWxlIGluCisJKi8qIHwgKlxcKikgLiAkZmlsZSA7OworCSopIC4gLi8kZmlsZSA7OworCWVzYWMKKworCSMgQWRkIHRoZSBsaWJkaXIgdG8gY3VycmVudF9saWJkaXJzIGlmIGl0IGlzIHRoZSBkZXN0aW5hdGlvbi4KKwlpZiB0ZXN0ICJYJGRlc3RkaXIiID0gIlgkbGliZGlyIjsgdGhlbgorCSAgY2FzZSAiJGN1cnJlbnRfbGliZGlycyAiIGluCisJICAqIiAkbGliZGlyICIqKSA7OworCSAgKikgY3VycmVudF9saWJkaXJzPSIkY3VycmVudF9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdXR1cmVfbGliZGlycz0iJGZ1dHVyZV9saWJkaXJzICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYC8KKwl0ZXN0ICJYJGRpciIgPSAiWCRmaWxlLyIgJiYgZGlyPQorCWRpcj0iJGRpciRvYmpkaXIiCisKKwlpZiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAjIERldGVybWluZSB0aGUgcHJlZml4IHRoZSB1c2VyIGhhcyBhcHBsaWVkIHRvIG91ciBmdXR1cmUgZGlyLgorCSAgaW5zdF9wcmVmaXhfZGlyPWAkZWNobyAiJGRlc3RkaXIiIHwgJFNFRCAicyUkbGliZGlyXCQlJSJgCisKKwkgICMgRG9uJ3QgYWxsb3cgdGhlIHVzZXIgdG8gcGxhY2UgdXMgb3V0c2lkZSBvZiBvdXIgZXhwZWN0ZWQKKwkgICMgbG9jYXRpb24gYi9jIHRoaXMgcHJldmVudHMgZmluZGluZyBkZXBlbmRlbnQgbGlicmFyaWVzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCB0byB0aGUgc2FtZSBwcmVmaXguCisJICAjIEF0IHByZXNlbnQsIHRoaXMgY2hlY2sgZG9lc24ndCBhZmZlY3Qgd2luZG93cyAuZGxsJ3MgdGhhdAorCSAgIyBhcmUgaW5zdGFsbGVkIGludG8gJGxpYmRpci8uLi9iaW4gKGN1cnJlbnRseSwgdGhhdCB3b3JrcyBmaW5lKQorCSAgIyBidXQgaXQncyBzb21ldGhpbmcgdG8ga2VlcCBhbiBleWUgb24uCisJICBpZiB0ZXN0ICIkaW5zdF9wcmVmaXhfZGlyIiA9ICIkZGVzdGRpciI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiOyB0aGVuCisJICAgICMgU3RpY2sgdGhlIGluc3RfcHJlZml4X2RpciBkYXRhIGludG8gdGhlIGxpbmsgY29tbWFuZC4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUtaW5zdC1wcmVmaXgtZGlyICRpbnN0X3ByZWZpeF9kaXIlImAKKwkgIGVsc2UKKwkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAicyVAaW5zdF9wcmVmaXhfZGlyQCUlImAKKwkgIGZpCisKKwkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHJlbGlua2luZyBcYCRmaWxlJyIgMT4mMgorCSAgJHNob3cgIiRyZWxpbmtfY29tbWFuZCIKKwkgIGlmICRydW4gZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICBlbHNlCisJICAgICRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgorCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZpCisJZmkKKworCSMgU2VlIHRoZSBuYW1lcyBvZiB0aGUgc2hhcmVkIGxpYnJhcnkuCisJc2V0IGR1bW15ICRsaWJyYXJ5X25hbWVzCisJaWYgdGVzdCAtbiAiJDIiOyB0aGVuCisJICByZWFsbmFtZT0iJDIiCisJICBzaGlmdAorCSAgc2hpZnQKKworCSAgc3JjbmFtZT0iJHJlYWxuYW1lIgorCSAgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIiAmJiBzcmNuYW1lPSIkcmVhbG5hbWUiVAorCisJICAjIEluc3RhbGwgdGhlIHNoYXJlZCBsaWJyYXJ5IGFuZCBidWlsZCB0aGUgc3ltbGlua3MuCisJICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIKKwkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZGlyLyRzcmNuYW1lICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPworCSAgaWYgdGVzdCAtbiAiJHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgJHNob3cgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiCisJICAgICRydW4gZXZhbCAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIgfHwgZXhpdCAkPworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgaWYgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIjsgdGhlbgorICAgICAgICAgICAgICAgICRzaG93ICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJHJtICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKyAgICAgICAgICAgICAgICAkcnVuIGV2YWwgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgorCSAgICAgIGZpCisJICAgIGRvbmUKKwkgIGZpCisKKwkgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKwkgIGxpYj0iJGRlc3RkaXIvJHJlYWxuYW1lIgorCSAgY21kcz0kcG9zdGluc3RhbGxfY21kcworCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisJICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgZXZhbCBjbWQ9XCIkY21kXCIKKwkgICAgJHNob3cgIiRjbWQiCisJICAgICRydW4gZXZhbCAiJGNtZCIgfHwgeworCSAgICAgIGx0X2V4aXQ9JD8KKworCSAgICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgorCQkkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScKKwkgICAgICBmaQorCisJICAgICAgZXhpdCAkbHRfZXhpdAorCSAgICB9CisJICBkb25lCisJICBJRlM9IiRzYXZlX2lmcyIKKwlmaQorCisJIyBJbnN0YWxsIHRoZSBwc2V1ZG8tbGlicmFyeSBmb3IgaW5mb3JtYXRpb24gcHVycG9zZXMuCisJbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCWluc3RuYW1lPSIkZGlyLyRuYW1lImkKKwkkc2hvdyAiJGluc3RhbGxfcHJvZyAkaW5zdG5hbWUgJGRlc3RkaXIvJG5hbWUiCisJJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgfHwgZXhpdCAkPworCisJIyBNYXliZSBpbnN0YWxsIHRoZSBzdGF0aWMgbGlicmFyeSwgdG9vLgorCXRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgc3RhdGljbGlicz0iJHN0YXRpY2xpYnMgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGRlc3RmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgorCWZpCisKKwkjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgZGVzdGluYXRpb24gb2xkLXN0eWxlIG9iamVjdCBmaWxlLgorCWNhc2UgJGRlc3RmaWxlIGluCisJKi5sbykKKwkgIHN0YXRpY2Rlc3Q9YCRlY2hvICJYJGRlc3RmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgJGVjaG8gIiRtb2RlbmFtZTogY2Fubm90IGNvcHkgYSBsaWJ0b29sIG9iamVjdCB0byBcYCRkZXN0ZmlsZSciIDE+JjIKKwkgICRlY2hvICIkaGVscCIgMT4mMgorCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICA7OworCWVzYWMKKworCSMgSW5zdGFsbCB0aGUgbGlidG9vbCBvYmplY3QgaWYgcmVxdWVzdGVkLgorCWlmIHRlc3QgLW4gIiRkZXN0ZmlsZSI7IHRoZW4KKwkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIKKwkgICRydW4gZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiIHx8IGV4aXQgJD8KKwlmaQorCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIHN0YXRpY29iaj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAiJGxvMm8iYAorCisJICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkc3RhdGljb2JqICRzdGF0aWNkZXN0IgorCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgfHwgZXhpdCAkPworCWZpCisJZXhpdCAkRVhJVF9TVUNDRVNTCisJOzsKKworICAgICAgKikKKwkjIEZpZ3VyZSBvdXQgZGVzdGluYXRpb24gZmlsZSBuYW1lLCBpZiBpdCB3YXNuJ3QgYWxyZWFkeSBzcGVjaWZpZWQuCisJaWYgdGVzdCAtbiAiJGRlc3RuYW1lIjsgdGhlbgorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0bmFtZSIKKwllbHNlCisJICBkZXN0ZmlsZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCSAgZGVzdGZpbGU9IiRkZXN0ZGlyLyRkZXN0ZmlsZSIKKwlmaQorCisJIyBJZiB0aGUgZmlsZSBpcyBtaXNzaW5nLCBhbmQgdGhlcmUgaXMgYSAuZXhlIG9uIHRoZSBlbmQsIHN0cmlwIGl0CisJIyBiZWNhdXNlIGl0IGlzIG1vc3QgbGlrZWx5IGEgbGlidG9vbCBzY3JpcHQgd2UgYWN0dWFsbHkgd2FudCB0bworCSMgaW5zdGFsbAorCXN0cmlwcGVkX2V4dD0iIgorCWNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBpZiB0ZXN0ICEgLWYgIiRmaWxlIjsgdGhlbgorCSAgICAgIGZpbGU9YCRlY2hvICRmaWxlfCR7U0VEfSAncywuZXhlJCwsJ2AKKwkgICAgICBzdHJpcHBlZF9leHQ9Ii5leGUiCisJICAgIGZpCisJICAgIDs7CisJZXNhYworCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWNhc2UgJGhvc3QgaW4KKwkqY3lnd2luKnwqbWluZ3cqKQorCSAgICB3cmFwcGVyPWAkZWNobyAkZmlsZSB8ICR7U0VEfSAtZSAncywuZXhlJCwsJ2AKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmICgke1NFRH0gLWUgJzRxJyAkd3JhcHBlciB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIik+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICAjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKwkgICMgZm9vIGV2ZW4gaWYgYm90aCBmb28gYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKKwkgICMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZworCSAgIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgorCSAgIworCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCisJICBjYXNlICR3cmFwcGVyIGluCisJICAqLyogfCAqXFwqKSAuICR7d3JhcHBlcn0gOzsKKwkgICopIC4gLi8ke3dyYXBwZXJ9IDs7CisJICBlc2FjCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgaWYgdGVzdCAteiAiJG5vdGluc3RfZGVwbGlicyI7IHRoZW4KKwkgICAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIiAxPiYyCisJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZmkKKworCSAgZmluYWxpemU9eWVzCisJICBmb3IgbGliIGluICRub3RpbnN0X2RlcGxpYnM7IGRvCisJICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgZWFjaCBsaWJyYXJ5IGlzIGluc3RhbGxlZC4KKwkgICAgbGliZGlyPQorCSAgICBpZiB0ZXN0IC1mICIkbGliIjsgdGhlbgorCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICovKiB8ICpcXCopIC4gJGxpYiA7OworCSAgICAgICopIC4gLi8kbGliIDs7CisJICAgICAgZXNhYworCSAgICBmaQorCSAgICBsaWJmaWxlPSIkbGliZGlyLyJgJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRsaWInIGhhcyBub3QgYmVlbiBpbnN0YWxsZWQgaW4gXGAkbGliZGlyJyIgMT4mMgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgIyBOb3RlIHRoYXQgaXQgaXMgbm90IG5lY2Vzc2FyeSBvbiBjeWd3aW4vbWluZ3cgdG8gYXBwZW5kIGEgZG90IHRvCisJICAjIGZvbyBldmVuIGlmIGJvdGggZm9vIGFuZCBGSUxFLmV4ZSBleGlzdDogYXV0b21hdGljLWFwcGVuZC0uZXhlCisJICAjIGJlaGF2aW9yIGhhcHBlbnMgb25seSBmb3IgZXhlYygzKSwgbm90IGZvciBvcGVuKDIpISAgQWxzbywgc291cmNpbmcKKwkgICMgYEZJTEUuJyBkb2VzIG5vdCB3b3JrIG9uIGN5Z3dpbiBtYW5hZ2VkIG1vdW50cy4KKwkgICMKKwkgICMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCSAgY2FzZSAkd3JhcHBlciBpbgorCSAgKi8qIHwgKlxcKikgLiAke3dyYXBwZXJ9IDs7CisJICAqKSAuIC4vJHt3cmFwcGVyfSA7OworCSAgZXNhYworCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgIGlmIHRlc3QgIiRmaW5hbGl6ZSIgPSB5ZXMgJiYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKwkgICAgICB0bXBkaXI9YGZ1bmNfbWt0ZW1wZGlyYAorCSAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJICAgICAgb3V0cHV0bmFtZT0iJHRtcGRpci8kZmlsZSIKKwkgICAgICAjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dG5hbWUiJyVnJ2AKKworCSAgICAgICRzaG93ICIkcmVsaW5rX2NvbW1hbmQiCisJICAgICAgaWYgJHJ1biBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKKwkgICAgICBlbHNlCisJCSRlY2hvICIkbW9kZW5hbWU6IGVycm9yOiByZWxpbmsgXGAkZmlsZScgd2l0aCB0aGUgYWJvdmUgY29tbWFuZCBiZWZvcmUgaW5zdGFsbGluZyBpdCIgMT4mMgorCQkke3JtfXIgIiR0bXBkaXIiCisJCWNvbnRpbnVlCisJICAgICAgZmkKKwkgICAgICBmaWxlPSIkb3V0cHV0bmFtZSIKKwkgICAgZWxzZQorCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCByZWxpbmsgXGAkZmlsZSciIDE+JjIKKwkgICAgZmkKKwkgIGVsc2UKKwkgICAgIyBJbnN0YWxsIHRoZSBiaW5hcnkgdGhhdCB3ZSBjb21waWxlZCBlYXJsaWVyLgorCSAgICBmaWxlPWAkZWNobyAiWCRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkWHNlZCAtZSAicyVcKFteL10qXCkkJSRvYmpkaXIvXDElImAKKwkgIGZpCisJZmkKKworCSMgcmVtb3ZlIC5leGUgc2luY2UgY3lnd2luIC91c3IvYmluL2luc3RhbGwgd2lsbCBhcHBlbmQgYW5vdGhlcgorCSMgb25lIGFueXdheQorCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgorCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKKwkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCisJICAqLmV4ZToqLmV4ZSkKKwkgICAgIyB0aGlzIGlzIG9rCisJICAgIDs7CisJICAqLmV4ZToqKQorCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCisJICAgIDs7CisJICAqOiouZXhlKQorCSAgICBkZXN0ZmlsZT1gJGVjaG8gJGRlc3RmaWxlIHwgJHtTRUR9IC1lICdzLC5leGUkLCwnYAorCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisJJHNob3cgIiRpbnN0YWxsX3Byb2ckc3RyaXBtZSAkZmlsZSAkZGVzdGZpbGUiCisJJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiB8fCBleGl0ICQ/CisJdGVzdCAtbiAiJG91dHB1dG5hbWUiICYmICR7cm19ciAiJHRtcGRpciIKKwk7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbworICAgICAgbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorCisgICAgICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZmlsZSAkb2xkbGliIgorICAgICAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgfHwgZXhpdCAkPworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwkkc2hvdyAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIgorCSRydW4gZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiB8fCBleGl0ICQ/CisgICAgICBmaQorCisgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCisgICAgICBjbWRzPSRvbGRfcG9zdGluc3RhbGxfY21kcworICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCisgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCUlGUz0iJHNhdmVfaWZzIgorCWV2YWwgY21kPVwiJGNtZFwiCisJJHNob3cgIiRjbWQiCisJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX2lmcyIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiOyB0aGVuCisgICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiByZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIiAxPiYyCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCisgICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgorICAgICAgdGVzdCAtbiAiJHJ1biIgJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCisgICAgOzsKKworICAjIGxpYnRvb2wgZmluaXNoIG1vZGUKKyAgZmluaXNoKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGZpbmlzaCIKKyAgICBsaWJkaXJzPSIkbm9ub3B0IgorICAgIGFkbWluY21kcz0KKworICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCisgICAgICBmb3IgZGlyCisgICAgICBkbworCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCisgICAgICBkb25lCisKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGNtZHM9JGZpbmlzaF9jbWRzCisJICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBldmFsIGNtZD1cIiRjbWRcIgorCSAgICAkc2hvdyAiJGNtZCIKKwkgICAgJHJ1biBldmFsICIkY21kIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyAgICAgICAkY21kIgorCSAgZG9uZQorCSAgSUZTPSIkc2F2ZV9pZnMiCisJZmkKKwlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCisJICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCisJICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgorCSAgJHJ1biBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgdGVzdCAiJHNob3ciID0gOiAmJiBleGl0ICRFWElUX1NVQ0NFU1MKKworICAgICRlY2hvICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAorICAgICRlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCisgICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KKyAgICAgICRlY2hvICIgICAkbGliZGlyIgorICAgIGRvbmUKKyAgICAkZWNobworICAgICRlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAkZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCisgICAgJGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCisgICAgJGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKyAgICAgICRlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgorICAgICAgJGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKKyAgICBmaQorICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKyAgICAgICRlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKyAgICAgICRlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgIGZpCisgICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCisgICAgICBsaWJkaXI9TElCRElSCisgICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKyAgICAgICRlY2hvICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCisgICAgZmkKKyAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgorICAgICAgJGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgIGZpCisgICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICAgICRlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKKyAgICBmaQorICAgICRlY2hvCisgICAgJGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgorICAgICRlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKKyAgICAkZWNobyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKKyAgICA7OworCisgICMgbGlidG9vbCBleGVjdXRlIG1vZGUKKyAgZXhlY3V0ZSkKKyAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBleGVjdXRlIgorCisgICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KKyAgICBjbWQ9IiRub25vcHQiCisgICAgaWYgdGVzdCAteiAiJGNtZCI7IHRoZW4KKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIiAxPiYyCisgICAgICAkZWNobyAiJGhlbHAiCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KKyAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbworICAgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkkZWNobyAiJG1vZGVuYW1lOiBcYCRmaWxlJyBpcyBub3QgYSBmaWxlIiAxPiYyCisJJGVjaG8gIiRoZWxwIiAxPiYyCisJZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmaQorCisgICAgICBkaXI9CisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAqLmxhKQorCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCisJICAkZWNobyAiJGhlbHAiIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisKKwkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KKwlkbG5hbWU9CisJbGlicmFyeV9uYW1lcz0KKworCSMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgorCWNhc2UgJGZpbGUgaW4KKwkqLyogfCAqXFwqKSAuICRmaWxlIDs7CisJKikgLiAuLyRmaWxlIDs7CisJZXNhYworCisJIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCisJaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KKwkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KKwkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKKwkgIGNvbnRpbnVlCisJZmkKKworCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAorCXRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiICYmIGRpcj0uCisKKwlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KKwkgIGRpcj0iJGRpci8kb2JqZGlyIgorCWVsc2UKKwkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIFxgJGRsbmFtZScgaW4gXGAkZGlyJyBvciBcYCRkaXIvJG9iamRpciciIDE+JjIKKwkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIEp1c3QgYWRkIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgLmxvIGZpbGUuCisJZGlyPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCisJdGVzdCAiWCRkaXIiID0gIlgkZmlsZSIgJiYgZGlyPS4KKwk7OworCisgICAgICAqKQorCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmcgXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBub24tbGlidG9vbCBsaWJyYXJpZXMgYW5kIG9iamVjdHMiIDE+JjIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKikgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmICgke1NFRH0gLWUgJzRxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KKwkgIGNhc2UgJGZpbGUgaW4KKwkgICovKiB8ICpcXCopIC4gJGZpbGUgOzsKKwkgICopIC4gLi8kZmlsZSA7OworCSAgZXNhYworCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAorICAgICAgYXJncz0iJGFyZ3MgXCIkZmlsZVwiIgorICAgIGRvbmUKKworICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwkjIEV4cG9ydCB0aGUgc2hsaWJwYXRoX3Zhci4KKwlldmFsICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorCisgICAgICAjIFJlc3RvcmUgc2F2ZWQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICAgICBpZiB0ZXN0ICIke3NhdmVfTENfQUxMK3NldH0iID0gc2V0OyB0aGVuCisJTENfQUxMPSIkc2F2ZV9MQ19BTEwiOyBleHBvcnQgTENfQUxMCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHtzYXZlX0xBTkcrc2V0fSIgPSBzZXQ7IHRoZW4KKwlMQU5HPSIkc2F2ZV9MQU5HIjsgZXhwb3J0IExBTkcKKyAgICAgIGZpCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJGVjaG8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCSRlY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCisgICAgICBmaQorICAgICAgJGVjaG8gIiRjbWQkYXJncyIKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCisgICAgOzsKKworICAjIGxpYnRvb2wgY2xlYW4gYW5kIHVuaW5zdGFsbCBtb2RlCisgIGNsZWFuIHwgdW5pbnN0YWxsKQorICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6ICRtb2RlIgorICAgIHJtPSIkbm9ub3B0IgorICAgIGZpbGVzPQorICAgIHJtZm9yY2U9CisgICAgZXhpdF9zdGF0dXM9MAorCisgICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCB2YXJpYWJsZXMgcmF0aGVyCisgICAgIyB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9pbnN0YWxsX21hZ2ljPSIkbWFnaWMiCisKKyAgICBmb3IgYXJnCisgICAgZG8KKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWYpIHJtPSIkcm0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgcm09IiRybSAkYXJnIiA7OworICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworICAgICAgZXNhYworICAgIGRvbmUKKworICAgIGlmIHRlc3QgLXogIiRybSI7IHRoZW4KKyAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIgMT4mMgorICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCisgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICBmaQorCisgICAgcm1kaXJzPQorCisgICAgb3JpZ29iamRpcj0iJG9iamRpciIKKyAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICBkaXI9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKKyAgICAgIGlmIHRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiOyB0aGVuCisJZGlyPS4KKwlvYmpkaXI9IiRvcmlnb2JqZGlyIgorICAgICAgZWxzZQorCW9iamRpcj0iJGRpci8kb3JpZ29iamRpciIKKyAgICAgIGZpCisgICAgICBuYW1lPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorCisgICAgICAjIFJlbWVtYmVyIG9iamRpciBmb3IgcmVtb3ZhbCBsYXRlciwgYmVpbmcgY2FyZWZ1bCB0byBhdm9pZCBkdXBsaWNhdGVzCisgICAgICBpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbjsgdGhlbgorCWNhc2UgIiAkcm1kaXJzICIgaW4KKwkgICoiICRvYmpkaXIgIiopIDs7CisJICAqKSBybWRpcnM9IiRybWRpcnMgJG9iamRpciIgOzsKKwllc2FjCisgICAgICBmaQorCisgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgorICAgICAgaWYgKHRlc3QgLUwgIiRmaWxlIikgPi9kZXYvbnVsbCAyPiYxIFwKKwl8fCAodGVzdCAtaCAiJGZpbGUiKSA+L2Rldi9udWxsIDI+JjEgXAorCXx8IHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorCToKKyAgICAgIGVsaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisJZXhpdF9zdGF0dXM9MQorCWNvbnRpbnVlCisgICAgICBlbGlmIHRlc3QgIiRybWZvcmNlIiA9IHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBmaQorCisgICAgICBybWZpbGVzPSIkZmlsZSIKKworICAgICAgY2FzZSAkbmFtZSBpbgorICAgICAgKi5sYSkKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBhcmNoaXZlLCBzbyB2ZXJpZnkgaXQuCisJaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIC4gJGRpci8kbmFtZQorCisJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgorCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICBkb25lCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG9sZF9saWJyYXJ5IgorCisJICBjYXNlICIkbW9kZSIgaW4KKwkgIGNsZWFuKQorCSAgICBjYXNlICIgICRsaWJyYXJ5X25hbWVzICIgaW4KKwkgICAgIyAiICAiIGluIHRoZSBiZWdpbm5pbmcgY2F0Y2hlcyBlbXB0eSAkZGxuYW1lCisJICAgICoiICRkbG5hbWUgIiopIDs7CisJICAgICopIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJGRsbmFtZSIgOzsKKwkgICAgZXNhYworCSAgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICA7OworCSAgdW5pbnN0YWxsKQorCSAgICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdHVuaW5zdGFsbCBjb21tYW5kcy4KKwkgICAgICBjbWRzPSRwb3N0dW5pbnN0YWxsX2NtZHMKKwkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKKwkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbworCQlJRlM9IiRzYXZlX2lmcyIKKwkJZXZhbCBjbWQ9XCIkY21kXCIKKwkJJHNob3cgIiRjbWQiCisJCSRydW4gZXZhbCAiJGNtZCIKKwkJaWYgdGVzdCAiJD8iIC1uZSAwICYmIHRlc3QgIiRybWZvcmNlIiAhPSB5ZXM7IHRoZW4KKwkJICBleGl0X3N0YXR1cz0xCisJCWZpCisJICAgICAgZG9uZQorCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgb2xkX3Bvc3R1bmluc3RhbGwgY29tbWFuZHMuCisJICAgICAgY21kcz0kb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCisJCUlGUz0iJHNhdmVfaWZzIgorCQlldmFsIGNtZD1cIiRjbWRcIgorCQkkc2hvdyAiJGNtZCIKKwkJJHJ1biBldmFsICIkY21kIgorCQlpZiB0ZXN0ICIkPyIgLW5lIDAgJiYgdGVzdCAiJHJtZm9yY2UiICE9IHllczsgdGhlbgorCQkgIGV4aXRfc3RhdHVzPTEKKwkJZmkKKwkgICAgICBkb25lCisJICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgIGZpCisJICAgICMgRklYTUU6IHNob3VsZCByZWluc3RhbGwgdGhlIGJlc3QgcmVtYWluaW5nIHNoYXJlZCBsaWJyYXJ5LgorCSAgICA7OworCSAgZXNhYworCWZpCisJOzsKKworICAgICAgKi5sbykKKwkjIFBvc3NpYmx5IGEgbGlidG9vbCBvYmplY3QsIHNvIHZlcmlmeSBpdC4KKwlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCisJICAjIFJlYWQgdGhlIC5sbyBmaWxlCisJICAuICRkaXIvJG5hbWUKKworCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCisJICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgXAorCSAgICAgJiYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKwkgIGZpCisKKwkgICMgQWRkIG5vbi1QSUMgb2JqZWN0IHRvIHRoZSBsaXN0IG9mIGZpbGVzIHRvIHJlbW92ZS4KKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgXAorCSAgICAgJiYgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJICAgIHJtZmlsZXM9IiRybWZpbGVzICRkaXIvJG5vbl9waWNfb2JqZWN0IgorCSAgZmkKKwlmaQorCTs7CisKKyAgICAgICopCisJaWYgdGVzdCAiJG1vZGUiID0gY2xlYW4gOyB0aGVuCisJICBub2V4ZW5hbWU9JG5hbWUKKwkgIGNhc2UgJGZpbGUgaW4KKwkgICouZXhlKQorCSAgICBmaWxlPWAkZWNobyAkZmlsZXwke1NFRH0gJ3MsLmV4ZSQsLCdgCisJICAgIG5vZXhlbmFtZT1gJGVjaG8gJG5hbWV8JHtTRUR9ICdzLC5leGUkLCwnYAorCSAgICAjICRmaWxlIHdpdGggLmV4ZSBoYXMgYWxyZWFkeSBiZWVuIGFkZGVkIHRvIHJtZmlsZXMsCisJICAgICMgYWRkICRmaWxlIHdpdGhvdXQgLmV4ZQorCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZmlsZSIKKwkgICAgOzsKKwkgIGVzYWMKKwkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgorCSAgaWYgKCR7U0VEfSAtZSAnNHEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgIC4gJGRpci8kbm9leGVuYW1lCisKKwkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKKwkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKKwkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgIGZpCisJICAgIGlmIHRlc3QgIlgkbm9leGVuYW1lIiAhPSAiWCRuYW1lIiA7IHRoZW4KKwkgICAgICBybWZpbGVzPSIkcm1maWxlcyAkb2JqZGlyL2x0LSR7bm9leGVuYW1lfS5jIgorCSAgICBmaQorCSAgZmkKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICAkc2hvdyAiJHJtICRybWZpbGVzIgorICAgICAgJHJ1biAkcm0gJHJtZmlsZXMgfHwgZXhpdF9zdGF0dXM9MQorICAgIGRvbmUKKyAgICBvYmpkaXI9IiRvcmlnb2JqZGlyIgorCisgICAgIyBUcnkgdG8gcmVtb3ZlIHRoZSAke29iamRpcn1zIGluIHRoZSBkaXJlY3RvcmllcyB3aGVyZSB3ZSBkZWxldGVkIGZpbGVzCisgICAgZm9yIGRpciBpbiAkcm1kaXJzOyBkbworICAgICAgaWYgdGVzdCAtZCAiJGRpciI7IHRoZW4KKwkkc2hvdyAicm1kaXIgJGRpciIKKwkkcnVuIHJtZGlyICRkaXIgPi9kZXYvbnVsbCAyPiYxCisgICAgICBmaQorICAgIGRvbmUKKworICAgIGV4aXQgJGV4aXRfc3RhdHVzCisgICAgOzsKKworICAiIikKKyAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIgMT4mMgorICAgICRlY2hvICIkZ2VuZXJpY19oZWxwIiAxPiYyCisgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLXogIiRleGVjX2NtZCI7IHRoZW4KKyAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCisgICAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKKyAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgZmkKK2ZpICMgdGVzdCAteiAiJHNob3dfaGVscCIKKworaWYgdGVzdCAtbiAiJGV4ZWNfY21kIjsgdGhlbgorICBldmFsIGV4ZWMgJGV4ZWNfY21kCisgIGV4aXQgJEVYSVRfRkFJTFVSRQorZmkKKworIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCitjYXNlICRtb2RlIGluCisiIikgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgorCitQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KKworICAgIC0tY29uZmlnICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCisgICAgLS1kZWJ1ZyAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZworLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisgICAgLS1mZWF0dXJlcyAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgICAgLS1maW5pc2ggICAgICAgICAgc2FtZSBhcyBcYC0tbW9kZT1maW5pc2gnCisgICAgLS1oZWxwICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAorICAgIC0tbW9kZT1NT0RFICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFIFtkZWZhdWx0PWluZmVycmVkIGZyb20gTU9ERS1BUkdTXQorICAgIC0tcXVpZXQgICAgICAgICAgIHNhbWUgYXMgXGAtLXNpbGVudCcKKyAgICAtLXNpbGVudCAgICAgICAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisgICAgLS10YWc9VEFHICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworICAgIC0tdmVyc2lvbiAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKworTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQorICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKKyAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcworICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5CisKK01PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFRyeSBcYCRtb2RlbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvcgorYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCisgIGV4aXQgJEVYSVRfU1VDQ0VTUworICA7OworCitjbGVhbikKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KKworUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCisodHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCit0byBSTS4KKworSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAord2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICA7OworCitjb21waWxlKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQorCitDb21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCisKK1RoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgorCisgIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQorICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXN0YXRpYyAgICAgICAgICAgYWx3YXlzIGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgIDs7CisKK2V4ZWN1dGUpCisgICRlY2hvIFwKKyJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgIDs7CisKK2ZpbmlzaCkKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICA7OworCitpbnN0YWxsKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5CitCU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKKyAgOzsKKworbGluaykKKyAgJGVjaG8gXAorIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCisKK0xpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KK2NyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCisKK0xJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQorYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAorICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisJCSAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbGlzdGVkIGluIFNZTUZJTEUKKyAgLWV4cG9ydC1zeW1ib2xzLXJlZ2V4IFJFR0VYCisJCSAgICB0cnkgdG8gZXhwb3J0IG9ubHkgdGhlIHN5bWJvbHMgbWF0Y2hpbmcgUkVHRVgKKyAgLUxMSUJESVIgICAgICAgICAgc2VhcmNoIExJQkRJUiBmb3IgcmVxdWlyZWQgaW5zdGFsbGVkIGxpYnJhcmllcworICAtbE5BTUUgICAgICAgICAgICBPVVRQVVQtRklMRSByZXF1aXJlcyB0aGUgaW5zdGFsbGVkIGxpYnJhcnkgbGliTkFNRQorICAtbW9kdWxlICAgICAgICAgICBidWlsZCBhIGxpYnJhcnkgdGhhdCBjYW4gZGxvcGVuZWQKKyAgLW5vLWZhc3QtaW5zdGFsbCAgZGlzYWJsZSB0aGUgZmFzdC1pbnN0YWxsIG1vZGUKKyAgLW5vLWluc3RhbGwgICAgICAgbGluayBhIG5vdC1pbnN0YWxsYWJsZSBleGVjdXRhYmxlCisgIC1uby11bmRlZmluZWQgICAgIGRlY2xhcmUgdGhhdCBhIGxpYnJhcnkgZG9lcyBub3QgcmVmZXIgdG8gZXh0ZXJuYWwgc3ltYm9scworICAtbyBPVVRQVVQtRklMRSAgICBjcmVhdGUgT1VUUFVULUZJTEUgZnJvbSB0aGUgc3BlY2lmaWVkIG9iamVjdHMKKyAgLW9iamVjdGxpc3QgRklMRSAgVXNlIGEgbGlzdCBvZiBvYmplY3QgZmlsZXMgZm91bmQgaW4gRklMRSB0byBzcGVjaWZ5IG9iamVjdHMKKyAgLXByZWNpb3VzLWZpbGVzLXJlZ2V4IFJFR0VYCisgICAgICAgICAgICAgICAgICAgIGRvbid0IHJlbW92ZSBvdXRwdXQgZmlsZXMgbWF0Y2hpbmcgUkVHRVgKKyAgLXJlbGVhc2UgUkVMRUFTRSAgc3BlY2lmeSBwYWNrYWdlIHJlbGVhc2UgaW5mb3JtYXRpb24KKyAgLXJwYXRoIExJQkRJUiAgICAgdGhlIGNyZWF0ZWQgbGlicmFyeSB3aWxsIGV2ZW50dWFsbHkgYmUgaW5zdGFsbGVkIGluIExJQkRJUgorICAtUlsgXUxJQkRJUiAgICAgICBhZGQgTElCRElSIHRvIHRoZSBydW50aW1lIHBhdGggb2YgcHJvZ3JhbXMgYW5kIGxpYnJhcmllcworICAtc3RhdGljICAgICAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBvZiBsaWJ0b29sIGxpYnJhcmllcworICAtdmVyc2lvbi1pbmZvIENVUlJFTlRbOlJFVklTSU9OWzpBR0VdXQorCQkgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQorCitBbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgorCitFdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQordHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKK29iamVjdCBmaWxlcy4KKworSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCitvbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCityZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKK3VzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgorCitJZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQoraXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKKyAgOzsKKwordW5pbnN0YWxsKQorICAkZWNobyBcCisiVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KKworUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgorT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgorICA7OworCisqKQorICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCisgICRlY2hvICIkaGVscCIgMT4mMgorICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgOzsKK2VzYWMKKworJGVjaG8KKyRlY2hvICJUcnkgXGAkbW9kZW5hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCisKK2V4aXQgJD8KKworIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KKyMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCisjIGNob2ljZXMsIHdlIGdvIGZvciBhIHN0YXRpYyBsaWJyYXJ5LCB0aGF0IGlzIHRoZSBtb3N0IHBvcnRhYmxlLAorIyBzaW5jZSB3ZSBjYW4ndCB0ZWxsIHdoZXRoZXIgc2hhcmVkIGxpYnJhcmllcyB3ZXJlIGRpc2FibGVkIGJlY2F1c2UKKyMgdGhlIHVzZXIgYXNrZWQgZm9yIHRoYXQgb3IgYmVjYXVzZSB0aGUgcGxhdGZvcm0gZG9lc24ndCBzdXBwb3J0CisjIHRoZW0uICBUaGlzIGlzIHBhcnRpY3VsYXJseSBpbXBvcnRhbnQgb24gQUlYLCBiZWNhdXNlIHdlIGRvbid0CisjIHN1cHBvcnQgaGF2aW5nIGJvdGggc3RhdGljIGFuZCBzaGFyZWQgbGlicmFyaWVzIGVuYWJsZWQgYXQgdGhlIHNhbWUKKyMgdGltZSBvbiB0aGF0IHBsYXRmb3JtLCBzbyB3ZSBkZWZhdWx0IHRvIGEgc2hhcmVkLW9ubHkgY29uZmlndXJhdGlvbi4KKyMgSWYgYSBkaXNhYmxlLXNoYXJlZCB0YWcgaXMgZ2l2ZW4sIHdlJ2xsIGZhbGxiYWNrIHRvIGEgc3RhdGljLW9ubHkKKyMgY29uZmlndXJhdGlvbi4gIEJ1dCB3ZSdsbCBuZXZlciBnbyBmcm9tIHN0YXRpYy1vbmx5IHRvIHNoYXJlZC1vbmx5LgorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCitkaXNhYmxlX2xpYnM9c2hhcmVkCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAorCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc3RhdGljCitkaXNhYmxlX2xpYnM9c3RhdGljCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXN0YXRpYworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTpzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246MgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9tZGF0ZS1zaCBiL2x6by0yLjAzL2F1dG9jb25mL21kYXRlLXNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjc1N2E1ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hdXRvY29uZi9tZGF0ZS1zaApAQCAtMCwwICsxLDIwNCBAQAorIyEvYmluL3NoCisjIEdldCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5IGFuZCBwcmV0dHktcHJpbnQgaXQuCisKK3NjcmlwdHZlcnNpb249MjAwNy0wMy0zMC4wMgorCisjIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgMjAwMywgMjAwNCwgMjAwNSwgMjAwNyBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4KKyMgd3JpdHRlbiBieSBVbHJpY2ggRHJlcHBlciA8ZHJlcHBlckBnbnUuYWkubWl0LmVkdT4sIEp1bmUgMTk5NQorIworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorIworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworY2FzZSAkMSBpbgorICAnJykKKyAgICAgZWNobyAiJDA6IE5vIGZpbGUuICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgICBleGl0IDE7CisgICAgIDs7CisgIC1oIHwgLS1oKikKKyAgICBjYXQgPDxcRU9GCitVc2FnZTogbWRhdGUtc2ggWy0taGVscF0gWy0tdmVyc2lvbl0gRklMRQorCitQcmV0dHktcHJpbnQgdGhlIG1vZGlmaWNhdGlvbiB0aW1lIG9mIEZJTEUuCisKK1JlcG9ydCBidWdzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uCitFT0YKKyAgICBleGl0ICQ/CisgICAgOzsKKyAgLXYgfCAtLXYqKQorICAgIGVjaG8gIm1kYXRlLXNoICRzY3JpcHR2ZXJzaW9uIgorICAgIGV4aXQgJD8KKyAgICA7OworZXNhYworCisjIFByZXZlbnQgZGF0ZSBnaXZpbmcgcmVzcG9uc2UgaW4gYW5vdGhlciBsYW5ndWFnZS4KK0xBTkc9QworZXhwb3J0IExBTkcKK0xDX0FMTD1DCitleHBvcnQgTENfQUxMCitMQ19USU1FPUMKK2V4cG9ydCBMQ19USU1FCisKKyMgR05VIGxzIGNoYW5nZXMgaXRzIHRpbWUgZm9ybWF0IGluIHJlc3BvbnNlIHRvIHRoZSBUSU1FX1NUWUxFCisjIHZhcmlhYmxlLiAgU2luY2Ugd2UgY2Fubm90IGFzc3VtZSBgdW5zZXQnIHdvcmtzLCByZXZlcnQgdGhpcworIyB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgoraWYgdGVzdCAiJHtUSU1FX1NUWUxFK3NldH0iID0gc2V0OyB0aGVuCisgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KKyAgZXhwb3J0IFRJTUVfU1RZTEUKK2ZpCisKK3NhdmVfYXJnMT0kMQorCisjIEZpbmQgb3V0IGhvdyB0byBnZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiBhIGZpbGUgb3IgZGlyZWN0b3J5LgoraWYgbHMgLUwgL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0nbHMgLUwgLWwgLWQnCitlbHNlCisgIGxzX2NvbW1hbmQ9J2xzIC1sIC1kJworZmkKKyMgQXZvaWQgdXNlci9ncm91cCBuYW1lcyB0aGF0IG1pZ2h0IGhhdmUgc3BhY2VzLCB3aGVuIHBvc3NpYmxlLgoraWYgbHMgLW4gL2Rldi9udWxsIDE+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgbHNfY29tbWFuZD0iJGxzX2NvbW1hbmQgLW4iCitmaQorCisjIEEgYGxzIC1sJyBsaW5lIGxvb2tzIGFzIGZvbGxvd3Mgb24gT1MvMi4KKyMgIGRyd3hyd3gtLS0gICAgICAgIDAgQXVnIDExICAyMDAxIGZvbworIyBUaGlzIGRpZmZlcnMgZnJvbSBVbml4LCB3aGljaCBhZGRzIG93bmVyc2hpcCBpbmZvcm1hdGlvbi4KKyMgIGRyd3hyd3gtLS0gICAyIHJvb3QgIHJvb3QgICAgICA0MDk2IEF1ZyAxMSAgMjAwMSBmb28KKyMKKyMgVG8gZmluZCB0aGUgZGF0ZSwgd2Ugc3BsaXQgdGhlIGxpbmUgb24gc3BhY2VzIGFuZCBpdGVyYXRlIG9uIHdvcmRzCisjIHVudGlsIHdlIGZpbmQgYSBtb250aC4gIFRoaXMgY2Fubm90IHdvcmsgd2l0aCBmaWxlcyB3aG9zZSBvd25lciBpcyBhCisjIHVzZXIgbmFtZWQgYEphbicsIG9yIGBGZWInLCBldGMuICBIb3dldmVyLCBpdCdzIHVubGlrZWx5IHRoYXQgYC8nCisjIHdpbGwgYmUgb3duZWQgYnkgYSB1c2VyIHdob3NlIG5hbWUgaXMgYSBtb250aC4gIFNvIHdlIGZpcnN0IGxvb2sgYXQKKyMgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gZGVjaWRlIGhvdyBtYW55CisjIHdvcmRzIHNob3VsZCBiZSBza2lwcGVkIHRvIGdldCB0aGUgZGF0ZS4KKworIyBPbiBIUFVYIC9iaW4vc2gsICJzZXQiIGludGVycHJldHMgIi1ydy1yLS1yLS0iIGFzIG9wdGlvbnMsIHNvIHRoZSAieCIgYmVsb3cuCitzZXQgeGAkbHNfY29tbWFuZCAvYAorCisjIEZpbmQgd2hpY2ggYXJndW1lbnQgaXMgdGhlIG1vbnRoLgorbW9udGg9Citjb21tYW5kPQordW50aWwgdGVzdCAkbW9udGgKK2RvCisgIHNoaWZ0CisgICMgQWRkIGFub3RoZXIgc2hpZnQgdG8gdGhlIGNvbW1hbmQuCisgIGNvbW1hbmQ9IiRjb21tYW5kIHNoaWZ0OyIKKyAgY2FzZSAkMSBpbgorICAgIEphbikgbW9udGg9SmFudWFyeTsgbnVtbW9udGg9MTs7CisgICAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgICAgTWFyKSBtb250aD1NYXJjaDsgbnVtbW9udGg9Mzs7CisgICAgQXByKSBtb250aD1BcHJpbDsgbnVtbW9udGg9NDs7CisgICAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICAgIEp1bikgbW9udGg9SnVuZTsgbnVtbW9udGg9Njs7CisgICAgSnVsKSBtb250aD1KdWx5OyBudW1tb250aD03OzsKKyAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgICAgU2VwKSBtb250aD1TZXB0ZW1iZXI7IG51bW1vbnRoPTk7OworICAgIE9jdCkgbW9udGg9T2N0b2JlcjsgbnVtbW9udGg9MTA7OworICAgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgICBEZWMpIG1vbnRoPURlY2VtYmVyOyBudW1tb250aD0xMjs7CisgIGVzYWMKK2RvbmUKKworIyBHZXQgdGhlIGV4dGVuZGVkIGxzIG91dHB1dCBvZiB0aGUgZmlsZSBvciBkaXJlY3RvcnkuCitzZXQgZHVtbXkgeGBldmFsICIkbHNfY29tbWFuZCBcIlwkc2F2ZV9hcmcxXCIiYAorCisjIFJlbW92ZSBhbGwgcHJlY2VkaW5nIGFyZ3VtZW50cworZXZhbCAkY29tbWFuZAorCisjIEJlY2F1c2Ugb2YgdGhlIGR1bW15IGFyZ3VtZW50IGFib3ZlLCBtb250aCBpcyBpbiAkMi4KKyMKKyMgT24gYSBQT1NJWCBzeXN0ZW0sIHdlIHNob3VsZCBoYXZlCisjCisjICQjID0gNQorIyAkMSA9IGZpbGUgc2l6ZQorIyAkMiA9IG1vbnRoCisjICQzID0gZGF5CisjICQ0ID0geWVhciBvciB0aW1lCisjICQ1ID0gZmlsZW5hbWUKKyMKKyMgT24gRGFyd2luIDcuNy4wIGFuZCA3LjYuMCwgd2UgaGF2ZQorIworIyAkIyA9IDQKKyMgJDEgPSBkYXkKKyMgJDIgPSBtb250aAorIyAkMyA9IHllYXIgb3IgdGltZQorIyAkNCA9IGZpbGVuYW1lCisKKyMgR2V0IHRoZSBtb250aC4KK2Nhc2UgJDIgaW4KKyAgSmFuKSBtb250aD1KYW51YXJ5OyBudW1tb250aD0xOzsKKyAgRmViKSBtb250aD1GZWJydWFyeTsgbnVtbW9udGg9Mjs7CisgIE1hcikgbW9udGg9TWFyY2g7IG51bW1vbnRoPTM7OworICBBcHIpIG1vbnRoPUFwcmlsOyBudW1tb250aD00OzsKKyAgTWF5KSBtb250aD1NYXk7IG51bW1vbnRoPTU7OworICBKdW4pIG1vbnRoPUp1bmU7IG51bW1vbnRoPTY7OworICBKdWwpIG1vbnRoPUp1bHk7IG51bW1vbnRoPTc7OworICBBdWcpIG1vbnRoPUF1Z3VzdDsgbnVtbW9udGg9ODs7CisgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05OzsKKyAgT2N0KSBtb250aD1PY3RvYmVyOyBudW1tb250aD0xMDs7CisgIE5vdikgbW9udGg9Tm92ZW1iZXI7IG51bW1vbnRoPTExOzsKKyAgRGVjKSBtb250aD1EZWNlbWJlcjsgbnVtbW9udGg9MTI7OworZXNhYworCitjYXNlICQzIGluCisgID8/PyopIGRheT0kMTs7CisgICopIGRheT0kMzsgc2hpZnQ7OworZXNhYworCisjIEhlcmUgd2UgaGF2ZSB0byBkZWFsIHdpdGggdGhlIHByb2JsZW0gdGhhdCB0aGUgbHMgb3V0cHV0IGdpdmVzIGVpdGhlcgorIyB0aGUgdGltZSBvZiBkYXkgb3IgdGhlIHllYXIuCitjYXNlICQzIGluCisgICo6Kikgc2V0IGBkYXRlYDsgZXZhbCB5ZWFyPVwkJCMKKyAgICAgICBjYXNlICQyIGluCisJIEphbikgbnVtbW9udGh0b2Q9MTs7CisJIEZlYikgbnVtbW9udGh0b2Q9Mjs7CisJIE1hcikgbnVtbW9udGh0b2Q9Mzs7CisJIEFwcikgbnVtbW9udGh0b2Q9NDs7CisJIE1heSkgbnVtbW9udGh0b2Q9NTs7CisJIEp1bikgbnVtbW9udGh0b2Q9Njs7CisJIEp1bCkgbnVtbW9udGh0b2Q9Nzs7CisJIEF1ZykgbnVtbW9udGh0b2Q9ODs7CisJIFNlcCkgbnVtbW9udGh0b2Q9OTs7CisJIE9jdCkgbnVtbW9udGh0b2Q9MTA7OworCSBOb3YpIG51bW1vbnRodG9kPTExOzsKKwkgRGVjKSBudW1tb250aHRvZD0xMjs7CisgICAgICAgZXNhYworICAgICAgICMgRm9yIHRoZSBmaXJzdCBzaXggbW9udGggb2YgdGhlIHllYXIgdGhlIHRpbWUgbm90YXRpb24gY2FuIGFsc28KKyAgICAgICAjIGJlIHVzZWQgZm9yIGZpbGVzIG1vZGlmaWVkIGluIHRoZSBsYXN0IHllYXIuCisgICAgICAgaWYgKGV4cHIgJG51bW1vbnRoIFw+ICRudW1tb250aHRvZCkgPiAvZGV2L251bGw7CisgICAgICAgdGhlbgorCSB5ZWFyPWBleHByICR5ZWFyIC0gMWAKKyAgICAgICBmaTs7CisgICopIHllYXI9JDM7OworZXNhYworCisjIFRoZSByZXN1bHQuCitlY2hvICRkYXkgJG1vbnRoICR5ZWFyCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL21pc3NpbmcgYi9sem8tMi4wMy9hdXRvY29uZi9taXNzaW5nCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ZTNhNDEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9hdXRvY29uZi9taXNzaW5nCkBAIC0wLDAgKzEsMzY1IEBACisjISAvYmluL3NoCisjIENvbW1vbiBzdHViIGZvciBhIGZldyBtaXNzaW5nIEdOVSBwcm9ncmFtcyB3aGlsZSBpbnN0YWxsaW5nLgorCitzY3JpcHR2ZXJzaW9uPTIwMDYtMDUtMTAuMjMKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTksIDIwMDAsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYKKyMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgT3JpZ2luYWxseSBieSBGcmFuLGNvaXMgUGluYXJkIDxwaW5hcmRAaXJvLnVtb250cmVhbC5jYT4sIDE5OTYuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKKyMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCisjIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCisjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKworaWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBlY2hvIDE+JjIgIlRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24iCisgIGV4aXQgMQorZmkKKworcnVuPToKK3NlZF9vdXRwdXQ9J3MvLiogLS1vdXRwdXRbID1dXChbXiBdKlwpLiovXDEvcCcKK3NlZF9taW51c289J3MvLiogLW8gXChbXiBdKlwpLiovXDEvcCcKKworIyBJbiB0aGUgY2FzZXMgd2hlcmUgdGhpcyBtYXR0ZXJzLCBgbWlzc2luZycgaXMgYmVpbmcgcnVuIGluIHRoZQorIyBzcmNkaXIgYWxyZWFkeS4KK2lmIHRlc3QgLWYgY29uZmlndXJlLmFjOyB0aGVuCisgIGNvbmZpZ3VyZV9hYz1jb25maWd1cmUuYWMKK2Vsc2UKKyAgY29uZmlndXJlX2FjPWNvbmZpZ3VyZS5pbgorZmkKKworbXNnPSJtaXNzaW5nIG9uIHlvdXIgc3lzdGVtIgorCitjYXNlICQxIGluCistLXJ1bikKKyAgIyBUcnkgdG8gcnVuIHJlcXVlc3RlZCBwcm9ncmFtLCBhbmQganVzdCBleGl0IGlmIGl0IHN1Y2NlZWRzLgorICBydW49CisgIHNoaWZ0CisgICIkQCIgJiYgZXhpdCAwCisgICMgRXhpdCBjb2RlIDYzIG1lYW5zIHZlcnNpb24gbWlzbWF0Y2guICBUaGlzIG9mdGVuIGhhcHBlbnMKKyAgIyB3aGVuIHRoZSB1c2VyIHRyeSB0byB1c2UgYW4gYW5jaWVudCB2ZXJzaW9uIG9mIGEgdG9vbCBvbgorICAjIGEgZmlsZSB0aGF0IHJlcXVpcmVzIGEgbWluaW11bSB2ZXJzaW9uLiAgSW4gdGhpcyBjYXNlIHdlCisgICMgd2Ugc2hvdWxkIHByb2NlZWQgaGFzIGlmIHRoZSBwcm9ncmFtIGhhZCBiZWVuIGFic2VudCwgb3IKKyAgIyBpZiAtLXJ1biBoYWRuJ3QgYmVlbiBwYXNzZWQuCisgIGlmIHRlc3QgJD8gPSA2MzsgdGhlbgorICAgIHJ1bj06CisgICAgbXNnPSJwcm9iYWJseSB0b28gb2xkIgorICBmaQorICA7OworCisgIC1ofC0taHwtLWhlfC0taGVsfC0taGVscCkKKyAgICBlY2hvICJcCiskMCBbT1BUSU9OXS4uLiBQUk9HUkFNIFtBUkdVTUVOVF0uLi4KKworSGFuZGxlIFxgUFJPR1JBTSBbQVJHVU1FTlRdLi4uJyBmb3Igd2hlbiBQUk9HUkFNIGlzIG1pc3NpbmcsIG9yIHJldHVybiBhbgorZXJyb3Igc3RhdHVzIGlmIHRoZXJlIGlzIG5vIGtub3duIGhhbmRsaW5nIGZvciBQUk9HUkFNLgorCitPcHRpb25zOgorICAtaCwgLS1oZWxwICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgLXYsIC0tdmVyc2lvbiAgIG91dHB1dCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC0tcnVuICAgICAgICAgICB0cnkgdG8gcnVuIHRoZSBnaXZlbiBjb21tYW5kLCBhbmQgZW11bGF0ZSBpdCBpZiBpdCBmYWlscworCitTdXBwb3J0ZWQgUFJPR1JBTSB2YWx1ZXM6CisgIGFjbG9jYWwgICAgICB0b3VjaCBmaWxlIFxgYWNsb2NhbC5tNCcKKyAgYXV0b2NvbmYgICAgIHRvdWNoIGZpbGUgXGBjb25maWd1cmUnCisgIGF1dG9oZWFkZXIgICB0b3VjaCBmaWxlIFxgY29uZmlnLmguaW4nCisgIGF1dG9tNHRlICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUsIG9yIGNyZWF0ZSBhIHN0dWIgb25lCisgIGF1dG9tYWtlICAgICB0b3VjaCBhbGwgXGBNYWtlZmlsZS5pbicgZmlsZXMKKyAgYmlzb24gICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorICBmbGV4ICAgICAgICAgY3JlYXRlIFxgbGV4Lnl5LmMnLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuYworICBoZWxwMm1hbiAgICAgdG91Y2ggdGhlIG91dHB1dCBmaWxlCisgIGxleCAgICAgICAgICBjcmVhdGUgXGBsZXgueXkuYycsIGlmIHBvc3NpYmxlLCBmcm9tIGV4aXN0aW5nIC5jCisgIG1ha2VpbmZvICAgICB0b3VjaCB0aGUgb3V0cHV0IGZpbGUKKyAgdGFyICAgICAgICAgIHRyeSB0YXIsIGdudXRhciwgZ3RhciwgdGhlbiB0YXIgd2l0aG91dCBub24tcG9ydGFibGUgZmxhZ3MKKyAgeWFjYyAgICAgICAgIGNyZWF0ZSBcYHkudGFiLltjaF0nLCBpZiBwb3NzaWJsZSwgZnJvbSBleGlzdGluZyAuW2NoXQorCitTZW5kIGJ1ZyByZXBvcnRzIHRvIDxidWctYXV0b21ha2VAZ251Lm9yZz4uIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC12fC0tdnwtLXZlfC0tdmVyfC0tdmVyc3wtLXZlcnNpfC0tdmVyc2lvfC0tdmVyc2lvbikKKyAgICBlY2hvICJtaXNzaW5nICRzY3JpcHR2ZXJzaW9uIChHTlUgQXV0b21ha2UpIgorICAgIGV4aXQgJD8KKyAgICA7OworCisgIC0qKQorICAgIGVjaG8gMT4mMiAiJDA6IFVua25vd24gXGAkMScgb3B0aW9uIgorICAgIGVjaG8gMT4mMiAiVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKKyAgICBleGl0IDEKKyAgICA7OworCitlc2FjCisKKyMgTm93IGV4aXQgaWYgd2UgaGF2ZSBpdCwgYnV0IGl0IGZhaWxlZC4gIEFsc28gZXhpdCBub3cgaWYgd2UKKyMgZG9uJ3QgaGF2ZSBpdCBhbmQgLS12ZXJzaW9uIHdhcyBwYXNzZWQgKG1vc3QgbGlrZWx5IHRvIGRldGVjdAorIyB0aGUgcHJvZ3JhbSkuCitjYXNlICQxIGluCisgIGxleHx5YWNjKQorICAgICMgTm90IEdOVSBwcm9ncmFtcywgdGhleSBkb24ndCBoYXZlIC0tdmVyc2lvbi4KKyAgICA7OworCisgIHRhcikKKyAgICBpZiB0ZXN0IC1uICIkcnVuIjsgdGhlbgorICAgICAgIGVjaG8gMT4mMiAiRVJST1I6IFxgdGFyJyByZXF1aXJlcyAtLXJ1biIKKyAgICAgICBleGl0IDEKKyAgICBlbGlmIHRlc3QgIngkMiIgPSAieC0tdmVyc2lvbiIgfHwgdGVzdCAieCQyIiA9ICJ4LS1oZWxwIjsgdGhlbgorICAgICAgIGV4aXQgMQorICAgIGZpCisgICAgOzsKKworICAqKQorICAgIGlmIHRlc3QgLXogIiRydW4iICYmICgkMSAtLXZlcnNpb24pID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAjIFdlIGhhdmUgaXQsIGJ1dCBpdCBmYWlsZWQuCisgICAgICAgZXhpdCAxCisgICAgZWxpZiB0ZXN0ICJ4JDIiID0gIngtLXZlcnNpb24iIHx8IHRlc3QgIngkMiIgPSAieC0taGVscCI7IHRoZW4KKyAgICAgICAjIENvdWxkIG5vdCBydW4gLS12ZXJzaW9uIG9yIC0taGVscC4gIFRoaXMgaXMgcHJvYmFibHkgc29tZW9uZQorICAgICAgICMgcnVubmluZyBgJFRPT0wgLS12ZXJzaW9uJyBvciBgJFRPT0wgLS1oZWxwJyB0byBjaGVjayB3aGV0aGVyCisgICAgICAgIyAkVE9PTCBleGlzdHMgYW5kIG5vdCBrbm93aW5nICRUT09MIHVzZXMgbWlzc2luZy4KKyAgICAgICBleGl0IDEKKyAgICBmaQorICAgIDs7Citlc2FjCisKKyMgSWYgaXQgZG9lcyBub3QgZXhpc3QsIG9yIGZhaWxzIHRvIHJ1biAocG9zc2libHkgYW4gb3V0ZGF0ZWQgdmVyc2lvbiksCisjIHRyeSB0byBlbXVsYXRlIGl0LgorY2FzZSAkMSBpbgorICBhY2xvY2FsKikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuICBZb3UgbWlnaHQgd2FudAorICAgICAgICAgdG8gaW5zdGFsbCB0aGUgXGBBdXRvbWFrZScgYW5kIFxgUGVybCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbQorICAgICAgICAgYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGFjbG9jYWwubTQKKyAgICA7OworCisgIGF1dG9jb25mKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQgdG8gaW5zdGFsbCB0aGUKKyAgICAgICAgIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0gZnJvbSBhbnkgR05VCisgICAgICAgICBhcmNoaXZlIHNpdGUuIgorICAgIHRvdWNoIGNvbmZpZ3VyZQorICAgIDs7CisKKyAgYXV0b2hlYWRlcikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIFxgYWNjb25maWcuaCcgb3IgXGAke2NvbmZpZ3VyZV9hY30nLiAgWW91IG1pZ2h0IHdhbnQKKyAgICAgICAgIHRvIGluc3RhbGwgdGhlIFxgQXV0b2NvbmYnIGFuZCBcYEdOVSBtNCcgcGFja2FnZXMuICBHcmFiIHRoZW0KKyAgICAgICAgIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIGZpbGVzPWBzZWQgLW4gJ3MvXlsgXSpBW0NNXV9DT05GSUdfSEVBREVSKFwoW14pXSpcKSkuKi9cMS9wJyAke2NvbmZpZ3VyZV9hY31gCisgICAgdGVzdCAteiAiJGZpbGVzIiAmJiBmaWxlcz0iY29uZmlnLmgiCisgICAgdG91Y2hfZmlsZXM9CisgICAgZm9yIGYgaW4gJGZpbGVzOyBkbworICAgICAgY2FzZSAkZiBpbgorICAgICAgKjoqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICJgZWNobyAiJGYiIHwKKwkJCQkgICAgICAgc2VkIC1lICdzL15bXjpdKjovLycgLWUgJ3MvOi4qLy8nYDs7CisgICAgICAqKSB0b3VjaF9maWxlcz0iJHRvdWNoX2ZpbGVzICRmLmluIjs7CisgICAgICBlc2FjCisgICAgZG9uZQorICAgIHRvdWNoICR0b3VjaF9maWxlcworICAgIDs7CisKKyAgYXV0b21ha2UqKQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgXGBNYWtlZmlsZS5hbScsIFxgYWNpbmNsdWRlLm00JyBvciBcYCR7Y29uZmlndXJlX2FjfScuCisgICAgICAgICBZb3UgbWlnaHQgd2FudCB0byBpbnN0YWxsIHRoZSBcYEF1dG9tYWtlJyBhbmQgXGBQZXJsJyBwYWNrYWdlcy4KKyAgICAgICAgIEdyYWIgdGhlbSBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICBmaW5kIC4gLXR5cGUgZiAtbmFtZSBNYWtlZmlsZS5hbSAtcHJpbnQgfAorCSAgIHNlZCAncy9cLmFtJC8uaW4vJyB8CisJICAgd2hpbGUgcmVhZCBmOyBkbyB0b3VjaCAiJGYiOyBkb25lCisgICAgOzsKKworICBhdXRvbTR0ZSkKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzIG5lZWRlZCwgYnV0IGlzICRtc2cuCisgICAgICAgICBZb3UgbWlnaHQgaGF2ZSBtb2RpZmllZCBzb21lIGZpbGVzIHdpdGhvdXQgaGF2aW5nIHRoZQorICAgICAgICAgcHJvcGVyIHRvb2xzIGZvciBmdXJ0aGVyIGhhbmRsaW5nIHRoZW0uCisgICAgICAgICBZb3UgY2FuIGdldCBcYCQxJyBhcyBwYXJ0IG9mIFxgQXV0b2NvbmYnIGZyb20gYW55IEdOVQorICAgICAgICAgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIjISAvYmluL3NoIgorCWVjaG8gIiMgQ3JlYXRlZCBieSBHTlUgQXV0b21ha2UgbWlzc2luZyBhcyBhIHJlcGxhY2VtZW50IG9mIgorCWVjaG8gIiMgICQgJEAiCisJZWNobyAiZXhpdCAwIgorCWNobW9kICt4ICRmaWxlCisJZXhpdCAxCisgICAgZmkKKyAgICA7OworCisgIGJpc29ufHlhY2MpCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyAkbXNnLiAgWW91IHNob3VsZCBvbmx5IG5lZWQgaXQgaWYKKyAgICAgICAgIHlvdSBtb2RpZmllZCBhIFxgLnknIGZpbGUuICBZb3UgbWF5IG5lZWQgdGhlIFxgQmlzb24nIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgQmlzb24nIGZyb20gYW55IEdOVSBhcmNoaXZlIHNpdGUuIgorICAgIHJtIC1mIHkudGFiLmMgeS50YWIuaAorICAgIGlmIHRlc3QgJCMgLW5lIDE7IHRoZW4KKyAgICAgICAgZXZhbCBMQVNUQVJHPSJcJHskI30iCisJY2FzZSAkTEFTVEFSRyBpbgorCSoueSkKKwkgICAgU1JDRklMRT1gZWNobyAiJExBU1RBUkciIHwgc2VkICdzL3kkL2MvJ2AKKwkgICAgaWYgdGVzdCAtZiAiJFNSQ0ZJTEUiOyB0aGVuCisJICAgICAgICAgY3AgIiRTUkNGSUxFIiB5LnRhYi5jCisJICAgIGZpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy95JC9oLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgeS50YWIuaAorCSAgICBmaQorCSAgOzsKKwllc2FjCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLWYgeS50YWIuaDsgdGhlbgorCWVjaG8gPnkudGFiLmgKKyAgICBmaQorICAgIGlmIHRlc3QgISAtZiB5LnRhYi5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID55LnRhYi5jCisgICAgZmkKKyAgICA7OworCisgIGxleHxmbGV4KQorICAgIGVjaG8gMT4mMiAiXAorV0FSTklORzogXGAkMScgaXMgJG1zZy4gIFlvdSBzaG91bGQgb25seSBuZWVkIGl0IGlmCisgICAgICAgICB5b3UgbW9kaWZpZWQgYSBcYC5sJyBmaWxlLiAgWW91IG1heSBuZWVkIHRoZSBcYEZsZXgnIHBhY2thZ2UKKyAgICAgICAgIGluIG9yZGVyIGZvciB0aG9zZSBtb2RpZmljYXRpb25zIHRvIHRha2UgZWZmZWN0LiAgWW91IGNhbiBnZXQKKyAgICAgICAgIFxgRmxleCcgZnJvbSBhbnkgR05VIGFyY2hpdmUgc2l0ZS4iCisgICAgcm0gLWYgbGV4Lnl5LmMKKyAgICBpZiB0ZXN0ICQjIC1uZSAxOyB0aGVuCisgICAgICAgIGV2YWwgTEFTVEFSRz0iXCR7JCN9IgorCWNhc2UgJExBU1RBUkcgaW4KKwkqLmwpCisJICAgIFNSQ0ZJTEU9YGVjaG8gIiRMQVNUQVJHIiB8IHNlZCAncy9sJC9jLydgCisJICAgIGlmIHRlc3QgLWYgIiRTUkNGSUxFIjsgdGhlbgorCSAgICAgICAgIGNwICIkU1JDRklMRSIgbGV4Lnl5LmMKKwkgICAgZmkKKwkgIDs7CisJZXNhYworICAgIGZpCisgICAgaWYgdGVzdCAhIC1mIGxleC55eS5jOyB0aGVuCisJZWNobyAnbWFpbigpIHsgcmV0dXJuIDA7IH0nID5sZXgueXkuYworICAgIGZpCisgICAgOzsKKworICBoZWxwMm1hbikKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorCSB5b3UgbW9kaWZpZWQgYSBkZXBlbmRlbmN5IG9mIGEgbWFudWFsIHBhZ2UuICBZb3UgbWF5IG5lZWQgdGhlCisJIFxgSGVscDJtYW4nIHBhY2thZ2UgaW4gb3JkZXIgZm9yIHRob3NlIG1vZGlmaWNhdGlvbnMgdG8gdGFrZQorCSBlZmZlY3QuICBZb3UgY2FuIGdldCBcYEhlbHAybWFuJyBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKworICAgIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9vdXRwdXQiYAorICAgIHRlc3QgLXogIiRmaWxlIiAmJiBmaWxlPWBlY2hvICIkKiIgfCBzZWQgLW4gIiRzZWRfbWludXNvImAKKyAgICBpZiB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KKwl0b3VjaCAkZmlsZQorICAgIGVsc2UKKwl0ZXN0IC16ICIkZmlsZSIgfHwgZXhlYyA+JGZpbGUKKwllY2hvICIuYWIgaGVscDJtYW4gaXMgcmVxdWlyZWQgdG8gZ2VuZXJhdGUgdGhpcyBwYWdlIgorCWV4aXQgMQorICAgIGZpCisgICAgOzsKKworICBtYWtlaW5mbykKKyAgICBlY2hvIDE+JjIgIlwKK1dBUk5JTkc6IFxgJDEnIGlzICRtc2cuICBZb3Ugc2hvdWxkIG9ubHkgbmVlZCBpdCBpZgorICAgICAgICAgeW91IG1vZGlmaWVkIGEgXGAudGV4aScgb3IgXGAudGV4aW5mbycgZmlsZSwgb3IgYW55IG90aGVyIGZpbGUKKyAgICAgICAgIGluZGlyZWN0bHkgYWZmZWN0aW5nIHRoZSBhc3BlY3Qgb2YgdGhlIG1hbnVhbC4gIFRoZSBzcHVyaW91cworICAgICAgICAgY2FsbCBtaWdodCBhbHNvIGJlIHRoZSBjb25zZXF1ZW5jZSBvZiB1c2luZyBhIGJ1Z2d5IFxgbWFrZScgKEFJWCwKKyAgICAgICAgIERVLCBJUklYKS4gIFlvdSBtaWdodCB3YW50IHRvIGluc3RhbGwgdGhlIFxgVGV4aW5mbycgcGFja2FnZSBvcgorICAgICAgICAgdGhlIFxgR05VIG1ha2UnIHBhY2thZ2UuICBHcmFiIGVpdGhlciBmcm9tIGFueSBHTlUgYXJjaGl2ZSBzaXRlLiIKKyAgICAjIFRoZSBmaWxlIHRvIHRvdWNoIGlzIHRoYXQgc3BlY2lmaWVkIHdpdGggLW8gLi4uCisgICAgZmlsZT1gZWNobyAiJCoiIHwgc2VkIC1uICIkc2VkX291dHB1dCJgCisgICAgdGVzdCAteiAiJGZpbGUiICYmIGZpbGU9YGVjaG8gIiQqIiB8IHNlZCAtbiAiJHNlZF9taW51c28iYAorICAgIGlmIHRlc3QgLXogIiRmaWxlIjsgdGhlbgorICAgICAgIyAuLi4gb3IgaXQgaXMgdGhlIG9uZSBzcGVjaWZpZWQgd2l0aCBAc2V0ZmlsZW5hbWUgLi4uCisgICAgICBpbmZpbGU9YGVjaG8gIiQqIiB8IHNlZCAncy8uKiBcKFteIF0qXCkgKiQvXDEvJ2AKKyAgICAgIGZpbGU9YHNlZCAtbiAnCisJL15Ac2V0ZmlsZW5hbWUveworCSAgcy8uKiBcKFteIF0qXCkgKiQvXDEvCisJICBwCisJICBxCisJfScgJGluZmlsZWAKKyAgICAgICMgLi4uIG9yIGl0IGlzIGRlcml2ZWQgZnJvbSB0aGUgc291cmNlIG5hbWUgKGRpci9mLnRleGkgYmVjb21lcyBmLmluZm8pCisgICAgICB0ZXN0IC16ICIkZmlsZSIgJiYgZmlsZT1gZWNobyAiJGluZmlsZSIgfCBzZWQgJ3MsLiovLCw7cywuW14uXSokLCwnYC5pbmZvCisgICAgZmkKKyAgICAjIElmIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LCB0aGUgdXNlciByZWFsbHkgbmVlZHMgbWFrZWluZm87CisgICAgIyBsZXQncyBmYWlsIHdpdGhvdXQgdG91Y2hpbmcgYW55dGhpbmcuCisgICAgdGVzdCAtZiAkZmlsZSB8fCBleGl0IDEKKyAgICB0b3VjaCAkZmlsZQorICAgIDs7CisKKyAgdGFyKQorICAgIHNoaWZ0CisKKyAgICAjIFdlIGhhdmUgYWxyZWFkeSB0cmllZCB0YXIgaW4gdGhlIGdlbmVyaWMgcGFydC4KKyAgICAjIExvb2sgZm9yIGdudXRhci9ndGFyIGJlZm9yZSBpbnZvY2F0aW9uIHRvIGF2b2lkIHVnbHkgZXJyb3IKKyAgICAjIG1lc3NhZ2VzLgorICAgIGlmIChnbnV0YXIgLS12ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgICAgZ251dGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBpZiAoZ3RhciAtLXZlcnNpb24gPiAvZGV2L251bGwgMj4mMSk7IHRoZW4KKyAgICAgICBndGFyICIkQCIgJiYgZXhpdCAwCisgICAgZmkKKyAgICBmaXJzdGFyZz0iJDEiCisgICAgaWYgc2hpZnQ7IHRoZW4KKwljYXNlICRmaXJzdGFyZyBpbgorCSpvKikKKwkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9vLy9gCisJICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKwljYXNlICRmaXJzdGFyZyBpbgorCSpoKikKKwkgICAgZmlyc3Rhcmc9YGVjaG8gIiRmaXJzdGFyZyIgfCBzZWQgcy9oLy9gCisJICAgIHRhciAiJGZpcnN0YXJnIiAiJEAiICYmIGV4aXQgMAorCSAgICA7OworCWVzYWMKKyAgICBmaQorCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBJIGNhbid0IHNlZW0gdG8gYmUgYWJsZSB0byBydW4gXGB0YXInIHdpdGggdGhlIGdpdmVuIGFyZ3VtZW50cy4KKyAgICAgICAgIFlvdSBtYXkgd2FudCB0byBpbnN0YWxsIEdOVSB0YXIgb3IgRnJlZSBwYXh1dGlscywgb3IgY2hlY2sgdGhlCisgICAgICAgICBjb21tYW5kIGxpbmUgYXJndW1lbnRzLiIKKyAgICBleGl0IDEKKyAgICA7OworCisgICopCisgICAgZWNobyAxPiYyICJcCitXQVJOSU5HOiBcYCQxJyBpcyBuZWVkZWQsIGFuZCBpcyAkbXNnLgorICAgICAgICAgWW91IG1pZ2h0IGhhdmUgbW9kaWZpZWQgc29tZSBmaWxlcyB3aXRob3V0IGhhdmluZyB0aGUKKyAgICAgICAgIHByb3BlciB0b29scyBmb3IgZnVydGhlciBoYW5kbGluZyB0aGVtLiAgQ2hlY2sgdGhlIFxgUkVBRE1FJyBmaWxlLAorICAgICAgICAgaXQgb2Z0ZW4gdGVsbHMgeW91IGFib3V0IHRoZSBuZWVkZWQgcHJlcmVxdWlzaXRlcyBmb3IgaW5zdGFsbGluZworICAgICAgICAgdGhpcyBwYWNrYWdlLiAgWW91IG1heSBhbHNvIHBlZWsgYXQgYW55IEdOVSBhcmNoaXZlIHNpdGUsIGluIGNhc2UKKyAgICAgICAgIHNvbWUgb3RoZXIgcGFja2FnZSB3b3VsZCBjb250YWluIHRoaXMgbWlzc2luZyBcYCQxJyBwcm9ncmFtLiIKKyAgICBleGl0IDEKKyAgICA7OworZXNhYworCitleGl0IDAKKworIyBMb2NhbCB2YXJpYWJsZXM6CisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9ta2luc3RhbGxkaXJzIGIvbHpvLTIuMDMvYXV0b2NvbmYvbWtpbnN0YWxsZGlycwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjdlMTZmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYvbWtpbnN0YWxsZGlycwpAQCAtMCwwICsxLDE2MSBAQAorIyEgL2Jpbi9zaAorIyBta2luc3RhbGxkaXJzIC0tLSBtYWtlIGRpcmVjdG9yeSBoaWVyYXJjaHkKKworc2NyaXB0dmVyc2lvbj0yMDA2LTA1LTExLjE5CisKKyMgT3JpZ2luYWwgYXV0aG9yOiBOb2FoIEZyaWVkbWFuIDxmcmllZG1hbkBwcmVwLmFpLm1pdC5lZHU+CisjIENyZWF0ZWQ6IDE5OTMtMDUtMTYKKyMgUHVibGljIGRvbWFpbi4KKyMKKyMgVGhpcyBmaWxlIGlzIG1haW50YWluZWQgaW4gQXV0b21ha2UsIHBsZWFzZSByZXBvcnQKKyMgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+IG9yIHNlbmQgcGF0Y2hlcyB0bworIyA8YXV0b21ha2UtcGF0Y2hlc0BnbnUub3JnPi4KKworbmw9JworJworSUZTPSIgIiIJJG5sIgorZXJyc3RhdHVzPTAKK2Rpcm1vZGU9CisKK3VzYWdlPSJcCitVc2FnZTogbWtpbnN0YWxsZGlycyBbLWhdIFstLWhlbHBdIFstLXZlcnNpb25dIFstbSBNT0RFXSBESVIgLi4uCisKK0NyZWF0ZSBlYWNoIGRpcmVjdG9yeSBESVIgKHdpdGggbW9kZSBNT0RFLCBpZiBzcGVjaWZpZWQpLCBpbmNsdWRpbmcgYWxsCitsZWFkaW5nIGZpbGUgbmFtZSBjb21wb25lbnRzLgorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LiIKKworIyBwcm9jZXNzIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKK3doaWxlIHRlc3QgJCMgLWd0IDAgOyBkbworICBjYXNlICQxIGluCisgICAgLWggfCAtLWhlbHAgfCAtLWgqKSAgICAgICAgICMgLWggZm9yIGhlbHAKKyAgICAgIGVjaG8gIiR1c2FnZSIKKyAgICAgIGV4aXQgJD8KKyAgICAgIDs7CisgICAgLW0pICAgICAgICAgICAgICAgICAgICAgICAgICMgLW0gUEVSTSBhcmcKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICQjIC1lcSAwICYmIHsgZWNobyAiJHVzYWdlIiAxPiYyOyBleGl0IDE7IH0KKyAgICAgIGRpcm1vZGU9JDEKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC0tdmVyc2lvbikKKyAgICAgIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAtLSkgICAgICAgICAgICAgICAgICAgICAgICAgIyBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nCisgICAgICBzaGlmdAorICAgICAgYnJlYWsKKyAgICAgIDs7CisgICAgLSopICAgICAgICAgICAgICAgICAgICAgICAgICMgdW5rbm93biBvcHRpb24KKyAgICAgIGVjaG8gIiR1c2FnZSIgMT4mMgorICAgICAgZXhpdCAxCisgICAgICA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgICAjIGZpcnN0IG5vbi1vcHQgYXJnCisgICAgICBicmVhaworICAgICAgOzsKKyAgZXNhYworZG9uZQorCitmb3IgZmlsZQorZG8KKyAgaWYgdGVzdCAtZCAiJGZpbGUiOyB0aGVuCisgICAgc2hpZnQKKyAgZWxzZQorICAgIGJyZWFrCisgIGZpCitkb25lCisKK2Nhc2UgJCMgaW4KKyAgMCkgZXhpdCAwIDs7Citlc2FjCisKKyMgU29sYXJpcyA4J3MgbWtkaXIgLXAgaXNuJ3QgdGhyZWFkLXNhZmUuICBJZiB5b3UgbWtkaXIgLXAgYS9iIGFuZAorIyBta2RpciAtcCBhL2MgYXQgdGhlIHNhbWUgdGltZSwgYm90aCB3aWxsIGRldGVjdCB0aGF0IGEgaXMgbWlzc2luZywKKyMgb25lIHdpbGwgY3JlYXRlIGEsIHRoZW4gdGhlIG90aGVyIHdpbGwgdHJ5IHRvIGNyZWF0ZSBhIGFuZCBkaWUgd2l0aAorIyBhICJGaWxlIGV4aXN0cyIgZXJyb3IuICBUaGlzIGlzIGEgcHJvYmxlbSB3aGVuIGNhbGxpbmcgbWtpbnN0YWxsZGlycworIyBmcm9tIGEgcGFyYWxsZWwgbWFrZS4gIFdlIHVzZSAtLXZlcnNpb24gaW4gdGhlIHByb2JlIHRvIHJlc3RyaWN0CisjIG91cnNlbHZlcyB0byBHTlUgbWtkaXIsIHdoaWNoIGlzIHRocmVhZC1zYWZlLgorY2FzZSAkZGlybW9kZSBpbgorICAnJykKKyAgICBpZiBta2RpciAtcCAtLXZlcnNpb24gLiA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLXAgLS0gIiRAIgorICAgIGVsc2UKKyAgICAgICMgT24gTmV4dFN0ZXAgYW5kIE9wZW5TdGVwLCB0aGUgYG1rZGlyJyBjb21tYW5kIGRvZXMgbm90CisgICAgICAjIHJlY29nbml6ZSBhbnkgb3B0aW9uLiAgSXQgd2lsbCBpbnRlcnByZXQgYWxsIG9wdGlvbnMgYXMKKyAgICAgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisgICAgICAjIGV4aXN0cy4KKyAgICAgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgICAgICB0ZXN0IC1kIC4vLS12ZXJzaW9uICYmIHJtZGlyIC4vLS12ZXJzaW9uCisgICAgZmkKKyAgICA7OworICAqKQorICAgIGlmIG1rZGlyIC1tICIkZGlybW9kZSIgLXAgLS12ZXJzaW9uIC4gPi9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgdGVzdCAhIC1kIC4vLS12ZXJzaW9uOyB0aGVuCisgICAgICBlY2hvICJta2RpciAtbSAkZGlybW9kZSAtcCAtLSAkKiIKKyAgICAgIGV4ZWMgbWtkaXIgLW0gIiRkaXJtb2RlIiAtcCAtLSAiJEAiCisgICAgZWxzZQorICAgICAgIyBDbGVhbiB1cCBhZnRlciBOZXh0U3RlcCBhbmQgT3BlblN0ZXAgbWtkaXIuCisgICAgICBmb3IgZCBpbiAuLy1tIC4vLXAgLi8tLXZlcnNpb24gIi4vJGRpcm1vZGUiOworICAgICAgZG8KKyAgICAgICAgdGVzdCAtZCAkZCAmJiBybWRpciAkZAorICAgICAgZG9uZQorICAgIGZpCisgICAgOzsKK2VzYWMKKworZm9yIGZpbGUKK2RvCisgIGNhc2UgJGZpbGUgaW4KKyAgICAvKikgcGF0aGNvbXA9LyA7OworICAgICopICBwYXRoY29tcD0gOzsKKyAgZXNhYworICBvSUZTPSRJRlMKKyAgSUZTPS8KKyAgc2V0IGZub3JkICRmaWxlCisgIHNoaWZ0CisgIElGUz0kb0lGUworCisgIGZvciBkCisgIGRvCisgICAgdGVzdCAieCRkIiA9IHggJiYgY29udGludWUKKworICAgIHBhdGhjb21wPSRwYXRoY29tcCRkCisgICAgY2FzZSAkcGF0aGNvbXAgaW4KKyAgICAgIC0qKSBwYXRoY29tcD0uLyRwYXRoY29tcCA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorICAgICAgZWNobyAibWtkaXIgJHBhdGhjb21wIgorCisgICAgICBta2RpciAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKyAgICAgIGlmIHRlc3QgISAtZCAiJHBhdGhjb21wIjsgdGhlbgorCWVycnN0YXR1cz0kbGFzdGVycgorICAgICAgZWxzZQorCWlmIHRlc3QgISAteiAiJGRpcm1vZGUiOyB0aGVuCisJICBlY2hvICJjaG1vZCAkZGlybW9kZSAkcGF0aGNvbXAiCisJICBsYXN0ZXJyPQorCSAgY2htb2QgIiRkaXJtb2RlIiAiJHBhdGhjb21wIiB8fCBsYXN0ZXJyPSQ/CisKKwkgIGlmIHRlc3QgISAteiAiJGxhc3RlcnIiOyB0aGVuCisJICAgIGVycnN0YXR1cz0kbGFzdGVycgorCSAgZmkKKwlmaQorICAgICAgZmkKKyAgICBmaQorCisgICAgcGF0aGNvbXA9JHBhdGhjb21wLworICBkb25lCitkb25lCisKK2V4aXQgJGVycnN0YXR1cworCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogc2hlbGwtc2NyaXB0CisjIHNoLWluZGVudGF0aW9uOiAyCisjIGV2YWw6IChhZGQtaG9vayAnd3JpdGUtZmlsZS1ob29rcyAndGltZS1zdGFtcCkKKyMgdGltZS1zdGFtcC1zdGFydDogInNjcmlwdHZlcnNpb249IgorIyB0aW1lLXN0YW1wLWZvcm1hdDogIiU6eS0lMDJtLSUwMmQuJTAySCIKKyMgdGltZS1zdGFtcC1lbmQ6ICIkIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sem8tMi4wMy9hdXRvY29uZi9weS1jb21waWxlIGIvbHpvLTIuMDMvYXV0b2NvbmYvcHktY29tcGlsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NjVjZGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYvcHktY29tcGlsZQpAQCAtMCwwICsxLDE0NCBAQAorIyEvYmluL3NoCisjIHB5LWNvbXBpbGUgLSBDb21waWxlIGEgUHl0aG9uIHByb2dyYW0KKworc2NyaXB0dmVyc2lvbj0yMDA1LTA1LTE0LjIyCisKKyMgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorIyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBvcHRpb24pCisjIGFueSBsYXRlciB2ZXJzaW9uLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2lmIFsgLXogIiRQWVRIT04iIF07IHRoZW4KKyAgUFlUSE9OPXB5dGhvbgorZmkKKworYmFzZWRpcj0KK2Rlc3RkaXI9CitmaWxlcz0KK3doaWxlIHRlc3QgJCMgLW5lIDA7IGRvCisgIGNhc2UgIiQxIiBpbgorICAgIC0tYmFzZWRpcikKKyAgICAgIGJhc2VkaXI9JDIKKyAgICAgIGlmIHRlc3QgLXogIiRiYXNlZGlyIjsgdGhlbgorICAgICAgICBlY2hvICIkMDogTWlzc2luZyBhcmd1bWVudCB0byAtLWJhc2VkaXIuIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC0tZGVzdGRpcikKKyAgICAgIGRlc3RkaXI9JDIKKyAgICAgIGlmIHRlc3QgLXogIiRkZXN0ZGlyIjsgdGhlbgorICAgICAgICBlY2hvICIkMDogTWlzc2luZyBhcmd1bWVudCB0byAtLWRlc3RkaXIuIiAxPiYyCisgICAgICAgIGV4aXQgMQorICAgICAgZmkKKyAgICAgIHNoaWZ0CisgICAgICA7OworICAgIC1ofC0taCopCisgICAgICBjYXQgPDxcRU9GCitVc2FnZTogcHktY29tcGlsZSBbLS1oZWxwXSBbLS12ZXJzaW9uXSBbLS1iYXNlZGlyIERJUl0gWy0tZGVzdGRpciBESVJdIEZJTEVTLi4uIgorCitCeXRlIGNvbXBpbGUgc29tZSBweXRob24gc2NyaXB0cyBGSUxFUy4gIFVzZSAtLWRlc3RkaXIgdG8gc3BlY2lmeSBhbnkKK2xlYWRpbmcgZGlyZWN0b3J5IHBhdGggdG8gdGhlIEZJTEVTIHRoYXQgeW91IGRvbid0IHdhbnQgdG8gaW5jbHVkZSBpbiB0aGUKK2J5dGUgY29tcGlsZWQgZmlsZS4gIFNwZWNpZnkgLS1iYXNlZGlyIGZvciBhbnkgYWRkaXRpb25hbCBwYXRoIGluZm9ybWF0aW9uIHlvdQorZG8gd2FudCB0byBiZSBzaG93biBpbiB0aGUgYnl0ZSBjb21waWxlZCBmaWxlLgorCitFeGFtcGxlOgorICBweS1jb21waWxlIC0tZGVzdGRpciAvdG1wL3BrZy1yb290IC0tYmFzZWRpciAvdXNyL3NoYXJlL3Rlc3QgdGVzdC5weSB0ZXN0Mi5weQorCitSZXBvcnQgYnVncyB0byA8YnVnLWF1dG9tYWtlQGdudS5vcmc+LgorRU9GCisgICAgICBleGl0ICQ/CisgICAgICA7OworICAgIC12fC0tdiopCisgICAgICBlY2hvICJweS1jb21waWxlICRzY3JpcHR2ZXJzaW9uIgorICAgICAgZXhpdCAkPworICAgICAgOzsKKyAgICAqKQorICAgICAgZmlsZXM9IiRmaWxlcyAkMSIKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hpZnQKK2RvbmUKKworaWYgdGVzdCAteiAiJGZpbGVzIjsgdGhlbgorICAgIGVjaG8gIiQwOiBObyBmaWxlcyBnaXZlbi4gIFRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCisgICAgZXhpdCAxCitmaQorCisjIGlmIGJhc2VkaXIgd2FzIGdpdmVuLCB0aGVuIGl0IHNob3VsZCBiZSBwcmVwZW5kZWQgdG8gZmlsZW5hbWVzIGJlZm9yZQorIyBieXRlIGNvbXBpbGF0aW9uLgoraWYgWyAteiAiJGJhc2VkaXIiIF07IHRoZW4KKyAgICBwYXRodHJhbnM9InBhdGggPSBmaWxlIgorZWxzZQorICAgIHBhdGh0cmFucz0icGF0aCA9IG9zLnBhdGguam9pbignJGJhc2VkaXInLCBmaWxlKSIKK2ZpCisKKyMgaWYgZGVzdGRpciB3YXMgZ2l2ZW4sIHRoZW4gaXQgbmVlZHMgdG8gYmUgcHJlcGVuZGVkIHRvIHRoZSBmaWxlbmFtZSB0bworIyBieXRlIGNvbXBpbGUgYnV0IG5vdCBnbyBpbnRvIHRoZSBjb21waWxlZCBmaWxlLgoraWYgWyAteiAiJGRlc3RkaXIiIF07IHRoZW4KKyAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gcGF0aCIKK2Vsc2UKKyAgICBmaWxldHJhbnM9ImZpbGVwYXRoID0gb3MucGF0aC5ub3JtcGF0aCgnJGRlc3RkaXInICsgb3Muc2VwICsgcGF0aCkiCitmaQorCiskUFlUSE9OIC1jICIKK2ltcG9ydCBzeXMsIG9zLCBzdHJpbmcsIHB5X2NvbXBpbGUKKworZmlsZXMgPSAnJyckZmlsZXMnJycKKworcHJpbnQgJ0J5dGUtY29tcGlsaW5nIHB5dGhvbiBtb2R1bGVzLi4uJworZm9yIGZpbGUgaW4gc3RyaW5nLnNwbGl0KGZpbGVzKToKKyAgICAkcGF0aHRyYW5zCisgICAgJGZpbGV0cmFucworICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhmaWxlcGF0aCkgb3Igbm90IChsZW4oZmlsZXBhdGgpID49IDMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYW5kIGZpbGVwYXRoWy0zOl0gPT0gJy5weScpOgorCWNvbnRpbnVlCisgICAgcHJpbnQgZmlsZSwKKyAgICBzeXMuc3Rkb3V0LmZsdXNoKCkKKyAgICBweV9jb21waWxlLmNvbXBpbGUoZmlsZXBhdGgsIGZpbGVwYXRoICsgJ2MnLCBwYXRoKQorcHJpbnQiIHx8IGV4aXQgJD8KKworIyB0aGlzIHdpbGwgZmFpbCBmb3IgcHl0aG9uIDwgMS41LCBidXQgdGhhdCBkb2Vzbid0IG1hdHRlciAuLi4KKyRQWVRIT04gLU8gLWMgIgoraW1wb3J0IHN5cywgb3MsIHN0cmluZywgcHlfY29tcGlsZQorCitmaWxlcyA9ICcnJyRmaWxlcycnJworcHJpbnQgJ0J5dGUtY29tcGlsaW5nIHB5dGhvbiBtb2R1bGVzIChvcHRpbWl6ZWQgdmVyc2lvbnMpIC4uLicKK2ZvciBmaWxlIGluIHN0cmluZy5zcGxpdChmaWxlcyk6CisgICAgJHBhdGh0cmFucworICAgICRmaWxldHJhbnMKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoZmlsZXBhdGgpIG9yIG5vdCAobGVuKGZpbGVwYXRoKSA+PSAzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBmaWxlcGF0aFstMzpdID09ICcucHknKToKKwljb250aW51ZQorICAgIHByaW50IGZpbGUsCisgICAgc3lzLnN0ZG91dC5mbHVzaCgpCisgICAgcHlfY29tcGlsZS5jb21waWxlKGZpbGVwYXRoLCBmaWxlcGF0aCArICdvJywgcGF0aCkKK3ByaW50IiAyPi9kZXYvbnVsbCB8fCA6CisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBzaGVsbC1zY3JpcHQKKyMgc2gtaW5kZW50YXRpb246IDIKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLWVuZDogIiQiCisjIEVuZDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL3NodG9vbCBiL2x6by0yLjAzL2F1dG9jb25mL3NodG9vbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTM1NGEwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYvc2h0b29sCkBAIC0wLDAgKzEsMzk5MCBAQAorIyEvYmluL3NoCisjIworIyMgIEdOVSBzaHRvb2wgLS0gVGhlIEdOVSBQb3J0YWJsZSBTaGVsbCBUb29sCisjIyAgQ29weXJpZ2h0IChjKSAxOTk0LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KKyMjCisjIyAgU2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9zb2Z0d2FyZS9zaHRvb2wvIGZvciBtb3JlIGluZm9ybWF0aW9uLgorIyMgIFNlZSBmdHA6Ly9mdHAuZ251Lm9yZy9nbnUvc2h0b29sLyBmb3IgbGF0ZXN0IHZlcnNpb24uCisjIworIyMgIFZlcnNpb246ICAyLjAuNiAoMTktQXByLTIwMDYpCisjIyAgQ29udGVudHM6IGFsbCBhdmFpbGFibGUgbW9kdWxlcworIyMKKworIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyMgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyMjICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorIyMKKyMjICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMjICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyMgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZSBHTlUKKyMjICBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjIworIyMgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIyAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyMjICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywKKyMjICBVU0EsIG9yIGNvbnRhY3QgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4uCisjIworIyMgIE5PVElDRTogR2l2ZW4gdGhhdCB5b3UgaW5jbHVkZSB0aGlzIGZpbGUgdmVyYmF0aW0gaW50byB5b3VyIG93bgorIyMgIHNvdXJjZSB0cmVlLCB5b3UgYXJlIGp1c3RpZmllZCBpbiBzYXlpbmcgdGhhdCBpdCByZW1haW5zIHNlcGFyYXRlCisjIyAgZnJvbSB5b3VyIHBhY2thZ2UsIGFuZCB0aGF0IHRoaXMgd2F5IHlvdSBhcmUgc2ltcGx5IGp1c3QgdXNpbmcgR05VCisjIyAgc2h0b29sLiBTbywgaW4gdGhpcyBzaXR1YXRpb24sIHRoZXJlIGlzIG5vIHJlcXVpcmVtZW50IHRoYXQgeW91cgorIyMgIHBhY2thZ2UgaXRzZWxmIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbgorIyMgIG9yZGVyIHRvIHRha2UgYWR2YW50YWdlIG9mIEdOVSBzaHRvb2wuCisjIworCisjIworIyMgIFVzYWdlOiBzaHRvb2wgWzxvcHRpb25zPl0gWzxjbWQtbmFtZT4gWzxjbWQtb3B0aW9ucz5dIFs8Y21kLWFyZ3M+XV0KKyMjCisjIyAgQXZhaWxhYmxlIGNvbW1hbmRzOgorIyMgICAgZWNobyAgICAgICBQcmludCBzdHJpbmcgd2l0aCBvcHRpb25hbCBjb25zdHJ1Y3QgZXhwYW5zaW9uCisjIyAgICBtZGF0ZSAgICAgIFByZXR0eS1wcmludCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyCisjIyAgICB0YWJsZSAgICAgIFByZXR0eS1wcmludCBhIGZpZWxkLXNlcGFyYXRlZCBsaXN0IGFzIGEgdGFibGUKKyMjICAgIHByb3AgICAgICAgRGlzcGxheSBwcm9ncmVzcyB3aXRoIGEgcnVubmluZyBwcm9wZWxsZXIKKyMjICAgIG1vdmUgICAgICAgTW92ZSBmaWxlcyB3aXRoIHNpbXVsdGFuZW91cyBzdWJzdGl0dXRpb24KKyMjICAgIGluc3RhbGwgICAgSW5zdGFsbCBhIHByb2dyYW0sIHNjcmlwdCBvciBkYXRhZmlsZQorIyMgICAgbWtkaXIgICAgICBNYWtlIG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzCisjIyAgICBta2xuICAgICAgIE1ha2UgbGluayB3aXRoIGNhbGN1bGF0aW9uIG9mIHJlbGF0aXZlIHBhdGhzCisjIyAgICBta3NoYWRvdyAgIE1ha2UgYSBzaGFkb3cgdHJlZSB0aHJvdWdoIHN5bWJvbGljIGxpbmtzCisjIyAgICBmaXhwZXJtICAgIEZpeCBmaWxlIHBlcm1pc3Npb25zIGluc2lkZSBhIHNvdXJjZSB0cmVlCisjIyAgICByb3RhdGUgICAgIExvZ2ZpbGUgcm90YXRpb24KKyMjICAgIHRhcmJhbGwgICAgUm9sbCBkaXN0cmlidXRpb24gdGFyYmFsbHMKKyMjICAgIHN1YnN0ICAgICAgQXBwbHkgc2VkKDEpIHN1YnN0aXR1dGlvbiBvcGVyYXRpb25zCisjIyAgICBwbGF0Zm9ybSAgIFBsYXRmb3JtIElkZW50aWZpY2F0aW9uIFV0aWxpdHkKKyMjICAgIGFyeCAgICAgICAgRXh0ZW5kZWQgYXJjaGl2ZSBjb21tYW5kCisjIyAgICBzbG8gICAgICAgIFNlcGFyYXRlIGxpbmtlciBvcHRpb25zIGJ5IGxpYnJhcnkgY2xhc3MKKyMjICAgIHNjcHAgICAgICAgU2hhcmluZyBDIFByZS1Qcm9jZXNzb3IKKyMjICAgIHZlcnNpb24gICAgTWFpbnRhaW4gYSB2ZXJzaW9uIGluZm9ybWF0aW9uIGZpbGUKKyMjICAgIHBhdGggICAgICAgRGVhbCB3aXRoIHByb2dyYW0gcGF0aHMKKyMjCisKKyMgICBtYXhpbXVtIEJvdXJuZS1TaGVsbCBjb21wYXRpYmlsaXR5CitpZiBbICIuJFpTSF9WRVJTSU9OIiAhPSAuIF0gJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICMgICByZWNvbmZpZ3VyZSB6c2goMSkKKyAgICBlbXVsYXRlIHNoCisgICAgTlVMTENNRD06CisgICAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCitlbGlmIFsgIi4kQkFTSF9WRVJTSU9OIiAhPSAuIF0gJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgIyAgIHJlY29uZmlndXJlIGJhc2goMSkKKyAgICBzZXQgLW8gcG9zaXgKK2ZpCisKKyMgICBtYXhpbXVtIGluZGVwZW5kZW5jZSBvZiBOTFMgbnVpc2FuY2VzCitmb3IgdmFyIGluIFwKKyAgICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAorICAgIExDX01FQVNVUkVNRU5UIExDX01FU1NBR0VTIExDX01PTkVUQVJZIExDX05BTUUgTENfTlVNRVJJQyBMQ19QQVBFUiBcCisgICAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgICAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICR2YXI9QzsgZXhwb3J0ICR2YXIpIDI+JjFgIik7IHRoZW4KKyAgICAgICAgZXZhbCAkdmFyPUM7IGV4cG9ydCAkdmFyCisgICAgZWxzZQorICAgICAgICB1bnNldCAkdmFyCisgICAgZmkKK2RvbmUKKworIyAgIGluaXRpYWwgY29tbWFuZCBsaW5lIGhhbmRsaW5nCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgICBlY2hvICIkMDpFcnJvcjogaW52YWxpZCBjb21tYW5kIGxpbmUiIDE+JjIKKyAgICBlY2hvICIkMDpIaW50OiAgcnVuIFxgJDAgLWgnIGZvciB1c2FnZSIgMT4mMgorICAgIGV4aXQgMQorZmkKK2lmIFsgIi4kMSIgPSAiLi1oIiBdIHx8IFsgIi4kMSIgPSAiLi0taGVscCIgXTsgdGhlbgorICAgIGVjaG8gIlRoaXMgaXMgR05VIHNodG9vbCwgdmVyc2lvbiAyLjAuNiAoMTktQXByLTIwMDYpIgorICAgIGVjaG8gJ0NvcHlyaWdodCAoYykgMTk5NC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+JworICAgIGVjaG8gJ1JlcG9ydCBidWdzIHRvIDxidWctc2h0b29sQGdudS5vcmc+JworICAgIGVjaG8gJycKKyAgICBlY2hvICdVc2FnZTogc2h0b29sIFs8b3B0aW9ucz5dIFs8Y21kLW5hbWU+IFs8Y21kLW9wdGlvbnM+XSBbPGNtZC1hcmdzPl1dJworICAgIGVjaG8gJycKKyAgICBlY2hvICdBdmFpbGFibGUgZ2xvYmFsIDxvcHRpb25zPjonCisgICAgZWNobyAnICAtdiwgLS12ZXJzaW9uICAgZGlzcGxheSBzaHRvb2wgdmVyc2lvbiBpbmZvcm1hdGlvbicKKyAgICBlY2hvICcgIC1oLCAtLWhlbHAgICAgICBkaXNwbGF5IHNodG9vbCB1c2FnZSBoZWxwIHBhZ2UgKHRoaXMgb25lKScKKyAgICBlY2hvICcgIC1kLCAtLWRlYnVnICAgICBkaXNwbGF5IHNoZWxsIHRyYWNlIGluZm9ybWF0aW9uJworICAgIGVjaG8gJyAgLXIsIC0tcmVjcmVhdGUgIHJlY3JlYXRlIHRoaXMgc2h0b29sIHNjcmlwdCB2aWEgc2h0b29saXplJworICAgIGVjaG8gJycKKyAgICBlY2hvICdBdmFpbGFibGUgPGNtZC1uYW1lPiBbPGNtZC1vcHRpb25zPl0gWzxjbWQtYXJncz5dOicKKyAgICBlY2hvICcgIGVjaG8gICAgIFstbnwtLW5ld2xpbmVdIFstZXwtLWV4cGFuZF0gWzxzdHJpbmc+IC4uLl0nCisgICAgZWNobyAnICBtZGF0ZSAgICBbLW58LS1uZXdsaW5lXSBbLXp8LS16ZXJvXSBbLXN8LS1zaG9ydGVuXSBbLWR8LS1kaWdpdHNdJworICAgIGVjaG8gJyAgICAgICAgICAgWy1mfC0tZmllbGQtc2VwIDxzdHI+XSBbLW98LS1vcmRlciA8c3BlYz5dIDxwYXRoPicKKyAgICBlY2hvICcgIHRhYmxlICAgIFstRnwtLWZpZWxkLXNlcCA8c2VwPl0gWy13fC0td2lkdGggPHdpZHRoPl0gWy1jfC0tY29sdW1ucycKKyAgICBlY2hvICcgICAgICAgICAgIDxjb2xzPl0gWy1zfC0tc3RyaXAgPHN0cmlwPl0gPHN0cj48c2VwPjxzdHI+Li4uJworICAgIGVjaG8gJyAgcHJvcCAgICAgWy1wfC0tcHJlZml4IDxzdHI+XScKKyAgICBlY2hvICcgIG1vdmUgICAgIFstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWV8LS1leHBhbmRdIFstcHwtLXByZXNlcnZlXScKKyAgICBlY2hvICcgICAgICAgICAgIDxzcmMtZmlsZT4gPGRzdC1maWxlPicKKyAgICBlY2hvICcgIGluc3RhbGwgIFstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWR8LS1ta2Rpcl0gWy1jfC0tY29weV0nCisgICAgZWNobyAnICAgICAgICAgICBbLUN8LS1jb21wYXJlLWNvcHldIFstc3wtLXN0cmlwXSBbLW18LS1tb2RlIDxtb2RlPl0nCisgICAgZWNobyAnICAgICAgICAgICBbLW98LS1vd25lciA8b3duZXI+XSBbLWd8LS1ncm91cCA8Z3JvdXA+XSBbLWV8LS1leGVjJworICAgIGVjaG8gJyAgICAgICAgICAgPHNlZC1jbWQ+XSA8ZmlsZT4gWzxmaWxlPiAuLi5dIDxwYXRoPicKKyAgICBlY2hvICcgIG1rZGlyICAgIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1wfC0tcGFyZW50c10gWy1tfC0tbW9kZScKKyAgICBlY2hvICcgICAgICAgICAgIDxtb2RlPl0gWy1vfC0tb3duZXIgPG93bmVyPl0gWy1nfC0tZ3JvdXAgPGdyb3VwPl0gPGRpcj4nCisgICAgZWNobyAnICAgICAgICAgICBbPGRpcj4gLi4uXScKKyAgICBlY2hvICcgIG1rbG4gICAgIFstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1zfC0tc3ltYm9saWNdIDxzcmMtcGF0aD4nCisgICAgZWNobyAnICAgICAgICAgICBbPHNyYy1wYXRoPiAuLi5dIDxkc3QtcGF0aD4nCisgICAgZWNobyAnICBta3NoYWRvdyBbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1hfC0tYWxsXSA8c3JjLWRpcj4gPGRzdC1kaXI+JworICAgIGVjaG8gJyAgZml4cGVybSAgWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIDxwYXRoPiBbPHBhdGg+IC4uLl0nCisgICAgZWNobyAnICByb3RhdGUgICBbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1mfC0tZm9yY2VdIFstbnwtLW51bS1maWxlcycKKyAgICBlY2hvICcgICAgICAgICAgIDxjb3VudD5dIFstc3wtLXNpemUgPHNpemU+XSBbLWN8LS1jb3B5XSBbLXJ8LS1yZW1vdmVdJworICAgIGVjaG8gJyAgICAgICAgICAgWy1hfC0tYXJjaGl2ZS1kaXIgPGRpcj5dIFstenwtLWNvbXByZXNzIFs8dG9vbD46XTxsZXZlbD5dJworICAgIGVjaG8gJyAgICAgICAgICAgWy1ifC0tYmFja2dyb3VuZF0gWy1kfC0tZGVsYXldIFstcHwtLXBhZCA8bGVuPl0gWy1tfC0tbW9kZScKKyAgICBlY2hvICcgICAgICAgICAgIDxtb2RlPl0gWy1vfC0tb3duZXIgPG93bmVyPl0gWy1nfC0tZ3JvdXAgPGdyb3VwPl0gWy1NfC0tbWlncmF0ZScKKyAgICBlY2hvICcgICAgICAgICAgIDxjbWQ+XSBbLVB8LS1wcm9sb2cgPGNtZD5dIFstRXwtLWVwaWxvZyA8Y21kPl0gPGZpbGU+IFsuLi5dJworICAgIGVjaG8gJyAgdGFyYmFsbCAgWy10fC0tdHJhY2VdIFstdnwtLXZlcmJvc2VdIFstb3wtLW91dHB1dCA8dGFyYmFsbD5dJworICAgIGVjaG8gJyAgICAgICAgICAgWy1jfC0tY29tcHJlc3MgPHByb2c+XSBbLWR8LS1kaXJlY3RvcnkgPGRpcj5dIFstdXwtLXVzZXInCisgICAgZWNobyAnICAgICAgICAgICA8dXNlcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstZXwtLWV4Y2x1ZGUgPHBhdHRlcm4+XScKKyAgICBlY2hvICcgICAgICAgICAgIDxwYXRoPiBbPHBhdGg+IC4uLl0nCisgICAgZWNobyAnICBzdWJzdCAgICBbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1ufC0tbm9wXSBbLXd8LS13YXJuaW5nXScKKyAgICBlY2hvICcgICAgICAgICAgIFstcXwtLXF1aWV0XSBbLXN8LS1zdGVhbHRoXSBbLWl8LS1pbnRlcmFjdGl2ZV0gWy1ifC0tYmFja3VwJworICAgIGVjaG8gJyAgICAgICAgICAgPGV4dD5dIFstZXwtLWV4ZWMgPGNtZD5dIFstZnwtLWZpbGUgPGNtZC1maWxlPl0gWzxmaWxlPl0nCisgICAgZWNobyAnICAgICAgICAgICBbLi4uXScKKyAgICBlY2hvICcgIHBsYXRmb3JtIFstRnwtLWZvcm1hdCA8Zm9ybWF0Pl0gWy1TfC0tc2VwIDxzdHJpbmc+XSBbLUN8LS1jb25jJworICAgIGVjaG8gJyAgICAgICAgICAgPHN0cmluZz5dIFstTHwtLWxvd2VyXSBbLVV8LS11cHBlcl0gWy12fC0tdmVyYm9zZV0nCisgICAgZWNobyAnICAgICAgICAgICBbLWN8LS1jb25jaXNlXSBbLW58LS1uby1uZXdsaW5lXSBbLXR8LS10eXBlIDx0eXBlPl0nCisgICAgZWNobyAnICAgICAgICAgICBbLVZ8LS12ZXJzaW9uXSBbLWh8LS1oZWxwXScKKyAgICBlY2hvICcgIGFyeCAgICAgIFstdHwtLXRyYWNlXSBbLUN8LS1jb21tYW5kIDxjbWQ+XSA8b3A+IDxhcmNoaXZlPiBbPGZpbGU+JworICAgIGVjaG8gJyAgICAgICAgICAgLi4uXScKKyAgICBlY2hvICcgIHNsbyAgICAgIFstcHwtLXByZWZpeCA8c3RyPl0gLS0gLUw8ZGlyPiAtbDxsaWI+IFstTDxkaXI+IC1sPGxpYj4nCisgICAgZWNobyAnICAgICAgICAgICAuLi5dJworICAgIGVjaG8gJyAgc2NwcCAgICAgWy12fC0tdmVyYm9zZV0gWy1wfC0tcHJlc2VydmVdIFstZnwtLWZpbHRlciA8ZmlsdGVyPl0nCisgICAgZWNobyAnICAgICAgICAgICBbLW98LS1vdXRwdXQgPG9maWxlPl0gWy10fC0tdGVtcGxhdGUgPHRmaWxlPl0gWy1NfC0tbWFyaycKKyAgICBlY2hvICcgICAgICAgICAgIDxtYXJrPl0gWy1EfC0tZGVmaW5lIDxkbmFtZT5dIFstQ3wtLWNsYXNzIDxjbmFtZT5dJworICAgIGVjaG8gJyAgICAgICAgICAgPGZpbGU+IFs8ZmlsZT4gLi4uXScKKyAgICBlY2hvICcgIHZlcnNpb24gIFstbHwtLWxhbmd1YWdlIDxsYW5nPl0gWy1ufC0tbmFtZSA8bmFtZT5dIFstcHwtLXByZWZpeCcKKyAgICBlY2hvICcgICAgICAgICAgIDxwcmVmaXg+XSBbLXN8LS1zZXQgPHZlcnNpb24+XSBbLWV8LS1lZGl0XSBbLWl8LS1pbmNyZWFzZScKKyAgICBlY2hvICcgICAgICAgICAgIDxrbm9iPl0gWy1kfC0tZGlzcGxheSA8dHlwZT5dIDxmaWxlPicKKyAgICBlY2hvICcgIHBhdGggICAgIFstc3wtLXN1cHByZXNzXSBbLXJ8LS1yZXZlcnNlXSBbLWR8LS1kaXJuYW1lXSBbLWJ8LS1iYXNlbmFtZV0nCisgICAgZWNobyAnICAgICAgICAgICBbLW18LS1tYWdpY10gWy1wfC0tcGF0aCA8cGF0aD5dIDxzdHI+IFs8c3RyPiAuLi5dJworICAgIGVjaG8gJycKKyAgICBleGl0IDAKK2ZpCitpZiBbICIuJDEiID0gIi4tdiIgXSB8fCBbICIuJDEiID0gIi4tLXZlcnNpb24iIF07IHRoZW4KKyAgICBlY2hvICJHTlUgc2h0b29sIDIuMC42ICgxOS1BcHItMjAwNikiCisgICAgZXhpdCAwCitmaQoraWYgWyAiLiQxIiA9ICIuLXIiIF0gfHwgWyAiLiQxIiA9ICIuLS1yZWNyZWF0ZSIgXTsgdGhlbgorICAgIHNodG9vbGl6ZSAtb3NodG9vbCBhbGwKKyAgICBleGl0IDAKK2ZpCitpZiBbICIuJDEiID0gIi4tZCIgXSB8fCBbICIuJDEiID0gIi4tLWRlYnVnIiBdOyB0aGVuCisgICAgc2hpZnQKKyAgICBzZXQgLXgKK2ZpCituYW1lPWBlY2hvICIkMCIgfCBzZWQgLWUgJ3M7LiovXChbXi9dKlwpJDtcMTsnIC1lICdzOy1zaCQ7OycgLWUgJ3M7XC5zaCQ7OydgCitjYXNlICIkbmFtZSIgaW4KKyAgICBlY2hvfG1kYXRlfHRhYmxlfHByb3B8bW92ZXxpbnN0YWxsfG1rZGlyfG1rbG58bWtzaGFkb3d8Zml4cGVybXxyb3RhdGV8dGFyYmFsbHxzdWJzdHxwbGF0Zm9ybXxhcnh8c2xvfHNjcHB8dmVyc2lvbnxwYXRoICkKKyAgICAgICAgIyAgIGltcGxpY2l0IHRvb2wgY29tbWFuZCBzZWxlY3Rpb24KKyAgICAgICAgdG9vbD0iJG5hbWUiCisgICAgICAgIDs7CisgICAgKiApCisgICAgICAgICMgICBleHBsaWNpdCB0b29sIGNvbW1hbmQgc2VsZWN0aW9uCisgICAgICAgIHRvb2w9IiQxIgorICAgICAgICBzaGlmdAorICAgICAgICA7OworZXNhYworYXJnX3NwZWM9IiIKK29wdF9zcGVjPSIiCitnZW5fdG1wZmlsZT1ubworCisjIworIyMgIERJU1BBVENIIElOVE8gU0NSSVBUIFBST0xPRworIyMKKworY2FzZSAkdG9vbCBpbgorICAgIGVjaG8gKQorICAgICAgICBzdHJfdG9vbD0iZWNobyIKKyAgICAgICAgc3RyX3VzYWdlPSJbLW58LS1uZXdsaW5lXSBbLWV8LS1leHBhbmRdIFs8c3RyaW5nPiAuLi5dIgorICAgICAgICBhcmdfc3BlYz0iMCsiCisgICAgICAgIG9wdF9zcGVjPSJuLmUuIgorICAgICAgICBvcHRfYWxpYXM9Im46bmV3bGluZSxlOmV4cGFuZCIKKyAgICAgICAgb3B0X249bm8KKyAgICAgICAgb3B0X2U9bm8KKyAgICAgICAgOzsKKyAgICBtZGF0ZSApCisgICAgICAgIHN0cl90b29sPSJtZGF0ZSIKKyAgICAgICAgc3RyX3VzYWdlPSJbLW58LS1uZXdsaW5lXSBbLXp8LS16ZXJvXSBbLXN8LS1zaG9ydGVuXSBbLWR8LS1kaWdpdHNdIFstZnwtLWZpZWxkLXNlcCA8c3RyPl0gWy1vfC0tb3JkZXIgPHNwZWM+XSA8cGF0aD4iCisgICAgICAgIGFyZ19zcGVjPSIxPSIKKyAgICAgICAgb3B0X3NwZWM9Im4uei5zLmQuZjpvOiIKKyAgICAgICAgb3B0X2FsaWFzPSJuOm5ld2xpbmUsejp6ZXJvLHM6c2hvcnRlbixkOmRpZ2l0cyxmOmZpZWxkLXNlcCxvOm9yZGVyIgorICAgICAgICBvcHRfbj1ubworICAgICAgICBvcHRfej1ubworICAgICAgICBvcHRfcz1ubworICAgICAgICBvcHRfZD1ubworICAgICAgICBvcHRfZj0iICIKKyAgICAgICAgb3B0X289ImRteSIKKyAgICAgICAgOzsKKyAgICB0YWJsZSApCisgICAgICAgIHN0cl90b29sPSJ0YWJsZSIKKyAgICAgICAgc3RyX3VzYWdlPSJbLUZ8LS1maWVsZC1zZXAgPHNlcD5dIFstd3wtLXdpZHRoIDx3aWR0aD5dIFstY3wtLWNvbHVtbnMgPGNvbHM+XSBbLXN8LS1zdHJpcCA8c3RyaXA+XSA8c3RyPjxzZXA+PHN0cj4uLi4iCisgICAgICAgIGFyZ19zcGVjPSIxKyIKKyAgICAgICAgb3B0X3NwZWM9IkY6dzpjOnM6IgorICAgICAgICBvcHRfYWxpYXM9IkY6ZmllbGQtc2VwLHc6d2lkdGgsYzpjb2x1bW5zLHM6c3RyaXAiCisgICAgICAgIG9wdF9GPSI6IgorICAgICAgICBvcHRfdz0xNQorICAgICAgICBvcHRfYz0zCisgICAgICAgIG9wdF9zPTc5CisgICAgICAgIDs7CisgICAgcHJvcCApCisgICAgICAgIHN0cl90b29sPSJwcm9wIgorICAgICAgICBzdHJfdXNhZ2U9IlstcHwtLXByZWZpeCA8c3RyPl0iCisgICAgICAgIGFyZ19zcGVjPSIwPSIKKyAgICAgICAgb3B0X3NwZWM9InA6IgorICAgICAgICBvcHRfYWxpYXM9InA6cHJlZml4IgorICAgICAgICBvcHRfcD0iIgorICAgICAgICA7OworICAgIG1vdmUgKQorICAgICAgICBzdHJfdG9vbD0ibW92ZSIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1lfC0tZXhwYW5kXSBbLXB8LS1wcmVzZXJ2ZV0gPHNyYy1maWxlPiA8ZHN0LWZpbGU+IgorICAgICAgICBhcmdfc3BlYz0iMj0iCisgICAgICAgIG9wdF9zcGVjPSJ2LnQuZS5wLiIKKyAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxlOmV4cGFuZCxwOnByZXNlcnZlIgorICAgICAgICBvcHRfdj1ubworICAgICAgICBvcHRfdD1ubworICAgICAgICBvcHRfZT1ubworICAgICAgICBvcHRfcD1ubworICAgICAgICA7OworICAgIGluc3RhbGwgKQorICAgICAgICBzdHJfdG9vbD0iaW5zdGFsbCIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1kfC0tbWtkaXJdIFstY3wtLWNvcHldIFstQ3wtLWNvbXBhcmUtY29weV0gWy1zfC0tc3RyaXBdIFstbXwtLW1vZGUgPG1vZGU+XSBbLW98LS1vd25lciA8b3duZXI+XSBbLWd8LS1ncm91cCA8Z3JvdXA+XSBbLWV8LS1leGVjIDxzZWQtY21kPl0gPGZpbGU+IFs8ZmlsZT4gLi4uXSA8cGF0aD4iCisgICAgICAgIGFyZ19zcGVjPSIxKyIKKyAgICAgICAgb3B0X3NwZWM9InYudC5kLmMuQy5zLm06bzpnOmUrIgorICAgICAgICBvcHRfYWxpYXM9InY6dmVyYm9zZSx0OnRyYWNlLGQ6bWtkaXIsYzpjb3B5LEM6Y29tcGFyZS1jb3B5LHM6c3RyaXAsbTptb2RlLG86b3duZXIsZzpncm91cCxlOmV4ZWMiCisgICAgICAgIG9wdF92PW5vCisgICAgICAgIG9wdF90PW5vCisgICAgICAgIG9wdF9kPW5vCisgICAgICAgIG9wdF9jPW5vCisgICAgICAgIG9wdF9DPW5vCisgICAgICAgIG9wdF9zPW5vCisgICAgICAgIG9wdF9tPSIwNzU1IgorICAgICAgICBvcHRfbz0iIgorICAgICAgICBvcHRfZz0iIgorICAgICAgICBvcHRfZT0iIgorICAgICAgICA7OworICAgIG1rZGlyICkKKyAgICAgICAgc3RyX3Rvb2w9Im1rZGlyIgorICAgICAgICBzdHJfdXNhZ2U9IlstdHwtLXRyYWNlXSBbLWZ8LS1mb3JjZV0gWy1wfC0tcGFyZW50c10gWy1tfC0tbW9kZSA8bW9kZT5dIFstb3wtLW93bmVyIDxvd25lcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIDxkaXI+IFs8ZGlyPiAuLi5dIgorICAgICAgICBhcmdfc3BlYz0iMSsiCisgICAgICAgIG9wdF9zcGVjPSJ0LmYucC5tOm86ZzoiCisgICAgICAgIG9wdF9hbGlhcz0idDp0cmFjZSxmOmZvcmNlLHA6cGFyZW50cyxtOm1vZGUsbzpvd25lcixnOmdyb3VwIgorICAgICAgICBvcHRfdD1ubworICAgICAgICBvcHRfZj1ubworICAgICAgICBvcHRfcD1ubworICAgICAgICBvcHRfbT0iIgorICAgICAgICBvcHRfbz0iIgorICAgICAgICBvcHRfZz0iIgorICAgICAgICA7OworICAgIG1rbG4gKQorICAgICAgICBzdHJfdG9vbD0ibWtsbiIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXR8LS10cmFjZV0gWy1mfC0tZm9yY2VdIFstc3wtLXN5bWJvbGljXSA8c3JjLXBhdGg+IFs8c3JjLXBhdGg+IC4uLl0gPGRzdC1wYXRoPiIKKyAgICAgICAgYXJnX3NwZWM9IjIrIgorICAgICAgICBvcHRfc3BlYz0idC5mLnMuIgorICAgICAgICBvcHRfYWxpYXM9InQ6dHJhY2UsZjpmb3JjZSxzOnN5bWJvbGljIgorICAgICAgICBvcHRfdD1ubworICAgICAgICBvcHRfZj1ubworICAgICAgICBvcHRfcz1ubworICAgICAgICA7OworICAgIG1rc2hhZG93ICkKKyAgICAgICAgc3RyX3Rvb2w9Im1rc2hhZG93IgorICAgICAgICBzdHJfdXNhZ2U9IlstdnwtLXZlcmJvc2VdIFstdHwtLXRyYWNlXSBbLWF8LS1hbGxdIDxzcmMtZGlyPiA8ZHN0LWRpcj4iCisgICAgICAgIGFyZ19zcGVjPSIyPSIKKyAgICAgICAgb3B0X3NwZWM9InYudC5hLiIKKyAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxhOmFsbCIKKyAgICAgICAgb3B0X3Y9bm8KKyAgICAgICAgb3B0X3Q9bm8KKyAgICAgICAgb3B0X2E9bm8KKyAgICAgICAgOzsKKyAgICBmaXhwZXJtICkKKyAgICAgICAgc3RyX3Rvb2w9ImZpeHBlcm0iCisgICAgICAgIHN0cl91c2FnZT0iWy12fC0tdmVyYm9zZV0gWy10fC0tdHJhY2VdIDxwYXRoPiBbPHBhdGg+IC4uLl0iCisgICAgICAgIGFyZ19zcGVjPSIxKyIKKyAgICAgICAgb3B0X3NwZWM9InYudC4iCisgICAgICAgIG9wdF9hbGlhcz0idjp2ZXJib3NlLHQ6dHJhY2UiCisgICAgICAgIG9wdF92PW5vCisgICAgICAgIG9wdF90PW5vCisgICAgICAgIDs7CisgICAgcm90YXRlICkKKyAgICAgICAgc3RyX3Rvb2w9InJvdGF0ZSIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1mfC0tZm9yY2VdIFstbnwtLW51bS1maWxlcyA8Y291bnQ+XSBbLXN8LS1zaXplIDxzaXplPl0gWy1jfC0tY29weV0gWy1yfC0tcmVtb3ZlXSBbLWF8LS1hcmNoaXZlLWRpciA8ZGlyPl0gWy16fC0tY29tcHJlc3MgWzx0b29sPjpdPGxldmVsPl0gWy1ifC0tYmFja2dyb3VuZF0gWy1kfC0tZGVsYXldIFstcHwtLXBhZCA8bGVuPl0gWy1tfC0tbW9kZSA8bW9kZT5dIFstb3wtLW93bmVyIDxvd25lcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstTXwtLW1pZ3JhdGUgPGNtZD5dIFstUHwtLXByb2xvZyA8Y21kPl0gWy1FfC0tZXBpbG9nIDxjbWQ+XSA8ZmlsZT4gWy4uLl0iCisgICAgICAgIGFyZ19zcGVjPSIxKyIKKyAgICAgICAgb3B0X3NwZWM9InYudC5mLm46czpjLnIuYTp6OmIuZC5wOm86ZzptOk06UDpFOiIKKyAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UsdDp0cmFjZSxmOmZvcmNlLG46bnVtLWZpbGVzLHM6c2l6ZSxjOmNvcHkscjpyZW1vdmUsYTphcmNoaXZlLWRpcix6OmNvbXByZXNzLGI6YmFja2dyb3VuZCxkOmRlbGF5LHA6cGFkLG86b3duZXIsZzpncm91cCxtOm1vZGUsTTptaWdyYXRlLFA6cHJvbG9nLEU6ZXBpbG9nIgorICAgICAgICBvcHRfdj1ubworICAgICAgICBvcHRfdD1ubworICAgICAgICBvcHRfZj1ubworICAgICAgICBvcHRfbj0xMAorICAgICAgICBvcHRfcz0iIgorICAgICAgICBvcHRfYz1ubworICAgICAgICBvcHRfcj1ubworICAgICAgICBvcHRfYT0iIgorICAgICAgICBvcHRfej0iIgorICAgICAgICBvcHRfYj1ubworICAgICAgICBvcHRfZD1ubworICAgICAgICBvcHRfcD0xCisgICAgICAgIG9wdF9vPSIiCisgICAgICAgIG9wdF9nPSIiCisgICAgICAgIG9wdF9tPSIiCisgICAgICAgIG9wdF9NPSIiCisgICAgICAgIG9wdF9QPSIiCisgICAgICAgIG9wdF9FPSIiCisgICAgICAgIDs7CisgICAgdGFyYmFsbCApCisgICAgICAgIHN0cl90b29sPSJ0YXJiYWxsIgorICAgICAgICBzdHJfdXNhZ2U9IlstdHwtLXRyYWNlXSBbLXZ8LS12ZXJib3NlXSBbLW98LS1vdXRwdXQgPHRhcmJhbGw+XSBbLWN8LS1jb21wcmVzcyA8cHJvZz5dIFstZHwtLWRpcmVjdG9yeSA8ZGlyPl0gWy11fC0tdXNlciA8dXNlcj5dIFstZ3wtLWdyb3VwIDxncm91cD5dIFstZXwtLWV4Y2x1ZGUgPHBhdHRlcm4+XSA8cGF0aD4gWzxwYXRoPiAuLi5dIgorICAgICAgICBnZW5fdG1wZmlsZT15ZXMKKyAgICAgICAgYXJnX3NwZWM9IjErIgorICAgICAgICBvcHRfc3BlYz0idC52Lm86YzpkOnU6ZzplOiIKKyAgICAgICAgb3B0X2FsaWFzPSJ0OnRyYWNlLHY6dmVyYm9zZSxvOm91dHB1dCxjOmNvbXByZXNzLGQ6ZGlyZWN0b3J5LHU6dXNlcixnOmdyb3VwLGU6ZXhjbHVkZSIKKyAgICAgICAgb3B0X3Q9bm8KKyAgICAgICAgb3B0X3Y9bm8KKyAgICAgICAgb3B0X289IiIKKyAgICAgICAgb3B0X2M9IiIKKyAgICAgICAgb3B0X2Q9IiIKKyAgICAgICAgb3B0X3U9IiIKKyAgICAgICAgb3B0X2c9IiIKKyAgICAgICAgb3B0X2U9IkNWUyxcXC5jdnNpZ25vcmUsXFwuc3ZuLFxcLltvYV1cJCIKKyAgICAgICAgOzsKKyAgICBzdWJzdCApCisgICAgICAgIHN0cl90b29sPSJzdWJzdCIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXR8LS10cmFjZV0gWy1ufC0tbm9wXSBbLXd8LS13YXJuaW5nXSBbLXF8LS1xdWlldF0gWy1zfC0tc3RlYWx0aF0gWy1pfC0taW50ZXJhY3RpdmVdIFstYnwtLWJhY2t1cCA8ZXh0Pl0gWy1lfC0tZXhlYyA8Y21kPl0gWy1mfC0tZmlsZSA8Y21kLWZpbGU+XSBbPGZpbGU+XSBbLi4uXSIKKyAgICAgICAgZ2VuX3RtcGZpbGU9eWVzCisgICAgICAgIGFyZ19zcGVjPSIwKyIKKyAgICAgICAgb3B0X3NwZWM9InYudC5uLncucS5zLmkuYjplK2Y6IgorICAgICAgICBvcHRfYWxpYXM9InY6dmVyYm9zZSx0OnRyYWNlLG46bm9wLHc6d2FybmluZyxxOnF1aWV0LHM6c3RlYWx0aCxpOmludGVyYWN0aXZlLGI6YmFja3VwLGU6ZXhlYyxmOmZpbGUiCisgICAgICAgIG9wdF92PW5vCisgICAgICAgIG9wdF90PW5vCisgICAgICAgIG9wdF9uPW5vCisgICAgICAgIG9wdF93PW5vCisgICAgICAgIG9wdF9xPW5vCisgICAgICAgIG9wdF9zPW5vCisgICAgICAgIG9wdF9pPW5vCisgICAgICAgIG9wdF9iPSIiCisgICAgICAgIG9wdF9lPSIiCisgICAgICAgIG9wdF9mPSIiCisgICAgICAgIDs7CisgICAgcGxhdGZvcm0gKQorICAgICAgICBzdHJfdG9vbD0icGxhdGZvcm0iCisgICAgICAgIHN0cl91c2FnZT0iWy1GfC0tZm9ybWF0IDxmb3JtYXQ+XSBbLVN8LS1zZXAgPHN0cmluZz5dIFstQ3wtLWNvbmMgPHN0cmluZz5dIFstTHwtLWxvd2VyXSBbLVV8LS11cHBlcl0gWy12fC0tdmVyYm9zZV0gWy1jfC0tY29uY2lzZV0gWy1ufC0tbm8tbmV3bGluZV0gWy10fC0tdHlwZSA8dHlwZT5dIFstVnwtLXZlcnNpb25dIFstaHwtLWhlbHBdIgorICAgICAgICBhcmdfc3BlYz0iMD0iCisgICAgICAgIG9wdF9zcGVjPSJGOlM6QzpMLlUudi5jLm4udDpkLlYuaC4iCisgICAgICAgIG9wdF9hbGlhcz0iRjpmb3JtYXQsUzpzZXAsQzpjb25jLEw6bG93ZXIsVTp1cHBlcix2OnZlcmJvc2UsYzpjb25zaXNlLHQ6dHlwZSxuOm5vLW5ld2xpbmUsVjp2ZXJzaW9uLGg6aGVscCIKKyAgICAgICAgb3B0X0Y9IiV7c3B9ICgle2FwfSkiCisgICAgICAgIG9wdF9TPSIgIgorICAgICAgICBvcHRfQz0iLyIKKyAgICAgICAgb3B0X0w9bm8KKyAgICAgICAgb3B0X1U9bm8KKyAgICAgICAgb3B0X3Q9IiIKKyAgICAgICAgb3B0X3Y9bm8KKyAgICAgICAgb3B0X2M9bm8KKyAgICAgICAgb3B0X249bm8KKyAgICAgICAgb3B0X1Y9bm8KKyAgICAgICAgb3B0X2g9bm8KKyAgICAgICAgOzsKKyAgICBhcnggKQorICAgICAgICBzdHJfdG9vbD0iYXJ4IgorICAgICAgICBzdHJfdXNhZ2U9IlstdHwtLXRyYWNlXSBbLUN8LS1jb21tYW5kIDxjbWQ+XSA8b3A+IDxhcmNoaXZlPiBbPGZpbGU+IC4uLl0iCisgICAgICAgIGFyZ19zcGVjPSIyKyIKKyAgICAgICAgb3B0X3NwZWM9InQuQzoiCisgICAgICAgIG9wdF9hbGlhcz0idDp0cmFjZSxDOmNvbW1hbmQiCisgICAgICAgIG9wdF90PW5vCisgICAgICAgIG9wdF9DPSJhciIKKyAgICAgICAgOzsKKyAgICBzbG8gKQorICAgICAgICBzdHJfdG9vbD0ic2xvIgorICAgICAgICBzdHJfdXNhZ2U9IlstcHwtLXByZWZpeCA8c3RyPl0gLS0gLUw8ZGlyPiAtbDxsaWI+IFstTDxkaXI+IC1sPGxpYj4gLi4uXSIKKyAgICAgICAgYXJnX3NwZWM9IjErIgorICAgICAgICBvcHRfc3BlYz0icDoiCisgICAgICAgIG9wdF9hbGlhcz0icDpwcmVmaXgiCisgICAgICAgIG9wdF9wPSJTTE9fIgorICAgICAgICA7OworICAgIHNjcHAgKQorICAgICAgICBzdHJfdG9vbD0ic2NwcCIKKyAgICAgICAgc3RyX3VzYWdlPSJbLXZ8LS12ZXJib3NlXSBbLXB8LS1wcmVzZXJ2ZV0gWy1mfC0tZmlsdGVyIDxmaWx0ZXI+XSBbLW98LS1vdXRwdXQgPG9maWxlPl0gWy10fC0tdGVtcGxhdGUgPHRmaWxlPl0gWy1NfC0tbWFyayA8bWFyaz5dIFstRHwtLWRlZmluZSA8ZG5hbWU+XSBbLUN8LS1jbGFzcyA8Y25hbWU+XSA8ZmlsZT4gWzxmaWxlPiAuLi5dIgorICAgICAgICBnZW5fdG1wZmlsZT15ZXMKKyAgICAgICAgYXJnX3NwZWM9IjErIgorICAgICAgICBvcHRfc3BlYz0idi5wLmYrbzp0Ok06RDpDOiIKKyAgICAgICAgb3B0X2FsaWFzPSJ2OnZlcmJvc2UscDpwcmVzZXJ2ZSxmOmZpbHRlcixvOm91dHB1dCx0OnRlbXBsYXRlLE06bWFyayxEOmRlZmluZSxDOmNsYXNzIgorICAgICAgICBvcHRfdj1ubworICAgICAgICBvcHRfcD1ubworICAgICAgICBvcHRfZj0iIgorICAgICAgICBvcHRfbz0ibGliLmgiCisgICAgICAgIG9wdF90PSJsaWIuaC5pbiIKKyAgICAgICAgb3B0X009IiUlTUFSSyUlIgorICAgICAgICBvcHRfRD0iY3BwIgorICAgICAgICBvcHRfQz0iaW50ZXJuIgorICAgICAgICA7OworICAgIHZlcnNpb24gKQorICAgICAgICBzdHJfdG9vbD0idmVyc2lvbiIKKyAgICAgICAgc3RyX3VzYWdlPSJbLWx8LS1sYW5ndWFnZSA8bGFuZz5dIFstbnwtLW5hbWUgPG5hbWU+XSBbLXB8LS1wcmVmaXggPHByZWZpeD5dIFstc3wtLXNldCA8dmVyc2lvbj5dIFstZXwtLWVkaXRdIFstaXwtLWluY3JlYXNlIDxrbm9iPl0gWy1kfC0tZGlzcGxheSA8dHlwZT5dIDxmaWxlPiIKKyAgICAgICAgYXJnX3NwZWM9IjE9IgorICAgICAgICBvcHRfc3BlYz0ibDpuOnA6czppOmUuZDoiCisgICAgICAgIG9wdF9hbGlhcz0ibDpsYW5ndWFnZSxuOm5hbWUscDpwcmVmaXgsczpzZXQsZTplZGl0LGk6aW5jcmVhc2UsZDpkaXNwbGF5IgorICAgICAgICBvcHRfbD0idHh0IgorICAgICAgICBvcHRfbj0idW5rbm93biIKKyAgICAgICAgb3B0X3A9IiIKKyAgICAgICAgb3B0X3M9IiIKKyAgICAgICAgb3B0X2U9Im5vIgorICAgICAgICBvcHRfaT0iIgorICAgICAgICBvcHRfZD0ic2hvcnQiCisgICAgICAgIDs7CisgICAgcGF0aCApCisgICAgICAgIHN0cl90b29sPSJwYXRoIgorICAgICAgICBzdHJfdXNhZ2U9Ilstc3wtLXN1cHByZXNzXSBbLXJ8LS1yZXZlcnNlXSBbLWR8LS1kaXJuYW1lXSBbLWJ8LS1iYXNlbmFtZV0gWy1tfC0tbWFnaWNdIFstcHwtLXBhdGggPHBhdGg+XSA8c3RyPiBbPHN0cj4gLi4uXSIKKyAgICAgICAgZ2VuX3RtcGZpbGU9eWVzCisgICAgICAgIGFyZ19zcGVjPSIxKyIKKyAgICAgICAgb3B0X3NwZWM9InMuci5kLmIubS5wOiIKKyAgICAgICAgb3B0X2FsaWFzPSJzOnN1cHByZXNzLHI6cmV2ZXJzZSxkOmRpcm5hbWUsYjpiYXNlbmFtZSxtOm1hZ2ljLHA6cGF0aCIKKyAgICAgICAgb3B0X3M9bm8KKyAgICAgICAgb3B0X3I9bm8KKyAgICAgICAgb3B0X2Q9bm8KKyAgICAgICAgb3B0X2I9bm8KKyAgICAgICAgb3B0X209bm8KKyAgICAgICAgb3B0X3A9IiRQQVRIIgorICAgICAgICA7OworICAgIC0qICkKKyAgICAgICAgZWNobyAiJDA6RXJyb3I6IHVua25vd24gb3B0aW9uIFxgJHRvb2wnIiAyPiYxCisgICAgICAgIGVjaG8gIiQwOkhpbnQ6ICBydW4gXGAkMCAtaCcgZm9yIHVzYWdlIiAyPiYxCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworICAgICogKQorICAgICAgICBlY2hvICIkMDpFcnJvcjogdW5rbm93biBjb21tYW5kIFxgJHRvb2wnIiAyPiYxCisgICAgICAgIGVjaG8gIiQwOkhpbnQ6ICBydW4gXGAkMCAtaCcgZm9yIHVzYWdlIiAyPiYxCisgICAgICAgIGV4aXQgMQorICAgICAgICA7OworZXNhYworCisjIworIyMgIENPTU1PTiBVVElMSVRZIENPREUKKyMjCisKKyMgICBjb21tb25seSB1c2VkIEFTQ0lJIHZhbHVlcworQVNDX1RBQj0iCSIKK0FTQ19OTD0iCisiCisKKyMgICBkZXRlcm1pbmUgbmFtZSBvZiB0b29sCitpZiBbICIuJHRvb2wiICE9IC4gXTsgdGhlbgorICAgICMgICB1c2VkIGluc2lkZSBzaHRvb2wgc2NyaXB0CisgICAgdG9vbGNtZD0iJDAgJHRvb2wiCisgICAgdG9vbGNtZGhlbHA9InNodG9vbCAkdG9vbCIKKyAgICBtc2dwcmVmaXg9InNodG9vbDokdG9vbCIKK2Vsc2UKKyAgICAjICAgdXNlZCBhcyBzdGFuZGFsb25lIHNjcmlwdAorICAgIHRvb2xjbWQ9IiQwIgorICAgIHRvb2xjbWRoZWxwPSJzaCAkMCIKKyAgICBtc2dwcmVmaXg9IiRzdHJfdG9vbCIKK2ZpCisKKyMgICBwYXJzZSBhcmd1bWVudCBzcGVjaWZpY2F0aW9uIHN0cmluZworZXZhbCBgZWNobyAkYXJnX3NwZWMgfFwKKyAgICAgIHNlZCAtZSAncy9eXChbMC05XSpcKVwoWys9XVwpL2FyZ19OVU1TPVwxOyBhcmdfTU9ERT1cMi8nYAorCisjICAgcGFyc2Ugb3B0aW9uIHNwZWNpZmljYXRpb24gc3RyaW5nCitldmFsIGBlY2hvIGguJG9wdF9zcGVjIHxcCisgICAgICBzZWQgLWUgJ3MvXChbYS16QS1aMC05XVwpXChbLjorXVwpL29wdF9NT0RFX1wxPVwyOy9nJ2AKKworIyAgIHBhcnNlIG9wdGlvbiBhbGlhcyBzdHJpbmcKK2V2YWwgYGVjaG8gaDpoZWxwLCRvcHRfYWxpYXMgfFwKKyAgICAgIHNlZCAtZSAncy8tL18vZycgLWUgJ3MvXChbYS16QS1aMC05XVwpOlwoW14sXSpcKSwqL29wdF9BTElBU19cMj1cMTsvZydgCisKKyMgICBpbnRlcmF0ZSBvdmVyIGFyZ3VtZW50IGxpbmUKK29wdF9QUkVWPScnCit3aGlsZSBbICQjIC1ndCAwIF07IGRvCisgICAgIyAgIHNwZWNpYWwgb3B0aW9uIHN0b3BzIHByb2Nlc3NpbmcKKyAgICBpZiBbICIuJDEiID0gIi4tLSIgXTsgdGhlbgorICAgICAgICBzaGlmdAorICAgICAgICBicmVhaworICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIG9wdGlvbiBhbmQgYXJndW1lbnQKKyAgICBvcHRfQVJHX09LPW5vCisgICAgaWYgWyAiLiRvcHRfUFJFViIgIT0gLiBdOyB0aGVuCisgICAgICAgICMgICBtZXJnZSBwcmV2aW91cyBzZWVuIG9wdGlvbiB3aXRoIGFyZ3VtZW50CisgICAgICAgIG9wdF9PUFQ9IiRvcHRfUFJFViIKKyAgICAgICAgb3B0X0FSRz0iJDEiCisgICAgICAgIG9wdF9BUkdfT0s9eWVzCisgICAgICAgIG9wdF9QUkVWPScnCisgICAgZWxzZQorICAgICAgICAjICAgc3BsaXQgYXJndW1lbnQgaW50byBvcHRpb24gYW5kIGFyZ3VtZW50CisgICAgICAgIGNhc2UgIiQxIiBpbgorICAgICAgICAgICAgLS1bYS16QS1aMC05XSo9KikKKyAgICAgICAgICAgICAgICBldmFsIGBlY2hvICJ4JDEiIHxcCisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL154LS1cKFthLXpBLVowLTktXSpcKT1cKC4qXCkkL29wdF9PUFQ9IlwxIjtvcHRfQVJHPSJcMiIvJ2AKKyAgICAgICAgICAgICAgICBvcHRfU1RSPWBlY2hvICRvcHRfT1BUIHwgc2VkIC1lICdzLy0vXy9nJ2AKKyAgICAgICAgICAgICAgICBldmFsICJvcHRfT1BUPVwke29wdF9BTElBU18ke29wdF9TVFJ9LSR7b3B0X09QVH19IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtLVthLXpBLVowLTldKikKKyAgICAgICAgICAgICAgICBvcHRfT1BUPWBlY2hvICJ4JDEiIHwgY3V0IC1jNC1gCisgICAgICAgICAgICAgICAgb3B0X1NUUj1gZWNobyAkb3B0X09QVCB8IHNlZCAtZSAncy8tL18vZydgCisgICAgICAgICAgICAgICAgZXZhbCAib3B0X09QVD1cJHtvcHRfQUxJQVNfJHtvcHRfU1RSfS0ke29wdF9PUFR9fSIKKyAgICAgICAgICAgICAgICBvcHRfQVJHPScnCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIC1bYS16QS1aMC05XSopCisgICAgICAgICAgICAgICAgZXZhbCBgZWNobyAieCQxIiB8XAorICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eeC1cKFthLXpBLVowLTldXCkvb3B0X09QVD0iXDEiOy8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvIjtcKC4qXCkkLyI7IG9wdF9BUkc9IlwxIi8nYAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAtW2EtekEtWjAtOV0pCisgICAgICAgICAgICAgICAgb3B0X09QVD1gZWNobyAieCQxIiB8IGN1dCAtYzMtYAorICAgICAgICAgICAgICAgIG9wdF9BUkc9JycKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorCisgICAgIyAgIGVhdCB1cCBvcHRpb24KKyAgICBzaGlmdAorCisgICAgIyAgIGRldGVybWluZSB3aGV0aGVyIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudAorICAgIGV2YWwgIm9wdF9NT0RFPVwkb3B0X01PREVfJHtvcHRfT1BUfSIKKyAgICBpZiBbICIuJG9wdF9BUkciID0gLiBdICYmIFsgIi4kb3B0X0FSR19PSyIgIT0gLnllcyBdOyB0aGVuCisgICAgICAgIGlmIFsgIi4kb3B0X01PREUiID0gIi46IiBdIHx8IFsgIi4kb3B0X01PREUiID0gIi4rIiBdOyB0aGVuCisgICAgICAgICAgICBvcHRfUFJFVj0iJG9wdF9PUFQiCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgcHJvY2VzcyBvcHRpb24KKyAgICBjYXNlICRvcHRfTU9ERSBpbgorICAgICAgICAnLicgKQorICAgICAgICAgICAgIyAgIGJvb2xlYW4gb3B0aW9uCisgICAgICAgICAgICBldmFsICJvcHRfJHtvcHRfT1BUfT15ZXMiCisgICAgICAgICAgICA7OworICAgICAgICAnOicgKQorICAgICAgICAgICAgIyAgIG9wdGlvbiB3aXRoIGFyZ3VtZW50IChtdWx0aXBsZSBvY2N1cmFuY2VzIG92ZXJyaWRlKQorICAgICAgICAgICAgZXZhbCAib3B0XyR7b3B0X09QVH09XCJcJG9wdF9BUkdcIiIKKyAgICAgICAgICAgIDs7CisgICAgICAgICcrJyApCisgICAgICAgICAgICAjICAgb3B0aW9uIHdpdGggYXJndW1lbnQgKG11bHRpcGxlIG9jY3VyYW5jZXMgYXBwZW5kKQorICAgICAgICAgICAgZXZhbCAib3B0XyR7b3B0X09QVH09XCJcJG9wdF8ke29wdF9PUFR9XCR7QVNDX05MfVwkb3B0X0FSR1wiIgorICAgICAgICAgICAgOzsKKyAgICAgICAgKiApCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiB1bmtub3duIG9wdGlvbjogXGAkb3B0X09QVCciIDE+JjIKKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6SGludDogIHJ1biBcYCR0b29sY21kaGVscCAtaCcgb3IgXGBtYW4gc2h0b29sJyBmb3IgZGV0YWlscyIgMT4mMgorICAgICAgICAgICAgZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKK2RvbmUKK2lmIFsgIi4kb3B0X1BSRVYiICE9IC4gXTsgdGhlbgorICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gb3B0aW9uIFxgJG9wdF9QUkVWJyIgMT4mMgorICAgIGVjaG8gIiRtc2dwcmVmaXg6SGludDogIHJ1biBcYCR0b29sY21kaGVscCAtaCcgb3IgXGBtYW4gc2h0b29sJyBmb3IgZGV0YWlscyIgMT4mMgorICAgIGV4aXQgMQorZmkKKworIyAgIHByb2Nlc3MgaGVscCBvcHRpb24KK2lmIFsgIi4kb3B0X2giID0gLnllcyBdOyB0aGVuCisgICAgZWNobyAiVXNhZ2U6ICR0b29sY21kaGVscCAkc3RyX3VzYWdlIgorICAgIGV4aXQgMAorZmkKKworIyAgIGNvbXBsYWluIGFib3V0IGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCitjYXNlICRhcmdfTU9ERSBpbgorICAgICc9JyApCisgICAgICAgIGlmIFsgJCMgLW5lICRhcmdfTlVNUyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKGV4YWN0bHkgJGFyZ19OVU1TIGV4cGVjdGVkKSIgMT4mMgorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpIaW50OiAgcnVuIFxgJHRvb2xjbWQgLWgnIG9yIFxgbWFuIHNodG9vbCcgZm9yIGRldGFpbHMiIDE+JjIKKyAgICAgICAgICAgIGV4aXQgMQorICAgICAgICBmaQorICAgICAgICA7OworICAgICcrJyApCisgICAgICAgIGlmIFsgJCMgLWx0ICRhcmdfTlVNUyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgKGF0IGxlYXN0ICRhcmdfTlVNUyBleHBlY3RlZCkiIDE+JjIKKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6SGludDogIHJ1biBcYCR0b29sY21kIC1oJyBvciBcYG1hbiBzaHRvb2wnIGZvciBkZXRhaWxzIiAxPiYyCisgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgZmkKKyAgICAgICAgOzsKK2VzYWMKKworIyAgIGVzdGFibGlzaCBhIHRlbXBvcmFyeSBmaWxlIG9uIHJlcXVlc3QKK2lmIFsgIi4kZ2VuX3RtcGZpbGUiID0gLnllcyBdOyB0aGVuCisgICAgIyAgIGNyZWF0ZSAoZXhwbGljaXRseSkgc2VjdXJlIHRlbXBvcmFyeSBkaXJlY3RvcnkKKyAgICBpZiBbICIuJFRNUERJUiIgIT0gLiBdOyB0aGVuCisgICAgICAgIHRtcGRpcj0iJFRNUERJUiIKKyAgICBlbGlmIFsgIi4kVEVNUERJUiIgIT0gLiBdOyB0aGVuCisgICAgICAgIHRtcGRpcj0iJFRFTVBESVIiCisgICAgZWxzZQorICAgICAgICB0bXBkaXI9Ii90bXAiCisgICAgZmkKKyAgICB0bXBkaXI9IiR0bXBkaXIvLnNodG9vbC4kJCIKKyAgICAoIHVtYXNrIDA3NworICAgICAgcm0gLXJmICIkdG1wZGlyIiA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorICAgICAgbWtkaXIgICIkdG1wZGlyIiA+L2Rldi9udWxsIDI+JjEKKyAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGZhaWxlZCB0byBjcmVhdGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBcYCR0bXBkaXInIiAxPiYyCisgICAgICAgICAgZXhpdCAxCisgICAgICBmaQorICAgICkKKworICAgICMgICBjcmVhdGUgKGltcGxpY2l0bHkpIHNlY3VyZSB0ZW1wb3JhcnkgZmlsZQorICAgIHRtcGZpbGU9IiR0bXBkaXIvc2h0b29sLnRtcCIKKyAgICB0b3VjaCAiJHRtcGZpbGUiCitmaQorCisjICAgdXRpbGl0eSBmdW5jdGlvbjogbWFwIHN0cmluZyB0byBsb3dlciBjYXNlCit1dGlsX2xvd2VyICgpIHsKKyAgICBlY2hvICIkMSIgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK30KKworIyAgIHV0aWxpdHkgZnVuY3Rpb246IG1hcCBzdHJpbmcgdG8gdXBwZXIgY2FzZQordXRpbF91cHBlciAoKSB7CisgICAgZWNobyAiJDEiIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonCit9CisKKyMgICBjbGVhbnVwIHByb2NlZHVyZQorc2h0b29sX2V4aXQgKCkgeworICAgIHJjPSIkMSIKKyAgICBpZiBbICIuJGdlbl90bXBmaWxlIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBybSAtcmYgIiR0bXBkaXIiID4vZGV2L251bGwgMj4mMSB8fCB0cnVlCisgICAgZmkKKyAgICBleGl0ICRyYworfQorCisjIworIyMgIERJU1BBVENIIElOVE8gU0NSSVBUIEJPRFkKKyMjCisKK2Nhc2UgJHRvb2wgaW4KKworZWNobyApCisgICAgIyMKKyAgICAjIyAgZWNobyAtLSBQcmludCBzdHJpbmcgd2l0aCBvcHRpb25hbCBjb25zdHJ1Y3QgZXhwYW5zaW9uCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIHRleHQ9IiQqIgorCisgICAgIyAgIGNoZWNrIGZvciBicm9rZW4gZXNjYXBlIHNlcXVlbmNlIGV4cGFuc2lvbgorICAgIHNlbz0nJworICAgIGJ5dGVzPWBlY2hvICdcMScgfCB3YyAtYyB8IGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AKKyAgICBpZiBbICIuJGJ5dGVzIiAhPSAuMyBdOyB0aGVuCisgICAgICAgIGJ5dGVzPWBlY2hvIC1FICdcMScgfCB3YyAtYyB8IGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AKKyAgICAgICAgaWYgWyAiLiRieXRlcyIgPSAuMyBdOyB0aGVuCisgICAgICAgICAgICBzZW89Jy1FJworICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgY2hlY2sgZm9yIGV4aXN0aW5nIC1uIG9wdGlvbiAodG8gc3VwcHJlc3MgbmV3bGluZSkKKyAgICBtaW51c249JycKKyAgICBieXRlcz1gZWNobyAtbiAxMjMgMj4vZGV2L251bGwgfCB3YyAtYyB8IGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AKKyAgICBpZiBbICIuJGJ5dGVzIiA9IC4zIF07IHRoZW4KKyAgICAgICAgbWludXNuPSctbicKKyAgICBmaQorCisgICAgIyAgIGRldGVybWluZSB0ZXJtaW5hbCBib2xkIHNlcXVlbmNlCisgICAgdGVybV9ib2xkPScnCisgICAgdGVybV9ub3JtPScnCisgICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJVtCYl0nYCIgIT0gLiBdOyB0aGVuCisgICAgICAgIGNhc2UgJFRFUk0gaW4KKyAgICAgICAgICAgICMgICBmb3IgdGhlIG1vc3QgaW1wb3J0YW50IHRlcm1pbmFsIHR5cGVzIHdlIGRpcmVjdGx5IGtub3cgdGhlIHNlcXVlbmNlcworICAgICAgICAgICAgeHRlcm18eHRlcm0qfHZ0MjIwfHZ0MjIwKikKKyAgICAgICAgICAgICAgICB0ZXJtX2JvbGQ9YGF3ayAnQkVHSU4geyBwcmludGYoIiVjJWMlYyVjIiwgMjcsIDkxLCA0OSwgMTA5KTsgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICB0ZXJtX25vcm09YGF3ayAnQkVHSU4geyBwcmludGYoIiVjJWMlYyIsIDI3LCA5MSwgMTA5KTsgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgdnQxMDB8dnQxMDAqfGN5Z3dpbikKKyAgICAgICAgICAgICAgICB0ZXJtX2JvbGQ9YGF3ayAnQkVHSU4geyBwcmludGYoIiVjJWMlYyVjJWMlYyIsIDI3LCA5MSwgNDksIDEwOSwgMCwgMCk7IH0nIDwvZGV2L251bGwgMj4vZGV2L251bGxgCisgICAgICAgICAgICAgICAgdGVybV9ub3JtPWBhd2sgJ0JFR0lOIHsgcHJpbnRmKCIlYyVjJWMlYyVjIiwgMjcsIDkxLCAxMDksIDAsIDApOyB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAjICAgZm9yIGFsbCBvdGhlcnMsIHdlIHRyeSB0byB1c2UgYSBwb3NzaWJseSBleGlzdGluZyBgdHB1dCcgb3IgYHRjb3V0JyB1dGlsaXR5CisgICAgICAgICAgICAqICkKKyAgICAgICAgICAgICAgICBwYXRocz1gZWNobyAkUEFUSCB8IHNlZCAtZSAncy86LyAvZydgCisgICAgICAgICAgICAgICAgZm9yIHRvb2wgaW4gdHB1dCB0Y291dDsgZG8KKyAgICAgICAgICAgICAgICAgICAgZm9yIGRpciBpbiAkcGF0aHM7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbIC1yICIkZGlyLyR0b29sIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHNlcSBpbiBib2xkIG1kIHNtc287IGRvICMgJ3Ntc28nIGlzIGxhc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9sZD0iYCRkaXIvJHRvb2wgJHNlcSAyPi9kZXYvbnVsbGAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kYm9sZCIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXJtX2JvbGQ9IiRib2xkIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR0ZXJtX2JvbGQiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3Igc2VxIGluIHNncjAgbWUgcm1zbyBpbml0IHJlc2V0OyBkbyAjICdyZXNldCcgaXMgbGFzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9ybT0iYCRkaXIvJHRvb2wgJHNlcSAyPi9kZXYvbnVsbGAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG5vcm0iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlcm1fbm9ybT0iJG5vcm0iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdGVybV9ib2xkIiAhPSAuIF0gJiYgWyAiLiR0ZXJtX25vcm0iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgaWYgWyAiLiR0ZXJtX2JvbGQiID0gLiBdIHx8IFsgIi4kdGVybV9ub3JtIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiB1bmFibGUgdG8gZGV0ZXJtaW5lIHRlcm1pbmFsIHNlcXVlbmNlIGZvciBib2xkIG1vZGUiIDE+JjIKKyAgICAgICAgICAgIHRlcm1fYm9sZD0nJworICAgICAgICAgICAgdGVybV9ub3JtPScnCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICBkZXRlcm1pbmUgdXNlciBuYW1lCisgICAgdXNlcm5hbWU9JycKKyAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXSAmJiBbICIuYGVjaG8gJHRleHQgfCBncmVwICclW3VVZ0ddJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICB1c2VybmFtZT0iYChpZCAtdW4pIDI+L2Rldi9udWxsYCIKKyAgICAgICAgaWYgWyAiLiR1c2VybmFtZSIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHN0cj0iYChpZCkgMj4vZGV2L251bGxgIgorICAgICAgICAgICAgaWYgWyAiLmBlY2hvICRzdHIgfCBncmVwICdedWlkWyAJXSo9WyAJXSpbMC05XSooJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIHVzZXJuYW1lPWBlY2hvICRzdHIgfCBzZWQgLWUgJ3MvXnVpZFsgCV0qPVsgCV0qWzAtOV0qKC8vJyAtZSAncy8pLiokLy8nYAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgIi4kdXNlcm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgdXNlcm5hbWU9IiRMT0dOQU1FIgorICAgICAgICAgICAgICAgIGlmIFsgIi4kdXNlcm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPSIkVVNFUiIKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR1c2VybmFtZSIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPSJgKHdob2FtaSkgMj4vZGV2L251bGwgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYCIKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdXNlcm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcm5hbWU9ImAod2hvIGFtIGkpIDI+L2Rldi9udWxsIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhd2sgJ3sgcHJpbnRmKCIlcyIsICQxKTsgfSdgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdXNlcm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lPSd1bmtub3duJworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIHVzZXIgaWQKKyAgICB1c2VyaWQ9JycKKyAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXSAmJiBbICIuYGVjaG8gJHRleHQgfCBncmVwICclVSdgIiAhPSAuIF07IHRoZW4KKyAgICAgICAgdXNlcmlkPSJgKGlkIC11KSAyPi9kZXYvbnVsbGAiCisgICAgICAgIGlmIFsgIi4kdXNlcmlkIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgdXNlcmlkPSJgKGlkIC11ICR7dXNlcm5hbWV9KSAyPi9kZXYvbnVsbGAiCisgICAgICAgICAgICBpZiBbICIuJHVzZXJpZCIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBzdHI9ImAoaWQpIDI+L2Rldi9udWxsYCIKKyAgICAgICAgICAgICAgICBpZiBbICIuYGVjaG8gJHN0ciB8IGdyZXAgJ151aWRbIAldKj1bIAldKlswLTldKignYCIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHVzZXJpZD1gZWNobyAkc3RyIHwgc2VkIC1lICdzL151aWRbIAldKj1bIAldKi8vJyAtZSAncy8oLiokLy8nYAorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgWyAiLiR1c2VyaWQiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHVzZXJpZD1gKGdldGVudCBwYXNzd2QgJHt1c2VybmFtZX0pIDI+L2Rldi9udWxsIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9bXjpdKjpbXjpdKjovLycgLWUgJ3MvOi4qJC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR1c2VyaWQiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9YGdyZXAgIl4ke3VzZXJuYW1lfToiIC9ldGMvcGFzc3dkIDI+L2Rldi9udWxsIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvW146XSo6W146XSo6Ly8nIC1lICdzLzouKiQvLydgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJHVzZXJpZCIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9YCh5cGNhdCBwYXNzd2QpIDI+L2Rldi9udWxsIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXAgIl4ke3VzZXJuYW1lfToiIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL1teOl0qOlteOl0qOi8vJyAtZSAncy86LiokLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kdXNlcmlkIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyaWQ9Jz8nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICBkZXRlcm1pbmUgKHByaW1hcnkpIGdyb3VwIGlkCisgICAgZ3JvdXBpZD0nJworICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVbZ0ddJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICBncm91cGlkPSJgKGlkIC1nICR7dXNlcm5hbWV9KSAyPi9kZXYvbnVsbGAiCisgICAgICAgIGlmIFsgIi4kZ3JvdXBpZCIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHN0cj0iYChpZCkgMj4vZGV2L251bGxgIgorICAgICAgICAgICAgaWYgWyAiLmBlY2hvICRzdHIgfCBncmVwICdnaWRbIAldKj1bIAldKlswLTldKignYCIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgZ3JvdXBpZD1gZWNobyAkc3RyIHwgc2VkIC1lICdzL14uKmdpZFsgCV0qPVsgCV0qLy8nIC1lICdzLyguKiQvLydgCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIGdyb3VwaWQ9YChnZXRlbnQgcGFzc3dkICR7dXNlcm5hbWV9KSAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvW146XSo6W146XSo6W146XSo6Ly8nIC1lICdzLzouKiQvLydgCisgICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBncm91cGlkPWBncmVwICJeJHt1c2VybmFtZX06IiAvZXRjL3Bhc3N3ZCAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL1teOl0qOlteOl0qOlteOl0qOi8vJyAtZSAncy86LiokLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJGdyb3VwaWQiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBncm91cGlkPWAoeXBjYXQgcGFzc3dkKSAyPi9kZXYvbnVsbCB8IGdyZXAgIl4ke3VzZXJuYW1lfToiIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL1teOl0qOlteOl0qOlteOl0qOi8vJyAtZSAncy86LiokLy8nYAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cGlkIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwaWQ9Jz8nCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIChwcmltYXJ5KSBncm91cCBuYW1lCisgICAgZ3JvdXBuYW1lPScnCisgICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJWcnYCIgIT0gLiBdOyB0aGVuCisgICAgICAgIGdyb3VwbmFtZT0iYChpZCAtZ24gJHt1c2VybmFtZX0pIDI+L2Rldi9udWxsYCIKKyAgICAgICAgaWYgWyAiLiRncm91cG5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICBzdHI9ImAoaWQpIDI+L2Rldi9udWxsYCIKKyAgICAgICAgICAgIGlmIFsgIi5gZWNobyAkc3RyIHwgZ3JlcCAnZ2lkWyAJXSo9WyAJXSpbMC05XSooJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIGdyb3VwbmFtZT1gZWNobyAkc3RyIHwgc2VkIC1lICdzL14uKmdpZFsgCV0qPVsgCV0qWzAtOV0qKC8vJyAtZSAncy8pLiokLy8nYAorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgIi4kZ3JvdXBuYW1lIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIGdyb3VwbmFtZT1gKGdldGVudCBncm91cCkgMj4vZGV2L251bGwgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmVwICJeW146XSo6W146XSo6JHtncm91cGlkfToiIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzLzouKiQvLydgCisgICAgICAgICAgICAgICAgaWYgWyAiLiRncm91cG5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGdyb3VwbmFtZT1gZ3JlcCAiXlteOl0qOlteOl0qOiR7Z3JvdXBpZH06IiAvZXRjL2dyb3VwIDI+L2Rldi9udWxsIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy86LiokLy8nYAorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJGdyb3VwbmFtZSIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGdyb3VwbmFtZT1gKHlwY2F0IGdyb3VwKSAyPi9kZXYvbnVsbCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcCAiXlteOl0qOlteOl0qOiR7Z3JvdXBpZH06IiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzLzouKiQvLydgCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJGdyb3VwbmFtZSIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBncm91cG5hbWU9Jz8nCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIGhvc3QgYW5kIGRvbWFpbiBuYW1lCisgICAgaG9zdG5hbWU9JycKKyAgICBkb21haW5uYW1lPScnCisgICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF0gJiYgWyAiLmBlY2hvICR0ZXh0IHwgZ3JlcCAnJWgnYCIgIT0gLiBdOyB0aGVuCisgICAgICAgIGhvc3RuYW1lPSJgKHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8XAorICAgICAgICAgICAgICAgICAgIGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AiCisgICAgICAgIGlmIFsgIi4kaG9zdG5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICBob3N0bmFtZT0iYChob3N0bmFtZSkgMj4vZGV2L251bGwgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYCIKKyAgICAgICAgICAgIGlmIFsgIi4kaG9zdG5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaG9zdG5hbWU9J3Vua25vd24nCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0bmFtZSBpbgorICAgICAgICAgICAgKi4qICkKKyAgICAgICAgICAgICAgICBkb21haW5uYW1lPSIuYGVjaG8gJGhvc3RuYW1lIHwgY3V0IC1kLiAtZjItYCIKKyAgICAgICAgICAgICAgICBob3N0bmFtZT0iYGVjaG8gJGhvc3RuYW1lIHwgY3V0IC1kLiAtZjFgIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdICYmIFsgIi5gZWNobyAkdGV4dCB8IGdyZXAgJyVkJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICBpZiBbICIuJGRvbWFpbm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbIC1mIC9ldGMvcmVzb2x2LmNvbmYgXTsgdGhlbgorICAgICAgICAgICAgICAgIGRvbWFpbm5hbWU9ImBncmVwICdeWyAJXSpkb21haW4nIC9ldGMvcmVzb2x2LmNvbmYgfCBzZWQgLWUgJ3EnIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy8uKmRvbWFpbi8vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eWyAJXSovLycgLWUgJ3MvXiAqLy8nIC1lICdzL14JKi8vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eXC4vLycgLWUgJ3MvXi8uLycgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXdrICd7IHByaW50ZigiJXMiLCAkMSk7IH0nYCIKKyAgICAgICAgICAgICAgICBpZiBbICIuJGRvbWFpbm5hbWUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGRvbWFpbm5hbWU9ImBncmVwICdeWyAJXSpzZWFyY2gnIC9ldGMvcmVzb2x2LmNvbmYgfCBzZWQgLWUgJ3EnIHxcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvLipzZWFyY2gvLycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL15bIAldKi8vJyAtZSAncy9eICovLycgLWUgJ3MvXgkqLy8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy8gLiovLycgLWUgJ3MvCS4qLy8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eXC4vLycgLWUgJ3MvXi8uLycgfFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF3ayAneyBwcmludGYoIiVzIiwgJDEpOyB9J2AiCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICBkZXRlcm1pbmUgY3VycmVudCB0aW1lCisgICAgdGltZV9kYXk9JycKKyAgICB0aW1lX21vbnRoPScnCisgICAgdGltZV95ZWFyPScnCisgICAgdGltZV9tb250aG5hbWU9JycKKyAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXSAmJiBbICIuYGVjaG8gJHRleHQgfCBncmVwICclW0RNWW1dJ2AiICE9IC4gXTsgdGhlbgorICAgICAgICB0aW1lX2RheT1gZGF0ZSAnKyVkJ2AKKyAgICAgICAgdGltZV9tb250aD1gZGF0ZSAnKyVtJ2AKKyAgICAgICAgdGltZV95ZWFyPWBkYXRlICcrJVknIDI+L2Rldi9udWxsYAorICAgICAgICBpZiBbICIuJHRpbWVfeWVhciIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHRpbWVfeWVhcj1gZGF0ZSAnKyV5J2AKKyAgICAgICAgICAgIGNhc2UgJHRpbWVfeWVhciBpbgorICAgICAgICAgICAgICAgIFs1LTldWzAtOV0pIHRpbWVfeWVhcj0iMTkkdGltZV95ZWFyIiA7OworICAgICAgICAgICAgICAgIFswLTRdWzAtOV0pIHRpbWVfeWVhcj0iMjAkdGltZV95ZWFyIiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICR0aW1lX21vbnRoIGluCisgICAgICAgICAgICAxfDAxKSB0aW1lX21vbnRobmFtZT0nSmFuJyA7OworICAgICAgICAgICAgMnwwMikgdGltZV9tb250aG5hbWU9J0ZlYicgOzsKKyAgICAgICAgICAgIDN8MDMpIHRpbWVfbW9udGhuYW1lPSdNYXInIDs7CisgICAgICAgICAgICA0fDA0KSB0aW1lX21vbnRobmFtZT0nQXByJyA7OworICAgICAgICAgICAgNXwwNSkgdGltZV9tb250aG5hbWU9J01heScgOzsKKyAgICAgICAgICAgIDZ8MDYpIHRpbWVfbW9udGhuYW1lPSdKdW4nIDs7CisgICAgICAgICAgICA3fDA3KSB0aW1lX21vbnRobmFtZT0nSnVsJyA7OworICAgICAgICAgICAgOHwwOCkgdGltZV9tb250aG5hbWU9J0F1ZycgOzsKKyAgICAgICAgICAgIDl8MDkpIHRpbWVfbW9udGhuYW1lPSdTZXAnIDs7CisgICAgICAgICAgICAgIDEwKSB0aW1lX21vbnRobmFtZT0nT2N0JyA7OworICAgICAgICAgICAgICAxMSkgdGltZV9tb250aG5hbWU9J05vdicgOzsKKyAgICAgICAgICAgICAgMTIpIHRpbWVfbW9udGhuYW1lPSdEZWMnIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorCisgICAgIyAgIGV4cGFuZCBzcGVjaWFsIGBgJXgnJyBjb25zdHJ1Y3RzCisgICAgaWYgWyAiLiRvcHRfZSIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgdGV4dD1gZWNobyAkc2VvICIkdGV4dCIgfFwKKyAgICAgICAgICAgICAgc2VkIC1lICJzLyVCLyR7dGVybV9ib2xkfS9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy8lYi8ke3Rlcm1fbm9ybX0vZyIgXAorICAgICAgICAgICAgICAgICAgLWUgInMvJXUvJHt1c2VybmFtZX0vZyIgXAorICAgICAgICAgICAgICAgICAgLWUgInMvJVUvJHt1c2VyaWR9L2ciIFwKKyAgICAgICAgICAgICAgICAgIC1lICJzLyVnLyR7Z3JvdXBuYW1lfS9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy8lRy8ke2dyb3VwaWR9L2ciIFwKKyAgICAgICAgICAgICAgICAgIC1lICJzLyVoLyR7aG9zdG5hbWV9L2ciIFwKKyAgICAgICAgICAgICAgICAgIC1lICJzLyVkLyR7ZG9tYWlubmFtZX0vZyIgXAorICAgICAgICAgICAgICAgICAgLWUgInMvJUQvJHt0aW1lX2RheX0vZyIgXAorICAgICAgICAgICAgICAgICAgLWUgInMvJU0vJHt0aW1lX21vbnRofS9nIiBcCisgICAgICAgICAgICAgICAgICAtZSAicy8lWS8ke3RpbWVfeWVhcn0vZyIgXAorICAgICAgICAgICAgICAgICAgLWUgInMvJW0vJHt0aW1lX21vbnRobmFtZX0vZyIgMj4vZGV2L251bGxgCisgICAgZmkKKworICAgICMgICBjcmVhdGUgb3V0cHV0CisgICAgaWYgWyAuJG9wdF9uID0gLm5vIF07IHRoZW4KKyAgICAgICAgZWNobyAkc2VvICIkdGV4dCIKKyAgICBlbHNlCisgICAgICAgICMgICB0aGUgaGFyZGVyIHBhcnQ6IGVjaG8gLW4gaXMgYmVzdCwgYmVjYXVzZQorICAgICAgICAjICAgYXdrIG1heSBjb21wbGFpbiBhYm91dCBzb21lIFx4eCBzZXF1ZW5jZXMuCisgICAgICAgIGlmIFsgIi4kbWludXNuIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gJHNlbyAkbWludXNuICIkdGV4dCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVzIiwgVEVYVCk7IH0nIFRFWFQ9IiR0ZXh0IgorICAgICAgICBmaQorICAgIGZpCisKKyAgICBzaHRvb2xfZXhpdCAwCisgICAgOzsKKworbWRhdGUgKQorICAgICMjCisgICAgIyMgIG1kYXRlIC0tIFByZXR0eS1wcmludCBtb2RpZmljYXRpb24gdGltZSBvZiBhIGZpbGUgb3IgZGlyCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5NS0xOTk3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBmb2Q9IiQxIgorICAgIGNhc2UgIiRvcHRfbyIgaW4KKyAgICAgICAgW2RteV1bZG15XVtkbXldICkKKyAgICAgICAgICAgIDs7CisgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiBcYC1vJzogJG9wdF9vIiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgICAgICA7OworICAgIGVzYWMKKyAgICBpZiBbICEgLXIgIiRmb2QiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogZmlsZSBvciBkaXJlY3Rvcnkgbm90IGZvdW5kOiAkZm9kIiAxPiYyCisgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICBmaQorCisgICAgIyAgIEdOVSBscyBjaGFuZ2VzIGl0cyB0aW1lIGZvcm1hdCBpbiByZXNwb25zZSB0byB0aGUgVElNRV9TVFlMRQorICAgICMgICB2YXJpYWJsZS4gU2luY2Ugd2UgY2Fubm90IGFzc3VtZSAidW5zZXQiIHdvcmtzLCByZXZlcnQgdGhpcworICAgICMgICB2YXJpYWJsZSB0byBpdHMgZG9jdW1lbnRlZCBkZWZhdWx0LgorICAgIGlmIFsgIi4kVElNRV9TVFlMRSIgIT0gLiBdOyB0aGVuCisgICAgICAgIFRJTUVfU1RZTEU9cG9zaXgtbG9uZy1pc28KKyAgICAgICAgZXhwb3J0IFRJTUVfU1RZTEUKKyAgICBmaQorCisgICAgIyAgIGdldCB0aGUgZXh0ZW5kZWQgbHMgb3V0cHV0IG9mIHRoZSBmaWxlIG9yIGRpcmVjdG9yeS4KKyAgICBpZiAvYmluL2xzIC1MIC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICAgc2V0IC0geGAvYmluL2xzIC1MIC1sIC1kICRmb2RgCisgICAgZWxzZQorICAgICAgICBzZXQgLSB4YC9iaW4vbHMgLWwgLWQgJGZvZGAKKyAgICBmaQorCisgICAgIyAgIFRoZSBtb250aCBpcyBhdCBsZWFzdCB0aGUgZm91cnRoIGFyZ3VtZW50CisgICAgIyAgICgzIHNoaWZ0cyBoZXJlLCB0aGUgbmV4dCBpbnNpZGUgdGhlIGxvb3ApLgorICAgIHNoaWZ0OyBzaGlmdDsgc2hpZnQKKworICAgICMgICBGaW5kIHRoZSBtb250aC4gTmV4dCBhcmd1bWVudCBpcyBkYXksIGZvbGxvd2VkIGJ5IHRoZSB5ZWFyIG9yIHRpbWUuCisgICAgbW9udGg9IiIKKyAgICB3aGlsZSBbICIuJG1vbnRoIiA9IC4gXTsgZG8KKyAgICAgICAgc2hpZnQKKyAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgSmFuKSBtb250aD1KYW51YXJ5OyAgIG51bW1vbnRoPTEgIDs7CisgICAgICAgICAgICBGZWIpIG1vbnRoPUZlYnJ1YXJ5OyAgbnVtbW9udGg9MiAgOzsKKyAgICAgICAgICAgIE1hcikgbW9udGg9TWFyY2g7ICAgICBudW1tb250aD0zICA7OworICAgICAgICAgICAgQXByKSBtb250aD1BcHJpbDsgICAgIG51bW1vbnRoPTQgIDs7CisgICAgICAgICAgICBNYXkpIG1vbnRoPU1heTsgICAgICAgbnVtbW9udGg9NSAgOzsKKyAgICAgICAgICAgIEp1bikgbW9udGg9SnVuZTsgICAgICBudW1tb250aD02ICA7OworICAgICAgICAgICAgSnVsKSBtb250aD1KdWx5OyAgICAgIG51bW1vbnRoPTcgIDs7CisgICAgICAgICAgICBBdWcpIG1vbnRoPUF1Z3VzdDsgICAgbnVtbW9udGg9OCAgOzsKKyAgICAgICAgICAgIFNlcCkgbW9udGg9U2VwdGVtYmVyOyBudW1tb250aD05ICA7OworICAgICAgICAgICAgT2N0KSBtb250aD1PY3RvYmVyOyAgIG51bW1vbnRoPTEwIDs7CisgICAgICAgICAgICBOb3YpIG1vbnRoPU5vdmVtYmVyOyAgbnVtbW9udGg9MTEgOzsKKyAgICAgICAgICAgIERlYykgbW9udGg9RGVjZW1iZXI7ICBudW1tb250aD0xMiA7OworICAgICAgICBlc2FjCisgICAgZG9uZQorICAgIGRheT0iJDIiCisgICAgeWVhcj0iJDMiCisKKyAgICAjICAgV2UgZmluYWxseSBoYXZlIHRvIGRlYWwgd2l0aCB0aGUgcHJvYmxlbSB0aGF0IHRoZSAibHMiIG91dHB1dAorICAgICMgICBnaXZlcyBlaXRoZXIgdGhlIHRpbWUgb2YgdGhlIGRheSBvciB0aGUgeWVhci4KKyAgICBjYXNlICR5ZWFyIGluCisgICAgICAgICo6KikKKyAgICAgICAgICAgIHRoaXNfeWVhcj1gZGF0ZSAnKyVZJyAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIGlmIFsgIi4kdGhpc195ZWFyIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIHRoaXNfeWVhcj1gZGF0ZSAnKyV5J2AKKyAgICAgICAgICAgICAgICBjYXNlICR0aGlzX3llYXIgaW4KKyAgICAgICAgICAgICAgICAgICAgWzUtOV1bMC05XSkgdGhpc195ZWFyPSIxOSR0aGlzX3llYXIiIDs7CisgICAgICAgICAgICAgICAgICAgIFswLTRdWzAtOV0pIHRoaXNfeWVhcj0iMjAkdGhpc195ZWFyIiA7OworICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAjICAgZm9yIHRoZSBmb2xsb3dpbmcgbW9udGhzIG9mIHRoZSBsYXN0IHllYXIgdGhlIHRpbWUgbm90YXRpb24KKyAgICAgICAgICAgICMgICBpcyB1c3VhbGx5IGFsc28gdXNlZCBmb3IgZmlsZXMgbW9kaWZpZWQgaW4gdGhlIGxhc3QgeWVhci4KKyAgICAgICAgICAgIHRoaXNfbW9udGg9YGRhdGUgJyslbSdgCisgICAgICAgICAgICBpZiAoZXhwciAkbnVtbW9udGggXD4gJHRoaXNfbW9udGgpID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICAgICAgICB0aGlzX3llYXI9YGV4cHIgJHRoaXNfeWVhciAtIDFgCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgeWVhcj0iJHRoaXNfeWVhciIKKyAgICAgICAgICAgIDs7CisgICAgZXNhYworCisgICAgIyAgIE9wdGlvbmFsbHkgZmlsbCBkYXkgYW5kIG1vbnRoIHdpdGggbGVlZGluZyB6ZXJvcworICAgIGlmIFsgIi4kb3B0X3oiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGNhc2UgJGRheSBpbgorICAgICAgICAgICAgWzAtOV1bMC05XSApIDs7CisgICAgICAgICAgICAgICAgIFswLTldICkgZGF5PSIwJGRheSIgOzsKKyAgICAgICAgZXNhYworICAgICAgICBjYXNlICRudW1tb250aCBpbgorICAgICAgICAgICAgWzAtOV1bMC05XSApIDs7CisgICAgICAgICAgICAgICAgIFswLTldICkgbnVtbW9udGg9IjAkbnVtbW9udGgiIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorCisgICAgIyAgIE9wdGlvbmFsbHkgdXNlIGRpZ2l0cyBmb3IgbW9udGgKKyAgICBpZiBbICIuJG9wdF9kIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBtb250aD0iJG51bW1vbnRoIgorICAgIGZpCisKKyAgICAjICAgT3B0aW9uYWxseSBzaG9ydGVuIHRoZSBtb250aCBuYW1lIHRvIHRocmVlIGNoYXJhY3RlcnMKKyAgICBpZiBbICIuJG9wdF9zIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBtb250aD1gZWNobyAkbW9udGggfCBjdXQgLWMxLTNgCisgICAgZmkKKworICAgICMgICBPdXRwdXQgdGhlIHJlc3VsdGluZyBkYXRlIHN0cmluZworICAgIGVjaG8gZHVtbXkgfCBhd2sgJ3sKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworICAgICAgICAgICAgbm93ID0gc3Vic3RyKG9yZGVyLCAxLCAxKTsKKyAgICAgICAgICAgIG9yZGVyID0gc3Vic3RyKG9yZGVyLCAyKTsKKyAgICAgICAgICAgIGlmIChub3cgPT0gImQiKQorICAgICAgICAgICAgICAgIG91dCA9IGRheTsKKyAgICAgICAgICAgIGVsc2UgaWYgKG5vdyA9PSAibSIpCisgICAgICAgICAgICAgICAgb3V0ID0gbW9udGg7CisgICAgICAgICAgICBlbHNlIGlmIChub3cgPT0gInkiKQorICAgICAgICAgICAgICAgIG91dCA9IHllYXI7CisgICAgICAgICAgICBpZiAoaSA8IDIpCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyVzIiwgb3V0LCBmaWVsZCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsIG91dCk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKG5ld2xpbmUgIT0gInllcyIpCisgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgfScgImRheT0kZGF5IiAibW9udGg9JG1vbnRoIiAieWVhcj0keWVhciIgXAorICAgICAgICJmaWVsZD0kb3B0X2YiICJvcmRlcj0kb3B0X28iICJuZXdsaW5lPSRvcHRfbiIKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCit0YWJsZSApCisgICAgIyMKKyAgICAjIyAgdGFibGUgLS0gUHJldHR5LXByaW50IGEgZmllbGQtc2VwYXJhdGVkIGxpc3QgYXMgYSB0YWJsZQorICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBpZiBbICRvcHRfYyAtZ3QgNCBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IEludmFsaWQgbnVtYmVyIG9mIGNvbHVtcyAoMS4uNCBhbGxvd2VkIG9ubHkpIiAxPiYyCisgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICBmaQorICAgIGNhc2UgIngkb3B0X0YiIGluCisgICAgICAgIHg/ICkgOzsKKyAgICAgICAgKiAgKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBJbnZhbGlkIHNlcGFyYXRvciAob25lIGNoYXIgYWxsb3dlZCBvbmx5KSIgMT4mMjsgc2h0b29sX2V4aXQgMSA7OworICAgIGVzYWMKKworICAgICMgICBzcGxpdCB0aGUgbGlzdCBpbnRvIGEgdGFibGUKKyAgICBsaXN0PWAKKyAgICAgICAgSUZTPSIkb3B0X0YiCisgICAgICAgIGZvciBlbnRyeSBpbiAkKjsgZG8KKyAgICAgICAgICAgIGlmIFsgIi4kZW50cnkiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRlbnRyeSIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUgfFwKKyAgICAgICAgYXdrICIKKyAgICAgICAgICAgIEJFR0lOIHsgbGlzdCA9IFwiXCI7IG4gPSAwOyB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QgXFwkMTsKKyAgICAgICAgICAgICAgICBuID0gbiArIDE7CisgICAgICAgICAgICAgICAgaWYgKG4gPCAkb3B0X2MpIHsKKyAgICAgICAgICAgICAgICAgICAgbGlzdCA9IGxpc3QgXCI6XCI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChuID09ICRvcHRfYykgeworICAgICAgICAgICAgICAgICAgICBsaXN0ID0gbGlzdCBcIlxcblwiOworICAgICAgICAgICAgICAgICAgICBuID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFTkQgeyBwcmludCBsaXN0OyB9CisgICAgICAgICAiCisgICAgYAorCisgICAgIyAgIGZvcm1hdCB0YWJsZSBjZWxscyBhbmQgbWFrZSBzdXJlIHRhYmxlCisgICAgIyAgIGRvZXNuJ3QgZXhjZWVkIG1heGltdW0gd2lkdGgKKyAgICBPSUZTPSIkSUZTIgorICAgIElGUz0nCisnCisgICAgZm9yIGVudHJ5IGluICRsaXN0OyBkbworICAgICAgICBjYXNlICRvcHRfYyBpbgorICAgICAgICAgICAgMSApIGV2YWwgImVjaG8gXCJcJHtlbnRyeX1cIiB8IGF3ayAtRjogJ3sgcHJpbnRmKFwiJS0ke29wdF93fXNcXG5cIiwgXCQxKTsgfSciIDs7CisgICAgICAgICAgICAyICkgZXZhbCAiZWNobyBcIlwke2VudHJ5fVwiIHwgYXdrIC1GOiAneyBwcmludGYoXCIlLSR7b3B0X3d9cyAlLSR7b3B0X3d9c1xcblwiLCBcJDEsIFwkMik7IH0nIiA7OworICAgICAgICAgICAgMyApIGV2YWwgImVjaG8gXCJcJHtlbnRyeX1cIiB8IGF3ayAtRjogJ3sgcHJpbnRmKFwiJS0ke29wdF93fXMgJS0ke29wdF93fXMgJS0ke29wdF93fXNcXG5cIiwgXCQxLCBcJDIsIFwkMyk7IH0nIiA7OworICAgICAgICAgICAgNCApIGV2YWwgImVjaG8gXCJcJHtlbnRyeX1cIiB8IGF3ayAtRjogJ3sgcHJpbnRmKFwiJS0ke29wdF93fXMgJS0ke29wdF93fXMgJS0ke29wdF93fXMgJS0ke29wdF93fXNcXG5cIiwgXCQxLCBcJDIsIFwkMywgXCQ0KTsgfSciIDs7CisgICAgICAgIGVzYWMKKyAgICBkb25lIHxcCisgICAgYXdrICJ7CisgICAgICAgIGlmIChsZW5ndGgoXCQwKSA+ICRvcHRfcykgeworICAgICAgICAgICAgcHJpbnRmKFwiJXNcXG5cIiwgc3Vic3RyKFwkMCwgMCwgJG9wdF9zLTEpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHByaW50IFwkMDsKKyAgICAgICAgfQorICAgIH0iCisgICAgSUZTPSIkT0lGUyIKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCitwcm9wICkKKyAgICAjIworICAgICMjICBwcm9wIC0tIERpc3BsYXkgcHJvZ3Jlc3Mgd2l0aCBhIHJ1bm5pbmcgcHJvcGVsbGVyCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIHBlcmw9JycKKyAgICBmb3IgZGlyIGluIGBlY2hvICRQQVRIIHwgc2VkIC1lICdzLzovIC9nJ2AgLjsgZG8KKyAgICAgICAgaWYgWyAtZiAiJGRpci9wZXJsIiBdOyB0aGVuCisgICAgICAgICAgICBwZXJsPSIkZGlyL3BlcmwiCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbICIuJHBlcmwiICE9IC4gXTsgdGhlbgorICAgICAgICAjICAgUGVybCBpcyBwcmVmZXJyZWQgYmVjYXVzZSB3cml0aW5nIHRvIFNUREVSUiBpbgorICAgICAgICAjICAgUGVybCByZWFsbHkgd3JpdGVzIGltbWVkaWF0ZWx5IGFzIG9uZSB3b3VsZCBleHBlY3QKKyAgICAgICAgJHBlcmwgLWUgJworICAgICAgICAgICAgQHAgPSAoInwiLCIvIiwiLSIsIlxcIik7CisgICAgICAgICAgICAkaSA9IDA7CisgICAgICAgICAgICB3aGlsZSAoPFNURElOPikgeworICAgICAgICAgICAgICAgIHByaW50ZihTVERFUlIgIlxyJXMuLi4lc1xiIiwgJEFSR1ZbMF0sICRwWyRpKytdKTsKKyAgICAgICAgICAgICAgICAkaSA9IDAgaWYgKCRpID4gMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcmludGYoU1RERVJSICJcciVzICAgIFxuIiwgJEFSR1ZbMF0pOworICAgICAgICAnICIkb3B0X3AiCisgICAgZWxzZQorICAgICAgICAjICAgQnV0IGlmIFBlcmwgZG9lc24ndCBleGlzdHMgd2UgdXNlIEF3ayBldmVuCisgICAgICAgICMgICBzb21lIEF3aydzIGJ1ZmZlciBldmVuIHRoZSAvZGV2L3N0ZGVyciB3cml0aW5nIDotKAorICAgICAgICBhd2sgJworICAgICAgICAgICAgQkVHSU4geworICAgICAgICAgICAgICAgIHNwbGl0KCJ8Iy8jLSNcXCIsIHAsICIjIik7CisgICAgICAgICAgICAgICAgaSA9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcciVzJWNcYiIsIHByZWZpeCwgcFtpKytdKSA+ICIvZGV2L3N0ZGVyciI7CisgICAgICAgICAgICAgICAgaWYgKGkgPiA0KSB7IGkgPSAxOyB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBFTkQgeworICAgICAgICAgICAgICAgIHByaW50ZigiXHIlcyAgICBcbiIsIHByZWZpeCkgPiAiL2Rldi9zdGRlcnIiOworICAgICAgICAgICAgfQorICAgICAgICAnICJwcmVmaXg9JG9wdF9wIgorICAgIGZpCisKKyAgICBzaHRvb2xfZXhpdCAwCisgICAgOzsKKworbW92ZSApCisgICAgIyMKKyAgICAjIyAgbW92ZSAtLSBNb3ZlIGZpbGVzIHdpdGggc2ltdWx0YW5lb3VzIHN1YnN0aXR1dGlvbgorICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBzcmM9IiQxIgorICAgIGRzdD0iJDIiCisKKyAgICAjICAgY29uc2lzdGVuY3kgY2hlY2tzCisgICAgaWYgWyAiLiRzcmMiID0gLiBdIHx8IFsgIi4kZHN0IiA9IC4gXTsgdGhlbgorICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBJbnZhbGlkIGFyZ3VtZW50cyIgMT4mMgorICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgZmkKKyAgICBpZiBbICIuJHNyYyIgPSAiLiRkc3QiIF07IHRoZW4KKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogU291cmNlIGFuZCBkZXN0aW5hdGlvbiBmaWxlcyBhcmUgdGhlIHNhbWUiIDE+JjIKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisgICAgZXhwc3JjPSIkc3JjIgorICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGV4cHNyYz0iYGVjaG8gJGV4cHNyY2AiCisgICAgZmkKKyAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBpZiBbICIuYGVjaG8gIiRzcmMiIHwgc2VkIC1lICdzO14uKlxcKi4qJDs7J2AiID0gIi4kc3JjIiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBTb3VyY2UgZG9lc24ndCBjb250YWluIHdpbGRjYXJkICgnKicpOiAkZHN0IiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi5gZWNobyAiJGRzdCIgfCBzZWQgLWUgJ3M7Xi4qJVsxLTldLiokOzsnYCIgPSAiLiRkc3QiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IERlc3RpbmF0aW9uIGRvZXNuJ3QgY29udGFpbiBzdWJzdGl0dXRpb24gKCclTicpOiAkZHN0IiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kZXhwc3JjIiA9ICIuJHNyYyIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogU291cmNlcyBub3QgZm91bmQgb3Igbm8gYXN0ZXJpc2sgOiAkc3JjIiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBpZiBbICEgLXIgIiRzcmMiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IFNvdXJjZSBub3QgZm91bmQ6ICRzcmMiIDE+JjIKKyAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyAgIGRldGVybWluZSBzdWJzdGl0dXRpb24gcGF0dGVybnMKKyAgICBpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBzcmNwYXQ9YGVjaG8gIiRzcmMiIHwgc2VkIC1lICdzL1xcLi9cXFxcLi9nJyAtZSAncy87L1xcOy9nJyAtZSAncztcXCo7XFxcXCguKlxcXFwpO2cnYAorICAgICAgICBkc3RwYXQ9YGVjaG8gIiRkc3QiIHwgc2VkIC1lICdzOyVcKFsxLTldXCk7XFxcXFwxO2cnYAorICAgIGZpCisKKyAgICAjICAgaXRlcmF0ZSBvdmVyIHNvdXJjZShzKQorICAgIGZvciBvbmVzcmMgaW4gJGV4cHNyYzsgZG8KKyAgICAgICAgaWYgWyAuJG9wdF9lID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBvbmVkc3Q9YGVjaG8gJG9uZXNyYyB8IHNlZCAtZSAiczskc3JjcGF0OyRkc3RwYXQ7ImAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgb25lZHN0PSIkZHN0IgorICAgICAgICBmaQorICAgICAgICBlcnJvcnN0YXR1cz0wCisgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkb25lc3JjIC0+ICRvbmVkc3QiCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kb3B0X3AiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBpZiBbIC1yICRvbmVkc3QgXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIGNtcCAtcyAkb25lc3JjICRvbmVkc3Q7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gInJtIC1mICRvbmVzcmMiIDE+JjIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgcm0gLWYgJG9uZXNyYyB8fCBlcnJvcnN0YXR1cz0kPworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIm12IC1mICRvbmVzcmMgJG9uZWRzdCIgMT4mMgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBtdiAtZiAkb25lc3JjICRvbmVkc3QgfHwgZXJyb3JzdGF0dXM9JD8KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIm12IC1mICRvbmVzcmMgJG9uZWRzdCIgMT4mMgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgbXYgLWYgJG9uZXNyYyAkb25lZHN0IHx8IGVycm9yc3RhdHVzPSQ/CisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIm12IC1mICRvbmVzcmMgJG9uZWRzdCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIG12IC1mICRvbmVzcmMgJG9uZWRzdCB8fCBlcnJvcnN0YXR1cz0kPworICAgICAgICBmaQorICAgICAgICBpZiBbICRlcnJvcnN0YXR1cyAtbmUgMCBdOyB0aGVuCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBzaHRvb2xfZXhpdCAkZXJyb3JzdGF0dXMKKyAgICA7OworCitpbnN0YWxsICkKKyAgICAjIworICAgICMjICBpbnN0YWxsIC0tIEluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQgb3IgZGF0YWZpbGUKKyAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk3LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KKyAgICAjIworCisgICAgIyAgIHNwZWNpYWwgY2FzZTogInNodG9vbCBpbnN0YWxsIC1kIDxkaXI+IFsuLi5dIiBpbnRlcm5hbGx5CisgICAgIyAgIG1hcHMgdG8gInNodG9vbCBta2RpciAtZiAtcCAtbSA3NTUgPGRpcj4gWy4uLl0iCisgICAgaWYgWyAiJG9wdF9kIiA9IHllcyBdOyB0aGVuCisgICAgICAgIGNtZD0iJDAgbWtkaXIgLWYgLXAgLW0gNzU1IgorICAgICAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGNtZD0iJGNtZCAtbyAnJG9wdF9vJyIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBjbWQ9IiRjbWQgLWcgJyRvcHRfZyciCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBjbWQ9IiRjbWQgLXYiCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBjbWQ9IiRjbWQgLXQiCisgICAgICAgIGZpCisgICAgICAgIGZvciBkaXIgaW4gIiRAIjsgZG8KKyAgICAgICAgICAgIGV2YWwgIiRjbWQgJGRpciIgfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgZG9uZQorICAgICAgICBzaHRvb2xfZXhpdCAwCisgICAgZmkKKworICAgICMgICBkZXRlcm1pbmUgc291cmNlKHMpIGFuZCBkZXN0aW5hdGlvbgorICAgIGFyZ2M9JCMKKyAgICBzcmNzPSIiCisgICAgd2hpbGUgWyAkIyAtZ3QgMSBdOyBkbworICAgICAgICBzcmNzPSIkc3JjcyAkMSIKKyAgICAgICAgc2hpZnQKKyAgICBkb25lCisgICAgZHN0cGF0aD0iJDEiCisKKyAgICAjICAgdHlwZSBjaGVjayBmb3IgZGVzdGluYXRpb24KKyAgICBkc3Rpc2Rpcj0wCisgICAgaWYgWyAtZCAkZHN0cGF0aCBdOyB0aGVuCisgICAgICAgIGRzdHBhdGg9YGVjaG8gIiRkc3RwYXRoIiB8IHNlZCAtZSAnczovJDo6J2AKKyAgICAgICAgZHN0aXNkaXI9MQorICAgIGZpCisKKyAgICAjICAgY29uc2lzdGVuY3kgY2hlY2sgZm9yIGRlc3RpbmF0aW9uCisgICAgaWYgWyAkYXJnYyAtZ3QgMiBdICYmIFsgJGRzdGlzZGlyID0gMCBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG11bHRpcGxlIHNvdXJjZXMgcmVxdWlyZSBkZXN0aW5hdGlvbiB0byBiZSBkaXJlY3RvcnkiIDE+JjIKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisKKyAgICAjICAgaXRlcmF0ZSBvdmVyIGFsbCBzb3VyY2UocykKKyAgICBmb3Igc3JjIGluICRzcmNzOyBkbworICAgICAgICBkc3Q9JGRzdHBhdGgKKworICAgICAgICAjICAgaWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWUKKyAgICAgICAgaWYgWyAkZHN0aXNkaXIgPSAxIF07IHRoZW4KKyAgICAgICAgICAgIGRzdGZpbGU9YGVjaG8gIiRzcmMiIHwgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7J2AKKyAgICAgICAgICAgIGRzdD0iJGRzdC8kZHN0ZmlsZSIKKyAgICAgICAgZmkKKworICAgICAgICAjICAgY2hlY2sgZm9yIGNvcnJlY3QgYXJndW1lbnRzCisgICAgICAgIGlmIFsgIi4kc3JjIiA9ICIuJGRzdCIgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFyZSB0aGUgc2FtZSAtIHNraXBwZWQiIDE+JjIKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWQgIiRzcmMiIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogc291cmNlIFxgJHNyYycgaXMgYSBkaXJlY3RvcnkgLSBza2lwcGVkIiAxPiYyCisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmaQorCisgICAgICAgICMgICBtYWtlIGEgdGVtcCBmaWxlIG5hbWUgaW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorICAgICAgICBkc3R0bXA9YGVjaG8gJGRzdCB8XAorICAgICAgICAgICAgICAgIHNlZCAtZSAncztbXi9dKiQ7OycgLWUgJ3M7XCguXCkvJDtcMTsnIC1lICdzO14kOy47JyBcCisgICAgICAgICAgICAgICAgICAgIC1lICJzO1wkOy8jSU5TVEAkJCM7ImAKKworICAgICAgICAjICAgdmVyYm9zaXR5CisgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkc3JjIC0+ICRkc3QiIDE+JjIKKyAgICAgICAgZmkKKworICAgICAgICAjICAgY29weSBvciBtb3ZlIHRoZSBmaWxlIG5hbWUgdG8gdGhlIHRlbXAgbmFtZQorICAgICAgICAjICAgKGJlY2F1c2Ugd2UgbWlnaHQgYmUgbm90IGFsbG93ZWQgdG8gY2hhbmdlIHRoZSBzb3VyY2UpCisgICAgICAgIGlmIFsgIi4kb3B0X0MiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBvcHRfYz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiLiRvcHRfYyIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiY3AgJHNyYyAkZHN0dG1wIiAxPiYyCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY3AgJHNyYyAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAibXYgJHNyYyAkZHN0dG1wIiAxPiYyCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgbXYgJHNyYyAkZHN0dG1wIHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGFkanVzdCB0aGUgdGFyZ2V0IGZpbGUKKyAgICAgICAgaWYgWyAiLiRvcHRfZSIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBzZWQ9J3NlZCcKKyAgICAgICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9IiRBU0NfTkwiOyBzZXQgLS0gJG9wdF9lOyBJRlM9IiRPSUZTIgorICAgICAgICAgICAgZm9yIGUKKyAgICAgICAgICAgIGRvCisgICAgICAgICAgICAgICAgc2VkPSIkc2VkIC1lICckZSciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBjcCAkZHN0dG1wICRkc3R0bXAub2xkCisgICAgICAgICAgICBjaG1vZCB1K3cgJGRzdHRtcAorICAgICAgICAgICAgZXZhbCAiJHNlZCA8JGRzdHRtcC5vbGQgPiRkc3R0bXAiIHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICBybSAtZiAkZHN0dG1wLm9sZAorICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9zIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJzdHJpcCAkZHN0dG1wIiAxPiYyCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgc3RyaXAgJGRzdHRtcCB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICRkc3R0bXAiIDE+JjIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjaG93biAkb3B0X28gJGRzdHRtcCB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9nIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiY2hncnAgJG9wdF9nICRkc3R0bXAiIDE+JjIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjaGdycCAkb3B0X2cgJGRzdHRtcCB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAiLi0iIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiY2htb2QgJG9wdF9tICRkc3R0bXAiIDE+JjIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjaG1vZCAkb3B0X20gJGRzdHRtcCB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICBmaQorCisgICAgICAgICMgICBkZXRlcm1pbmUgd2hldGhlciB0byBkbyBhIHF1aWNrIGluc3RhbGwKKyAgICAgICAgIyAgIChoYXMgdG8gYmUgZG9uZSBfYWZ0ZXJfIHRoZSBzdHJpcCB3YXMgYWxyZWFkeSBkb25lKQorICAgICAgICBxdWljaz1ubworICAgICAgICBpZiBbICIuJG9wdF9DIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAtciAkZHN0IF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBjbXAgLXMgJHNyYyAkZHN0OyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHF1aWNrPXllcworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgICMgICBmaW5hbGx5LCBpbnN0YWxsIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uCisgICAgICAgIGlmIFsgJHF1aWNrID0geWVzIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJGRzdHRtcCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHJtIC1mICRkc3R0bXAKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJybSAtZiAkZHN0ICYmIG12ICRkc3R0bXAgJGRzdCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIHJtIC1mICRkc3QgJiYgbXYgJGRzdHRtcCAkZHN0CisgICAgICAgIGZpCisgICAgZG9uZQorCisgICAgc2h0b29sX2V4aXQgMAorICAgIDs7CisKK21rZGlyICkKKyAgICAjIworICAgICMjICBta2RpciAtLSBNYWtlIG9uZSBvciBtb3JlIGRpcmVjdG9yaWVzCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5Ni0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIGVycnN0YXR1cz0wCisgICAgZm9yIHAgaW4gJHsxKyIkQCJ9OyBkbworICAgICAgICAjICAgaWYgdGhlIGRpcmVjdG9yeSBhbHJlYWR5IGV4aXN0cy4uLgorICAgICAgICBpZiBbIC1kICIkcCIgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfZiIgPSAubm8gXSAmJiBbICIuJG9wdF9wIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogZGlyZWN0b3J5IGFscmVhZHkgZXhpc3RzOiAkcCIgMT4mMgorICAgICAgICAgICAgICAgIGVycnN0YXR1cz0xCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAgICAgICAgIyAgIGlmIHRoZSBkaXJlY3RvcnkgaGFzIHRvIGJlIGNyZWF0ZWQuLi4KKyAgICAgICAgaWYgWyAiLiRvcHRfcCIgPSAubm8gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJta2RpciAkcCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIG1rZGlyICRwIHx8IGVycnN0YXR1cz0kPworICAgICAgICAgICAgaWYgWyAiLiRvcHRfbyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICRwIiAxPiYyCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBjaG93biAkb3B0X28gJHAgfHwgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hncnAgJG9wdF9nICRwIiAxPiYyCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBjaGdycCAkb3B0X2cgJHAgfHwgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfbSIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiY2htb2QgJG9wdF9tICRwIiAxPiYyCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBjaG1vZCAkb3B0X20gJHAgfHwgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICBmaQorICAgICAgICBlbHNlCisgICAgICAgICAgICAjICAgdGhlIHNtYXJ0IHNpdHVhdGlvbgorICAgICAgICAgICAgc2V0IGZub3JkIGBlY2hvICI6JHAiIHxcCisgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eOlwvLyUvJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eOi8vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9cLy8gL2cnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14lL1wvLydgCisgICAgICAgICAgICBzaGlmdAorICAgICAgICAgICAgcGF0aGNvbXA9JycKKyAgICAgICAgICAgIGZvciBkIGluICR7MSsiJEAifTsgZG8KKyAgICAgICAgICAgICAgICBwYXRoY29tcD0iJHBhdGhjb21wJGQiCisgICAgICAgICAgICAgICAgY2FzZSAiJHBhdGhjb21wIiBpbgorICAgICAgICAgICAgICAgICAgICAtKiApIHBhdGhjb21wPSIuLyRwYXRoY29tcCIgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgaWYgWyAhIC1kICIkcGF0aGNvbXAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIm1rZGlyICRwYXRoY29tcCIgMT4mMgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBta2RpciAkcGF0aGNvbXAgfHwgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X28iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG93biAkb3B0X28gJHBhdGhjb21wIiAxPiYyCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgY2hvd24gJG9wdF9vICRwYXRoY29tcCB8fCBlcnJzdGF0dXM9JD8KKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNoZ3JwICRvcHRfZyAkcGF0aGNvbXAiIDE+JjIKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICBjaGdycCAkb3B0X2cgJHBhdGhjb21wIHx8IGVycnN0YXR1cz0kPworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2htb2QgJG9wdF9tICRwYXRoY29tcCIgMT4mMgorICAgICAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNobW9kICRvcHRfbSAkcGF0aGNvbXAgfHwgZXJyc3RhdHVzPSQ/CisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBwYXRoY29tcD0iJHBhdGhjb21wLyIKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgZmkKKyAgICBkb25lCisKKyAgICBzaHRvb2xfZXhpdCAkZXJyc3RhdHVzCisgICAgOzsKKworbWtsbiApCisgICAgIyMKKyAgICAjIyAgbWtsbiAtLSBNYWtlIGxpbmsgd2l0aCBjYWxjdWxhdGlvbiBvZiByZWxhdGl2ZSBwYXRocworICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICAjICAgZGV0ZXJtaW5lIHNvdXJjZShzKSBhbmQgZGVzdGluYXRpb24KKyAgICBhcmdzPSQ/CisgICAgc3Jjcz0iIgorICAgIHdoaWxlIFsgJCMgLWd0IDEgXTsgZG8KKyAgICAgICAgc3Jjcz0iJHNyY3MgJDEiCisgICAgICAgIHNoaWZ0CisgICAgZG9uZQorICAgIGRzdD0iJDEiCisgICAgaWYgWyAhIC1kICRkc3QgXTsgdGhlbgorICAgICAgICBpZiBbICRhcmdzIC1ndCAyIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG11bHRpcGxlIHNvdXJjZXMgbm90IGFsbG93ZWQgd2hlbiB0YXJnZXQgaXNuJ3QgYSBkaXJlY3RvcnkiIDE+JjIKKyAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgZmkKKyAgICBmaQorCisgICAgIyAgIGRldGVybWluZSBsaW5rIG9wdGlvbnMKKyAgICBsbm9wdD0iIgorICAgIGlmIFsgIi4kb3B0X2YiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGxub3B0PSIkbG5vcHQgLWYiCisgICAgZmkKKyAgICBpZiBbICIuJG9wdF9zIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBsbm9wdD0iJGxub3B0IC1zIgorICAgIGZpCisKKyAgICAjICAgaXRlcmF0ZSBvdmVyIHNvdXJjZXMKKyAgICBmb3Igc3JjIGluICRzcmNzOyBkbworICAgICAgICAjICAgZGV0ZXJtaW5lIGlmIG9uZSBvZiB0aGUgcGF0aHMgaXMgYW4gYWJzb2x1dGUgcGF0aCwKKyAgICAgICAgIyAgIGJlY2F1c2UgdGhlbiB3ZSBfaGF2ZV8gdG8gdXNlIGFuIGFic29sdXRlIHN5bWxpbmsKKyAgICAgICAgb25laXNhYnM9MAorICAgICAgICBzcmNpc2Ficz0wCisgICAgICAgIGRzdGlzYWJzPTAKKyAgICAgICAgY2FzZSAkc3JjIGluCisgICAgICAgICAgICAvKiApIG9uZWlzYWJzPTE7IHNyY2lzYWJzPTEgOzsKKyAgICAgICAgZXNhYworICAgICAgICBjYXNlICRkc3QgaW4KKyAgICAgICAgICAgIC8qICkgb25laXNhYnM9MTsgZHN0aXNhYnM9MSA7OworICAgICAgICBlc2FjCisKKyAgICAgICAgIyAgIHNwbGl0IHNvdXJjZSBhbmQgZGVzdGluYXRpb24gaW50byBkaXIgYW5kIGJhc2UgbmFtZQorICAgICAgICBpZiBbIC1kICRzcmMgXTsgdGhlbgorICAgICAgICAgICAgc3JjZGlyPWBlY2hvICRzcmMgfCBzZWQgLWUgJ3M7LyokOzsnYAorICAgICAgICAgICAgc3JjYmFzZT0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBzcmNkaXI9YGVjaG8gICRzcmMgfCBzZWQgLWUgJ3M7XlteL10qJDs7JyAtZSAnczteXCguKi9cKVteL10qJDtcMTsnIC1lICdzO1woLlwpLyQ7XDE7J2AKKyAgICAgICAgICAgIHNyY2Jhc2U9YGVjaG8gJHNyYyB8IHNlZCAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgLWQgJGRzdCBdOyB0aGVuCisgICAgICAgICAgICBkc3RkaXI9YGVjaG8gJGRzdCB8IHNlZCAtZSAnczsvKiQ7OydgCisgICAgICAgICAgICBkc3RiYXNlPSIiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRzdGRpcj1gZWNobyAgJGRzdCB8IHNlZCAtZSAnczteW14vXSokOzsnIC1lICdzO15cKC4qL1wpW14vXSokO1wxOycgLWUgJ3M7XCguXCkvJDtcMTsnYAorICAgICAgICAgICAgZHN0YmFzZT1gZWNobyAkZHN0IHwgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7J2AKKyAgICAgICAgZmkKKworICAgICAgICAjICAgY29uc2lzdGVuY3kgY2hlY2sKKyAgICAgICAgaWYgWyAiLiRkc3RkaXIiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAhIC1kICRkc3RkaXIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBub3QgZm91bmQ6ICRkc3RkaXIiIDE+JjIKKyAgICAgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgICMgICBtYWtlIHN1cmUgdGhlIHNvdXJjZSBpcyByZWFjaGFibGUgZnJvbSB0aGUgZGVzdGluYXRpb24KKyAgICAgICAgaWYgWyAkZHN0aXNhYnMgPSAxIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgJHNyY2lzYWJzID0gMCBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRzcmNkaXIiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iYHB3ZCB8IHNlZCAtZSAnczsvKiQ7OydgIgorICAgICAgICAgICAgICAgICAgICBzcmNpc2Ficz0xCisgICAgICAgICAgICAgICAgICAgIG9uZWlzYWJzPTEKKyAgICAgICAgICAgICAgICBlbGlmIFsgLWQgJHNyY2RpciBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIHNyY2Rpcj0iYGNkICRzcmNkaXI7IHB3ZCB8IHNlZCAtZSAnczsvKiQ7OydgIgorICAgICAgICAgICAgICAgICAgICBzcmNpc2Ficz0xCisgICAgICAgICAgICAgICAgICAgIG9uZWlzYWJzPTEKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICAjICAgc3BsaXQgYXdheSBhIGNvbW1vbiBwcmVmaXgKKyAgICAgICAgcHJlZml4PSIiCisgICAgICAgIGlmIFsgIi4kc3JjZGlyIiA9ICIuJGRzdGRpciIgXSAmJiBbICIuJHNyY2RpciIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBwcmVmaXg9IiRzcmNkaXIvIgorICAgICAgICAgICAgc3JjZGlyPSIiCisgICAgICAgICAgICBkc3RkaXI9IiIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgd2hpbGUgWyAiLiRzcmNkaXIiICE9IC4gXSAmJiBbICIuJGRzdGRpciIgIT0gLiBdOyBkbworICAgICAgICAgICAgICAgIHByZXNyYz1gZWNobyAkc3JjZGlyIHwgc2VkIC1lICdzO15cKFteL10qXCkvLio7XDE7J2AKKyAgICAgICAgICAgICAgICBwcmVkc3Q9YGVjaG8gJGRzdGRpciB8IHNlZCAtZSAnczteXChbXi9dKlwpLy4qO1wxOydgCisgICAgICAgICAgICAgICAgaWYgWyAiLiRwcmVzcmMiICE9ICIuJHByZWRzdCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgcHJlZml4PSIkcHJlZml4JHByZXNyYy8iCisgICAgICAgICAgICAgICAgc3JjZGlyPWBlY2hvICRzcmNkaXIgfCBzZWQgLWUgJ3M7XlteL10qLyo7OydgCisgICAgICAgICAgICAgICAgZHN0ZGlyPWBlY2hvICRkc3RkaXIgfCBzZWQgLWUgJ3M7XlteL10qLyo7OydgCisgICAgICAgICAgICBkb25lCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGRlc3RpbmF0aW9uIHByZWZpeCBpcyBqdXN0IHRoZSBjb21tb24gcHJlZml4CisgICAgICAgIGRzdHByZT0iJHByZWZpeCIKKworICAgICAgICAjICAgZGV0ZXJtaW5lIHNvdXJjZSBwcmVmaXggd2hpY2ggaXMgdGhlIHJldmVyc2UgZGlyZWN0b3J5CisgICAgICAgICMgICBzdGVwLXVwIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorICAgICAgICBzcmNwcmU9IiIKKworICAgICAgICBpc3Jvb3Q9MAorICAgICAgICBpZiBbICIuJHByZWZpeCIgPSAuIF0gfHwgWyAiLiRwcmVmaXgiID0gLi8gXTsgdGhlbgorICAgICAgICAgICAgaXNyb290PTEKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAkb25laXNhYnMgPSAwIF0gfHwgWyAkaXNyb290ID0gMCBdOyB0aGVuCisgICAgICAgICAgICBwbD0iJGRzdGRpci8iCisgICAgICAgICAgICBPSUZTPSIkSUZTIjsgSUZTPScvJworICAgICAgICAgICAgZm9yIHBlIGluICRwbDsgZG8KKyAgICAgICAgICAgICAgICBbICIuJHBlIiA9IC4gIF0gJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBbICIuJHBlIiA9IC4uIF0gJiYgY29udGludWUKKyAgICAgICAgICAgICAgICBzcmNwcmU9Ii4uLyRzcmNwcmUiCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBJRlM9IiRPSUZTIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBbICRzcmNpc2FicyA9IDEgXTsgdGhlbgorICAgICAgICAgICAgICAgIHNyY3ByZT0iJHByZWZpeCIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGRldGVybWluZSBkZXN0aW5hdGlvbiBzeW1saW5rIG5hbWUKKyAgICAgICAgaWYgWyAiLiRkc3RiYXNlIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRzcmNiYXNlIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBkc3RiYXNlPSIkc3JjYmFzZSIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkc3RiYXNlPWBlY2hvICIkcHJlZml4JHNyY2RpciIgfCBzZWQgLWUgJ3M7LyokOzsnIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7J2AKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIG5vdyBmaW5hbGl6ZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBwYXRocworICAgICAgICBzcmNkaXI9YGVjaG8gJHNyY2RpciB8IHNlZCAtZSAncztcKFteL11cKSQ7XDEvOydgCisgICAgICAgIGRzdGRpcj1gZWNobyAkZHN0ZGlyIHwgc2VkIC1lICdzO1woW14vXVwpJDtcMS87J2AKKworICAgICAgICAjICAgcnVuIHRoZSBmaW5hbCBsaW5rIGNvbW1hbmQKKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImxuJGxub3B0ICRzcmNwcmUkc3JjZGlyJHNyY2Jhc2UgJGRzdHByZSRkc3RkaXIkZHN0YmFzZSIKKyAgICAgICAgZmkKKyAgICAgICAgZXZhbCBsbiRsbm9wdCAkc3JjcHJlJHNyY2RpciRzcmNiYXNlICRkc3RwcmUkZHN0ZGlyJGRzdGJhc2UKKyAgICBkb25lCisKKyAgICBzaHRvb2xfZXhpdCAwCisgICAgOzsKKworbWtzaGFkb3cgKQorICAgICMjCisgICAgIyMgIG1rc2hhZG93IC0tIE1ha2UgYSBzaGFkb3cgdHJlZSB0aHJvdWdoIHN5bWJvbGljIGxpbmtzCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5OC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgICMgICBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGRpcmVjdG9yeQorICAgIHNyYz1gZWNobyAiJDEiIHwgc2VkIC1lICdzOi8kOjonIC1lICdzOl5cLi9cKC5cKTpcMTonYAorICAgIGRzdD1gZWNobyAiJDIiIHwgc2VkIC1lICdzOi8kOjonIC1lICdzOl5cLi9cKC5cKTpcMTonYAorCisgICAgIyAgIGNoZWNrIHdoZXRoZXIgc291cmNlIGV4aXN0cworICAgIGlmIFsgISAtZCAkc3JjIF07IHRoZW4KKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogc291cmNlIGRpcmVjdG9yeSBub3QgZm91bmQ6IFxgJHNyYyciIDE+JjIKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIGlmIG9uZSBvZiB0aGUgcGF0aHMgaXMgYW4gYWJzb2x1dGUgcGF0aCwKKyAgICAjICAgYmVjYXVzZSB0aGVuIHdlIGhhdmUgdG8gdXNlIGFuIGFic29sdXRlIHN5bWxpbmsKKyAgICBvbmVpc2Ficz0wCisgICAgY2FzZSAkc3JjIGluCisgICAgICAgIC8qICkgb25laXNhYnM9MSA7OworICAgIGVzYWMKKyAgICBjYXNlICRkc3QgaW4KKyAgICAgICAgLyogKSBvbmVpc2Ficz0xIDs7CisgICAgZXNhYworCisgICAgIyAgIGRldGVybWluZSByZXZlcnNlIGRpcmVjdG9yeSBmb3IgZGVzdGluYXRpb24gZGlyZWN0b3J5CisgICAgZHN0cmV2ZGlyPScnCisgICAgaWYgWyAkb25laXNhYnMgPSAwIF07IHRoZW4KKyAgICAgICAgIyAgIGRlcml2ZSByZXZlcnNlIHBhdGggZnJvbSBmb3J3YXJkIHBhdGgKKyAgICAgICAgcHdkPWBwd2RgCisgICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9Jy8nCisgICAgICAgIGZvciBwZSBpbiAkZHN0OyBkbworICAgICAgICAgICAgaWYgWyAieCRwZSIgPSAieC4uIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgT0lGUzI9IiRJRlMiOyBJRlM9IiRESUZTIgorICAgICAgICAgICAgICAgIGV2YWwgYGVjaG8gIiRwd2QiIHxcCisgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzOlwoW14vXSpcKSQ6OyBkaXI9IlwxIjonIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M6XlwoLipcKS9bXi9dKjs6cHdkPSJcMSI7OidcCisgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzOl47OnB3ZD0iIjs6J2AKKyAgICAgICAgICAgICAgICBkc3RyZXZkaXI9IiRkaXIvJGRzdHJldmRpciIKKyAgICAgICAgICAgICAgICBJRlM9IiRPSUZTMiIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkc3RyZXZkaXI9Ii4uLyRkc3RyZXZkaXIiCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIElGUz0iJE9JRlMiCisgICAgZWxzZQorICAgICAgICBzcmM9ImBjZCAkc3JjOyBwd2RgIjsKKyAgICBmaQorCisgICAgIyAgIGNyZWF0ZSBkaXJlY3RvcnkgdHJlZSBhdCBkZXN0aW5hdGlvbgorICAgIGlmIFsgISAtZCAkZHN0IF07IHRoZW4KKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIm1rZGlyICRkc3QiIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgbWtkaXIgJGRzdAorICAgIGZpCisgICAgaWYgWyAiLiRvcHRfYSIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgRElSUz1gY2QgJHNyYzsgZmluZCAuIC10eXBlIGQgLXByaW50IHxcCisgICAgICAgICAgICAgIHNlZCAtZSAnL15cLiQvZCcgLWUgJ3M6XlwuLzo6J2AKKyAgICBlbHNlCisgICAgICAgIERJUlM9YGNkICRzcmM7IGZpbmQgLiAtdHlwZSBkIC1wcmludCB8XAorICAgICAgICAgICAgICBzZWQgLWUgJy9cL0NWUy9kJyAtZSAnL15cLiQvZCcgLWUgJ3M6XlwuLzo6J2AKKyAgICBmaQorICAgIGZvciBkaXIgaW4gJERJUlM7IGRvCisgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJta2RpciAkZHN0LyRkaXIiIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgbWtkaXIgJGRzdC8kZGlyCisgICAgZG9uZQorCisgICAgIyAgIGZpbGwgZGlyZWN0b3J5IHRyZWUgd2l0aCBzeW1saW5rcyB0byBmaWxlcworICAgIGlmIFsgIi4kb3B0X2EiID0gLnllcyBdOyB0aGVuCisgICAgICAgIEZJTEVTPSJgY2QgJHNyYzsgZmluZCAuIC1kZXB0aCAtcHJpbnQgfFwKKyAgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXlwuXC8vLydgIgorICAgIGVsc2UKKyAgICAgICAgRklMRVM9ImBjZCAkc3JjOyBmaW5kIC4gLWRlcHRoIC1wcmludCB8XAorICAgICAgICAgICAgICAgIHNlZCAtZSAnL1wubyQvZCcgLWUgJy9cLmEkL2QnIC1lICcvXC5zbyQvZCcgXAorICAgICAgICAgICAgICAgICAgICAtZSAnL1wuY3ZzaWdub3JlJC9kJyAtZSAnL1wvQ1ZTL2QnIFwKKyAgICAgICAgICAgICAgICAgICAgLWUgJy9cL1wuIy9kJyAtZSAnL1wub3JpZyQvZCcgXAorICAgICAgICAgICAgICAgICAgICAtZSAncy9eXC5cLy8vJ2AiCisgICAgZmkKKyAgICBmb3IgZmlsZSBpbiAkRklMRVM7IGRvCisgICAgICAgICAjICBkb24ndCB1c2UgYC10eXBlIGYnIGFib3ZlIGZvciBmaW5kIGJlY2F1c2Ugb2Ygc3ltbGlua3MKKyAgICAgICAgIGlmIFsgLWQgIiRzcmMvJGZpbGUiIF07IHRoZW4KKyAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgZmkKKyAgICAgICAgIGJhc2VuYW1lPWBlY2hvICRmaWxlIHwgc2VkIC1lICdzOl4uKi86OidgCisgICAgICAgICBkaXI9YGVjaG8gJGZpbGUgfCBzZWQgLWUgJ3M6W14vXSokOjonIC1lICdzOi8kOjonIC1lICdzOiQ6LzonIC1lICdzOl4vJDo6J2AKKyAgICAgICAgIGZyb209YGVjaG8gIiRzcmMvJGZpbGUiIHwgc2VkIC1lICdzL15cLlwvLy8nYAorICAgICAgICAgdG89IiRkc3QvJGRpciRiYXNlbmFtZSIKKyAgICAgICAgIGlmIFsgJG9uZWlzYWJzID0gMCBdOyB0aGVuCisgICAgICAgICAgICAgaWYgWyAiLiRkaXIiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICBzdWJkaXI9YGVjaG8gJGRpciB8IHNlZCAtZSAnczovJDo6J2AKKyAgICAgICAgICAgICAgICAgIyAgIGRlcml2ZSByZXZlcnNlIHBhdGggZnJvbSBmb3J3YXJkIHBhdGgKKyAgICAgICAgICAgICAgICAgcmV2ZGlyPScnCisgICAgICAgICAgICAgICAgIE9JRlM9IiRJRlMiOyBJRlM9Jy8nCisgICAgICAgICAgICAgICAgIGZvciBwZSBpbiAkc3ViZGlyOyBkbworICAgICAgICAgICAgICAgICAgICAgcmV2ZGlyPSIuLi8kcmV2ZGlyIgorICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgIElGUz0iJE9JRlMiCisgICAgICAgICAgICAgICAgICMgICBmaW5hbGl6ZSBmcm9tCisgICAgICAgICAgICAgICAgIGZyb209IiRyZXZkaXIkZnJvbSIKKyAgICAgICAgICAgICBmaQorICAgICAgICAgICAgIGZyb209IiRkc3RyZXZkaXIkZnJvbSIKKyAgICAgICAgIGZpCisgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgIGVjaG8gIiAgICAkdG8iIDE+JjIKKyAgICAgICAgIGZpCisgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgIGVjaG8gImxuIC1zICRmcm9tICR0byIgMT4mMgorICAgICAgICAgZmkKKyAgICAgICAgIGxuIC1zICRmcm9tICR0bworICAgIGRvbmUKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCitmaXhwZXJtICkKKyAgICAjIworICAgICMjICBmaXhwZXJtIC0tIEZpeCBmaWxlIHBlcm1pc3Npb25zIGluc2lkZSBhIHNvdXJjZSB0cmVlCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5Ni0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIHBhdGhzPSIkKiIKKworICAgICMgICBjaGVjayB3aGV0aGVyIHRoZSB0ZXN0IGNvbW1hbmQgc3VwcG9ydHMgdGhlIC14IG9wdGlvbgorICAgIGlmIFsgLXggL2Jpbi9zaCBdIDI+L2Rldi9udWxsOyB0aGVuCisgICAgICAgIG1pbnVzeD0iLXgiCisgICAgZWxzZQorICAgICAgICBtaW51c3g9Ii1yIgorICAgIGZpCisKKyAgICAjICAgaXRlcmF0ZSBvdmVyIHBhdGhzCisgICAgZm9yIHAgaW4gJHBhdGhzOyBkbworICAgICAgICBmb3IgZmlsZSBpbiBgZmluZCAkcCAtZGVwdGggLXByaW50YDsgZG8KKyAgICAgICAgICAgIGlmIFsgLWYgJGZpbGUgXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIFsgJG1pbnVzeCAkZmlsZSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICItcnd4ci14ci14ICRmaWxlIiAyPiYxCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCA3NTUgJGZpbGUiIDI+JjEKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgY2htb2QgNzU1ICRmaWxlCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiLXJ3LXItLXItLSAkZmlsZSIgMj4mMQorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2htb2QgNjQ0ICRmaWxlIiAyPiYxCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGNobW9kIDY0NCAkZmlsZQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbIC1kICRmaWxlIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJkcnd4ci14ci14ICRmaWxlIiAyPiYxCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG1vZCA3NTUgJGZpbGUiIDI+JjEKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGNobW9kIDc1NSAkZmlsZQorICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICI/Pz8/Pz8/Pz8/ICRmaWxlIiAyPiYxCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZG9uZQorCisgICAgc2h0b29sX2V4aXQgMAorICAgIDs7CisKK3JvdGF0ZSApCisgICAgIyMKKyAgICAjIyAgcm90YXRlIC0tIExvZ2ZpbGUgcm90YXRpb24KKyAgICAjIyAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KKyAgICAjIworCisgICAgIyAgIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IG9uZSBmaWxlIHRvIHJvdGF0ZQorICAgIGlmIFsgIi4kb3B0X24iID0gLjAgXTsgdGhlbgorICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdF9uJyB0byBvcHRpb24gLW4uIiAxPiYyCisgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICBmaQorCisgICAgIyAgIGNhbm9uaWNhbGl6ZSAtcyBvcHRpb24gYXJndW1lbnQKKyAgICBpZiBbICIuJG9wdF9zIiAhPSAuIF07IHRoZW4KKyAgICAgICAgaWYgWyAiLmBleHByICRvcHRfcyA6ICdbMC05XSokJ2AiICE9IC4wIF07IHRoZW4KKyAgICAgICAgICAgIDoKKyAgICAgICAgZWxpZiBbICIuYGV4cHIgJG9wdF9zIDogJ1swLTldKltLa10kJ2AiICE9IC4wIF07IHRoZW4KKyAgICAgICAgICAgIG9wdF9zPWBleHByICRvcHRfcyA6ICdcKFswLTldKlwpW0trXSQnYAorICAgICAgICAgICAgb3B0X3M9YGV4cHIgJG9wdF9zIFwqIDEwMjRgCisgICAgICAgIGVsaWYgWyAiLmBleHByICRvcHRfcyA6ICdbMC05XSpbTW1dJCdgIiAhPSAuMCBdOyB0aGVuCisgICAgICAgICAgICBvcHRfcz1gZXhwciAkb3B0X3MgOiAnXChbMC05XSpcKVtNbV0kJ2AKKyAgICAgICAgICAgIG9wdF9zPWBleHByICRvcHRfcyBcKiAxMDQ4NTc2YCAjIDEwMjQqMTAyNAorICAgICAgICBlbGlmIFsgIi5gZXhwciAkb3B0X3MgOiAnWzAtOV0qW0dnXSQnYCIgIT0gLjAgXTsgdGhlbgorICAgICAgICAgICAgb3B0X3M9YGV4cHIgJG9wdF9zIDogJ1woWzAtOV0qXClbR2ddJCdgCisgICAgICAgICAgICBvcHRfcz1gZXhwciAkb3B0X3MgXCogMTA3Mzc0MTgyNGAgIyAxMDI0KjEwMjQqMTAyNAorICAgICAgICBlbHNlCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50IFxgJG9wdF9zJyB0byBvcHRpb24gLXMuIiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICBvcHRpb24gLWQvLXogY29uc2lzdGVuY3kKKyAgICBpZiBbICIuJG9wdF9kIiA9IC55ZXMgXSAmJiBbICIuJG9wdF96IiA9IC4gXTsgdGhlbgorICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBvcHRpb24gLWQgcmVxdWlyZXMgb3B0aW9uIC16LiIgMT4mMgorICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgZmkKKworICAgICMgICBtYWtlIHN1cmUgdGFyZ2V0IGRpcmVjdG9yeSBleGlzdHMKKyAgICBpZiBbICIuJG9wdF9hIiAhPSAuIF07IHRoZW4KKyAgICAgICAgaWYgWyAhIC1kICRvcHRfYSBdOyB0aGVuCisgICAgICAgICAgICBpZiBbICIuJG9wdF9mIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogYXJjaGl2ZSBkaXJlY3RvcnkgXGAkb3B0X2EnIGRvZXMgbm90IGV4aXN0LiIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBta2RpciAkb3B0X2EgfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgIGNobW9kIDc1NSAkb3B0X2EKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAhIC13ICRvcHRfYSBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBhcmNoaXZlIGRpcmVjdG9yeSBcYCRvcHRfYScgbm90IHdyaXRhYmxlLiIgMT4mMgorICAgICAgICAgICAgc2h0b29sX2V4aXQgMQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIGNvbXByZXNzaW9uIGFwcHJvYWNoCisgICAgaWYgWyAiLiRvcHRfeiIgIT0gLiBdOyB0aGVuCisgICAgICAgIGNvbXBfbHZsPSIkb3B0X3oiCisgICAgICAgIGNvbXBfcHJnPSIiCisgICAgICAgIGNhc2UgJGNvbXBfbHZsIGluCisgICAgICAgICAgICAqOiogKSBldmFsIGBlY2hvICRjb21wX2x2bCB8XAorICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzJV5cKC4qXCk6XCguKlwpJCVjb21wX3ByZz0iXDEiOyBjb21wX2x2bD0iXDIiJSdgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICAjICAgY29tcHJlc3Npb24gbGV2ZWwgY29uc2lzdGVuY3kKKyAgICAgICAgY2FzZSAkY29tcF9sdmwgaW4KKyAgICAgICAgICAgIFswLTldICkKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgKiApIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgY29tcHJlc3Npb24gbGV2ZWwgXGAkY29tcF9sdmwnIiAxPiYyCisgICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICAjICAgZGV0ZXJtaW5lIGEgc3VpdGFibGUgY29tcHJlc3Npb24gdG9vbAorICAgICAgICBpZiBbICIuJGNvbXBfcHJnIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgIyAgIGNoZWNrIHdoZXRoZXIgdGhlIHRlc3QgY29tbWFuZCBzdXBwb3J0cyB0aGUgLXggb3B0aW9uCisgICAgICAgICAgICBpZiBbIC14IC9iaW4vc2ggXSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICAgICAgIG1pbnVzeD0iLXgiCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbWludXN4PSItciIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICAjICAgc2VhcmNoIGZvciB0b29scyBpbiAkUEFUSAorICAgICAgICAgICAgcGF0aHM9ImBlY2hvICRQQVRIIHxcCisgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncyUvKjolOiVnJyAtZSAncyUvKiQlJScgXAorICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3MvXjovLjovJyAtZSAncy86Oi86LjovZycgLWUgJ3MvOiQvOi4vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy86LyAvZydgIgorICAgICAgICAgICAgZm9yIHByZyBpbiBiemlwMiBnemlwIGNvbXByZXNzOyBkbworICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICRwYXRoczsgZG8KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkbWludXN4ICIkcGF0aC8kcHJnIiBdICYmIFsgISAtZCAiJHBhdGgvJHByZyIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgY29tcF9wcmc9IiRwcmciCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgICAgICBpZiBbICIuJGNvbXBfcHJnIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgaWYgWyAiLiRjb21wX3ByZyIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBubyBzdWl0YWJsZSBjb21wcmVzc2lvbiB0b29sIGZvdW5kIGluIFwkUEFUSCIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGRldGVybWluZSBzdGFuZGFyZCBjb21wcmVzc2lvbiBleHRlbnNpb24KKyAgICAgICAgIyAgIGFuZCBtYWtlIHN1cmUgaXQgaXMgYSBrbm93biB0b29sCisgICAgICAgIGNhc2UgJGNvbXBfcHJnIGluCisgICAgICAgICAgICAqL2J6aXAyICAgIHwgYnppcDIgICAgKSBjb21wX2V4dD0iYnoyIiBjb21wX2x2bD0iLSRjb21wX2x2bCIgOzsKKyAgICAgICAgICAgICovZ3ppcCAgICAgfCBnemlwICAgICApIGNvbXBfZXh0PSJneiIgIGNvbXBfbHZsPSItJGNvbXBfbHZsIiA7OworICAgICAgICAgICAgKi9jb21wcmVzcyB8IGNvbXByZXNzICkgY29tcF9leHQ9IloiOyAgY29tcF9sdmw9IiIgICAgICAgICAgIDs7CisgICAgICAgICAgICAqICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogdG9vbCBcYCRjb21wX3ByZycgaXMgbm90IGEga25vd24gY29tcHJlc3Npb24gdG9vbCIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIGNvbXBfc3VmPSIuJGNvbXBfZXh0IgorICAgIGZpCisKKyAgICAjICAgaXRlcmF0ZSBvdmVyIGFsbCBnaXZlbiBsb2dmaWxlIGFyZ3VtZW50cworICAgIGZvciBmaWxlIGluICQqOyBkbworICAgICAgICAjICAgbWFrZSBzdXJlIHRoZSBsb2dmaWxlIGV4aXN0cworICAgICAgICBpZiBbICEgLWYgJGZpbGUgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfZiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGxvZ2ZpbGUgXGAkZmlsZScgbm90IGZvdW5kIiAxPiYyCisgICAgICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGRldGVybWluZSBsb2cgZGlyZWN0b3J5ICh3aGVyZSBvcmlnaW5hbCBsb2dmaWxlIGlzIHBsYWNlZCkKKyAgICAgICAgbGRpcj0iLiIKKyAgICAgICAgY2FzZSAkZmlsZSBpbgorICAgICAgICAgICAgKi8qICkgZXZhbCBgZWNobyAkZmlsZSB8IHNlZCAtZSAncyVeXCguKlwpL1woW14vXSpcKSQlbGRpcj0iXDEiOyBmaWxlPSJcMiI7JSdgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdmUgZGlyZWN0b3J5ICh3aGVyZSByb3RhdGVkIGxvZ2ZpbGVzIGFyZSBwbGFjZWQpCisgICAgICAgIGFkaXI9IiRsZGlyIgorICAgICAgICBpZiBbICIuJG9wdF9hIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGNhc2UgIiRvcHRfYSIgaW4KKyAgICAgICAgICAgICAgICAvKiB8IC4vKiApIGFkaXI9IiRvcHRfYSIgOzsKKyAgICAgICAgICAgICAgICAqICkgYWRpcj0iJGxkaXIvJG9wdF9hIiAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZmkKKworICAgICAgICAjICAgb3B0aW9uYWxseSB0YWtlIGxvZ2ZpbGUgc2l6ZSBpbnRvIGFjY291bnQKKyAgICAgICAgaWYgWyAiLiRvcHRfcyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAjICAgZGV0ZXJtaW5lIHNpemUgb2YgbG9nZmlsZQorICAgICAgICAgICAgc2V0IC0tIGBlbnYgLWkgL2Jpbi9scyAtbCAiJGxkaXIvJGZpbGUiIHwgc2VkIC1lICJzOyRsZGlyLyRmaWxlOzsiIHxcCisgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAnczsgLT4gLiokOzsnIC1lICdzO1sgCV1bIAldKjsgO2cnYAorICAgICAgICAgICAgbj1gZXhwciAkIyAtIDNgCisgICAgICAgICAgICBldmFsICJzaXplPVxgZWNobyBcJHskbn1cYCIKKworICAgICAgICAgICAgIyAgIHNraXAgbG9nZmlsZSBpZiBzaXplIGlzIHN0aWxsIHRvbyBzbWFsbAorICAgICAgICAgICAgaWYgWyAkc2l6ZSAtbHQgJG9wdF9zIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICIkbGRpci8kZmlsZTogc3RpbGwgdG9vIHNtYWxsIGluIHNpemUgLS0gc2tpcHBpbmciCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICAjICAgdmVyYm9zaXR5CisgICAgICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJyb3RhdGluZyAkbGRpci8kZmlsZSIKKyAgICAgICAgZmkKKworICAgICAgICAjICAgZXhlY3V0ZSBwcm9sb2cKKyAgICAgICAgaWYgWyAiLiRvcHRfUCIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRvcHRfUCIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBldmFsICRvcHRfUAorICAgICAgICAgICAgWyAkPyAtbmUgMCBdICYmIHNodG9vbF9leGl0ICQ/CisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGtpY2sgYXdheSBvdXQtcm90YXRlZCBsb2dmaWxlCisgICAgICAgIG49YGV4cHIgJG9wdF9uIC0gMWAKKyAgICAgICAgbj1gZWNobyBkdW1teSB8IGF3ayAieyBwcmludGYoXCIlMCR7b3B0X3B9ZFwiLCBuKTsgfSIgbj0kbmAKKyAgICAgICAgaWYgWyAtZiAiJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIgXTsgdGhlbgorICAgICAgICAgICAgIyAgIG9wdGlvbmFsbHkgbWlncmF0ZSBhd2F5IHRoZSBvdXQtcm90YXRlZCBsb2dmaWxlCisgICAgICAgICAgICBpZiBbICIuJG9wdF9NIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICIkb3B0X00gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGV2YWwgIiRvcHRfTSAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgorICAgICAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICMgICBmaW5hbGx5IGdldCByaWQgb2YgdGhlIG91dC1yb3RhdGVkIGxvZ2ZpbGUKKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIHJvdGF0ZSBhbHJlYWR5IGFyY2hpdmVkIGxvZ2ZpbGVzCisgICAgICAgIHdoaWxlIFsgJG4gLWd0IDAgXTsgZG8KKyAgICAgICAgICAgIG09JG4KKyAgICAgICAgICAgIG49YGV4cHIgJG4gLSAxYAorICAgICAgICAgICAgbj1gZWNobyBkdW1teSB8IGF3ayAieyBwcmludGYoXCIlMCR7b3B0X3B9ZFwiLCBuKTsgfSIgbj0kbmAKKyAgICAgICAgICAgIGlmIFsgJG4gLWVxIDAgXSAmJiBbICIuJG9wdF9kIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICMgICBzcGVjaWFsIGNhc2U6IGZpcnN0IHJvdGF0aW9uIGZpbGUgdW5kZXIgZGVsYXllZCBjb21wcmVzc2lvbiBzaXR1YXRpb24KKyAgICAgICAgICAgICAgICBpZiBbICEgLWYgIiR7YWRpcn0vJHtmaWxlfS4ke259IiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICMgICBjb21wcmVzcyBmaWxlIChkZWxheWVkKQorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X2IiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJtdiAke2FkaXJ9LyR7ZmlsZX0uJHtufSAke2FkaXJ9LyR7ZmlsZX0uJHttfSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgbXYgJHthZGlyfS8ke2ZpbGV9LiR7bn0gJHthZGlyfS8ke2ZpbGV9LiR7bX0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIigke2NvbXBfcHJnfSAke2NvbXBfbHZsfSA8JHthZGlyfS8ke2ZpbGV9LiR7bX0gPiR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn07IHJtIC1mICR7YWRpcn0vJHtmaWxlfS4ke219KSAmIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAoICR7Y29tcF9wcmd9ICR7Y29tcF9sdmx9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPCR7YWRpcn0vJHtmaWxlfS4ke219IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgPiR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICAgICAgICBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHttfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgICAgICAgICApIDwvZGV2L251bGwgPi9kZXYvbnVsbCAyPiYxICYKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIke2NvbXBfcHJnfSAke2NvbXBfbHZsfSA8JHthZGlyfS8ke2ZpbGV9LiR7bn0gPiR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0iCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICR7Y29tcF9wcmd9ICR7Y29tcF9sdmx9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgIDwke2FkaXJ9LyR7ZmlsZX0uJHtufSBcCisgICAgICAgICAgICAgICAgICAgICAgICA+JHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAicm0gLWYgJHthZGlyfS8ke2ZpbGV9LiR7bn0iCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIHJtIC1mICR7YWRpcn0vJHtmaWxlfS4ke259IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgICAgICMgICBmaXggZmlsZSBhdHRyaWJ1dGVzCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfbyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG93biAkb3B0X28gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgY2hvd24gJG9wdF9vICR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X2ciICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hncnAgJG9wdF9nICR7YWRpcn0vJHtmaWxlfS4ke219JHtjb21wX3N1Zn0iCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGNoZ3JwICRvcHRfZyAke2FkaXJ9LyR7ZmlsZX0uJHttfSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAke2FkaXJ9LyR7ZmlsZX0uJHttfSR7Y29tcF9zdWZ9IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBjaG1vZCAkb3B0X20gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgIyAgIHN0YW5kYXJkIGNhc2U6IHNlY29uZCBhbmQgZm9sbG93aW5nIHJvdGF0aW9uIGZpbGUKKyAgICAgICAgICAgICAgICBpZiBbICEgLWYgIiR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0iIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIm12ICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIG12ICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gJHthZGlyfS8ke2ZpbGV9LiR7bX0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorCisgICAgICAgICMgICBtb3ZlIGF3YXkgY3VycmVudCBsb2dmaWxlCisgICAgICAgIGlmIFsgIi4kb3B0X2MiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAjICAgYXBwcm9hY2g6IGNvcHlbK3RydW5jYXRlXQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJjcCAtcCAke2xkaXJ9LyR7ZmlsZX0gJHthZGlyfS8ke2ZpbGV9LiR7bn0iCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY3AgLXAgJHtsZGlyfS8ke2ZpbGV9ICR7YWRpcn0vJHtmaWxlfS4ke259IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICBpZiBbICIuJG9wdF9yIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiY3AgL2Rldi9udWxsICR7bGRpcn0vJHtmaWxlfSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGNwIC9kZXYvbnVsbCAke2xkaXJ9LyR7ZmlsZX0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICMgICBhcHByb2FjaDogbW92ZVsrdG91Y2hdCisgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIm12ICR7bGRpcn0vJHtmaWxlfSAke2FkaXJ9LyR7ZmlsZX0uJHtufSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBtdiAke2xkaXJ9LyR7ZmlsZX0gJHthZGlyfS8ke2ZpbGV9LiR7bn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3IiID0gLm5vIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJ0b3VjaCAke2xkaXJ9LyR7ZmlsZX0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICB0b3VjaCAke2xkaXJ9LyR7ZmlsZX0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICAjICAgZml4IGZpbGUgYXR0cmlidXRlcworICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X28iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hvd24gJG9wdF9vICR7bGRpcn0vJHtmaWxlfSIKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgY2hvd24gJG9wdF9vICR7bGRpcn0vJHtmaWxlfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJjaGdycCAkb3B0X2cgJHtsZGlyfS8ke2ZpbGV9IgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBjaGdycCAkb3B0X2cgJHtsZGlyfS8ke2ZpbGV9IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF9tIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAke2xkaXJ9LyR7ZmlsZX0iCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGNobW9kICRvcHRfbSAke2xkaXJ9LyR7ZmlsZX0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKworICAgICAgICAjICAgcmVndWxhciBjb21wcmVzc2lvbiBzdGVwCisgICAgICAgIGlmIFsgIi4kb3B0X3oiICE9IC4gXSAmJiBbICIuJG9wdF9kIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAjICAgY29tcHJlc3MgZmlsZQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfYiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICIoJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gPCR7YWRpcn0vJHtmaWxlfS4ke259ID4ke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9OyBybSAtZiAke2FkaXJ9LyR7ZmlsZX0uJHtufSkgJiIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICggJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gXAorICAgICAgICAgICAgICAgICAgICAgIDwke2FkaXJ9LyR7ZmlsZX0uJHtufSBcCisgICAgICAgICAgICAgICAgICAgICAgPiR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgICAgICAgIHJtIC1mICR7YWRpcn0vJHtmaWxlfS4ke259IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICAgICAgKSA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMSAmCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gPCR7YWRpcn0vJHtmaWxlfS4ke259ID4ke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgJHtjb21wX3ByZ30gJHtjb21wX2x2bH0gXAorICAgICAgICAgICAgICAgICAgICA8JHthZGlyfS8ke2ZpbGV9LiR7bn0gXAorICAgICAgICAgICAgICAgICAgICA+JHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gInJtIC1mICR7b3B0X2F9JHtmaWxlfS4ke259IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgcm0gLWYgJHthZGlyfS8ke2ZpbGV9LiR7bn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICMgICBmaXggZmlsZSBhdHRyaWJ1dGVzCisgICAgICAgICAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJjaG93biAkb3B0X28gJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGNob3duICRvcHRfbyAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IHx8IHNodG9vbF9leGl0ICQ/CisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfZyIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiY2hncnAgJG9wdF9nICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0iCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBjaGdycCAkb3B0X2cgJHthZGlyfS8ke2ZpbGV9LiR7bn0ke2NvbXBfc3VmfSB8fCBzaHRvb2xfZXhpdCAkPworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X20iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gImNobW9kICRvcHRfbSAke2FkaXJ9LyR7ZmlsZX0uJHtufSR7Y29tcF9zdWZ9IgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgY2htb2QgJG9wdF9tICR7YWRpcn0vJHtmaWxlfS4ke259JHtjb21wX3N1Zn0gfHwgc2h0b29sX2V4aXQgJD8KKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisKKyAgICAgICAgIyAgIGV4ZWN1dGUgZXBpbG9nCisgICAgICAgIGlmIFsgIi4kb3B0X0UiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIkb3B0X0UiCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgZXZhbCAkb3B0X0UKKyAgICAgICAgICAgIFsgJD8gLW5lIDAgXSAmJiBzaHRvb2xfZXhpdCAkPworICAgICAgICBmaQorICAgIGRvbmUKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCit0YXJiYWxsICkKKyAgICAjIworICAgICMjICB0YXJiYWxsIC0tIFJvbGwgZGlzdHJpYnV0aW9uIHRhcmJhbGxzCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5OS0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIHNyY3M9IiQqIgorCisgICAgIyAgIGNoZWNrIHdoZXRoZXIgdGhlIHRlc3QgY29tbWFuZCBzdXBwb3J0cyB0aGUgLXggb3B0aW9uCisgICAgaWYgWyAteCAvYmluL3NoIF0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgbWludXN4PSIteCIKKyAgICBlbHNlCisgICAgICAgIG1pbnVzeD0iLXIiCisgICAgZmkKKworICAgICMgICBmaW5kIHRoZSB0b29scworICAgIHBhdGhzPSJgZWNobyAkUEFUSCB8XAorICAgICAgICAgICAgc2VkIC1lICdzJS8qOiU6JWcnIC1lICdzJS8qJCUlJyBcCisgICAgICAgICAgICAgICAgLWUgJ3MvXjovLjovJyAtZSAncy86Oi86LjovZycgLWUgJ3MvOiQvOi4vJyBcCisgICAgICAgICAgICAgICAgLWUgJ3MvOi8gL2cnYCIKKyAgICBmb3Igc3BlYyBpbiBmaW5kOmdmaW5kLGZpbmQgdGFyOmd0YXIsdGFyIHRhcmR5OnRhcmR5LHRhcmN1c3Q7IGRvCisgICAgICAgIHByZz1gZWNobyAkc3BlYyB8IHNlZCAtZSAncy86LiokLy8nYAorICAgICAgICB0b29scz1gZWNobyAkc3BlYyB8IHNlZCAtZSAncy9eLio6Ly8nYAorICAgICAgICBldmFsICJwcmdfJHtwcmd9PScnIgorICAgICAgICAjICAgaXRlcmF0ZSBvdmVyIHRvb2xzCisgICAgICAgIGZvciB0b29sIGluIGBlY2hvICR0b29scyB8IHNlZCAtZSAncy8sLyAvZydgOyBkbworICAgICAgICAgICAgIyAgIGl0ZXJhdGUgb3ZlciBwYXRocworICAgICAgICAgICAgZm9yIHBhdGggaW4gJHBhdGhzOyBkbworICAgICAgICAgICAgICAgIGlmIFsgJG1pbnVzeCAiJHBhdGgvJHRvb2wiIF0gJiYgWyAhIC1kICIkcGF0aC8kdG9vbCIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBldmFsICJwcmdfJHtwcmd9PVwiJHBhdGgvJHRvb2xcIiIKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZXZhbCAidmFsPVwkcHJnXyR7cHJnfSIKKyAgICAgICAgICAgIGlmIFsgIi4kdmFsIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgIGRvbmUKKworICAgICMgICBleHBhbmQgc291cmNlIHBhdGhzCisgICAgZXhjbHVkZT0nJworICAgIGZvciBwYXQgaW4gYGVjaG8gJG9wdF9lIHwgc2VkICdzLywvIC9nJ2A7IGRvCisgICAgICAgIGV4Y2x1ZGU9IiRleGNsdWRlIHwgZ3JlcCAtdiAnJHBhdCciCisgICAgZG9uZQorICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGVjaG8gImNwIC9kZXYvbnVsbCAkdG1wZmlsZS5sc3QiIDE+JjIKKyAgICBmaQorICAgIGNwIC9kZXYvbnVsbCAkdG1wZmlsZS5sc3QKKyAgICBmb3Igc3JjIGluICRzcmNzOyBkbworICAgICAgICBpZiBbIC1kICRzcmMgXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIoY2QgJHNyYyAmJiAkcHJnX2ZpbmQgLiAtdHlwZSBmIC1kZXB0aCAtcHJpbnQpIHwgc2VkIC1lICdzOl5cXC5cJDo6JyAtZSAnczpeXFwuLzo6JyB8IGNhdCAkZXhjbHVkZSA+PiR0bXBmaWxlLmxzdCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIChjZCAkc3JjICYmICRwcmdfZmluZCAuIC10eXBlIGYgLWRlcHRoIC1wcmludCkgfFwKKyAgICAgICAgICAgIHNlZCAtZSAnczpeXC4kOjonIC1lICdzOl5cLi86OicgfCBldmFsIGNhdCAkZXhjbHVkZSA+PiR0bXBmaWxlLmxzdAorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gImVjaG8gJHNyYyA+PiR0bXBmaWxlLmxzdCIgMT4mMgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGVjaG8gJHNyYyA+PiR0bXBmaWxlLmxzdAorICAgICAgICBmaQorICAgIGRvbmUKKyAgICBzb3J0IDwkdG1wZmlsZS5sc3QgPiR0bXBmaWxlLmxzdC5uCisgICAgbXYgJHRtcGZpbGUubHN0Lm4gJHRtcGZpbGUubHN0CisgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgY2F0ICR0bXBmaWxlLmxzdCB8IHNlZCAtZSAncy9eLyAgLycgMT4mMgorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIHRhcmJhbGwgZmlsZSBhbmQgZGlyZWN0b3J5IG5hbWUKKyAgICBpZiBbICIuJG9wdF9vIiAhPSAuIF07IHRoZW4KKyAgICAgICAgdGFyZmlsZT0iJG9wdF9vIgorICAgICAgICBpZiBbICIuJG9wdF9kIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHRhcm5hbWU9IiRvcHRfZCIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdGFybmFtZT1gZWNobyAkdGFyZmlsZSB8IHNlZCAtZSAncy9cLnRhci4qJC8vJyAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBpZiBbICIuJG9wdF9kIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHRhcm5hbWU9IiRvcHRfZCIKKyAgICAgICAgZWxpZiBbIC1kICIkZnJvbSIgXTsgdGhlbgorICAgICAgICAgICAgdGFybmFtZT1gZWNobyAkZnJvbSB8IHNlZCAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRhcm5hbWU9Im91dCIKKyAgICAgICAgZmkKKyAgICAgICAgdGFyZmlsZT0iJHRhcm5hbWUudGFyIgorICAgIGZpCisKKyAgICAjICAgcm9sbCB0aGUgdGFyYmFsbAorICAgIGNvbXByZXNzPScnCisgICAgaWYgWyAiLiRvcHRfYyIgIT0gLiBdOyB0aGVuCisgICAgICAgIGNvbXByZXNzPSJ8ICRvcHRfYyIKKyAgICBmaQorICAgIGlmIFsgIi4kcHJnX3RhcmR5IiAhPSAuIF07IHRoZW4KKyAgICAgICAgIyAgIHRoZSBlbGVnYW50IGhhY2tlcnMgd2F5CisgICAgICAgIHRhcmR5X29wdD0iLS1wcmVmaXg9JHRhcm5hbWUiCisgICAgICAgIHRhcmR5X29wdD0iJHRhcmR5X29wdCAtLXVzZXJfbnVtYmVyPTAgLS1ncm91cF9udW1iZXI9MCIgIyBzZWN1cml0eSEKKyAgICAgICAgaWYgWyAiLiRvcHRfdSIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICB0YXJkeV9vcHQ9IiR0YXJkeV9vcHQgLS11c2VyX25hbWU9JG9wdF91IgorICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9nIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIHRhcmR5X29wdD0iJHRhcmR5X29wdCAtLWdyb3VwX25hbWU9JG9wdF9nIgorICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiY2F0ICR0bXBmaWxlLmxzdCB8IHhhcmdzICRwcmdfdGFyIGNmIC0gfCAkcHJnX3RhcmR5ICR0YXJkeV9vcHQgfCBjYXQgJGNvbXByZXNzID4kdG1wZmlsZS5vdXQiIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgY2F0ICR0bXBmaWxlLmxzdCB8XAorICAgICAgICB4YXJncyAkcHJnX3RhciBjZiAtIHxcCisgICAgICAgICRwcmdfdGFyZHkgJHRhcmR5X29wdCB8XAorICAgICAgICBldmFsIGNhdCAkY29tcHJlc3MgPiR0bXBmaWxlLm91dAorICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiY3AgJHRtcGZpbGUub3V0ICR0YXJmaWxlIiAxPiYyCisgICAgICAgIGZpCisgICAgICAgIGNwICR0bXBmaWxlLm91dCAkdGFyZmlsZQorICAgIGVsc2UKKyAgICAgICAgIyAgdGhlIHBvcnRhYmxlIHN0YW5kYXJkIHdheQorICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgZWNobyAibWtkaXIgJHRtcGRpci8kdGFybmFtZSIgMT4mMgorICAgICAgICBmaQorICAgICAgICBta2RpciAkdG1wZGlyLyR0YXJuYW1lIHx8IHNodG9vbF9leGl0IDEKKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImNhdCAkdG1wZmlsZS5sc3QgfCB4YXJncyAkcHJnX3RhciBjZiAtIHwgKGNkICR0bXBkaXIvJHRhcm5hbWUgJiYgJHByZ190YXIgeGYgLSkiIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgY2F0ICR0bXBmaWxlLmxzdCB8XAorICAgICAgICB4YXJncyAkcHJnX3RhciBjZiAtIHxcCisgICAgICAgIChjZCAkdG1wZGlyLyR0YXJuYW1lICYmICRwcmdfdGFyIHhmIC0pCisgICAgICAgIGlmIFsgIi4kb3B0X3UiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJjaG93biAtUiAkb3B0X3UgJHRtcGRpci8kdGFybmFtZSA+L2Rldi9udWxsIDI+JjEiIDI+JjEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjaG93biAtUiAkb3B0X3UgJHRtcGRpci8kdGFybmFtZSA+L2Rldi9udWxsIDI+JjEgfHxcCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4Oldhcm5pbmc6IGNhbm5vdCBzZXQgdXNlciBuYW1lIFxgJG9wdF91JyAod291bGQgcmVxdWlyZSByb290IHByaXZpbGVnZXMpIgorICAgICAgICBmaQorICAgICAgICBpZiBbICIuJG9wdF9nIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgZWNobyAiY2hncnAgLVIgJG9wdF9nICR0bXBkaXIvJHRhcm5hbWUgPi9kZXYvbnVsbCAyPiYxIiAyPiYxCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgY2hncnAgLVIgJG9wdF9nICR0bXBkaXIvJHRhcm5hbWUgPi9kZXYvbnVsbCAyPiYxIHx8XAorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpXYXJuaW5nOiBjYW5ub3Qgc2V0IGdyb3VwIG5hbWUgXGAkb3B0X2cnICh3b3VsZCByZXF1aXJlIHJvb3QgcHJpdmlsZWdlcykiCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIoY2QgJHRtcGRpciAmJiAkcHJnX2ZpbmQgJHRhcm5hbWUgLXR5cGUgZiAtZGVwdGggLXByaW50IHwgc29ydCB8IHhhcmdzICRwcmdfdGFyIGNmIC0pIHwgY2F0ICRjb21wcmVzcyA+JHRtcGZpbGUub3V0IiAxPiYyCisgICAgICAgIGZpCisgICAgICAgIChjZCAkdG1wZGlyICYmICRwcmdfZmluZCAkdGFybmFtZSAtdHlwZSBmIC1kZXB0aCAtcHJpbnQgfCBzb3J0IHwgeGFyZ3MgJHByZ190YXIgY2YgLSkgfFwKKyAgICAgICAgZXZhbCBjYXQgJGNvbXByZXNzID4kdG1wZmlsZS5vdXQKKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gImNwICR0bXBmaWxlLm91dCAkdGFyZmlsZSIgMT4mMgorICAgICAgICBmaQorICAgICAgICBjcCAkdG1wZmlsZS5vdXQgJHRhcmZpbGUKKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gInJtIC1yZiAkdG1wZGlyLyR0YXJuYW1lIiAxPiYyCisgICAgICAgIGZpCisgICAgICAgIHJtIC1yZiAkdG1wZGlyLyR0YXJuYW1lCisgICAgZmkKKworICAgICMgICBjbGVhbnVwCisgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgZWNobyAicm0gLWYgJHRtcGZpbGUubHN0ICR0bXBmaWxlLm91dCIgMT4mMgorICAgIGZpCisgICAgcm0gLWYgJHRtcGZpbGUubHN0ICR0bXBmaWxlLm91dAorCisgICAgc2h0b29sX2V4aXQgMAorICAgIDs7CisKK3N1YnN0ICkKKyAgICAjIworICAgICMjICBzdWJzdCAtLSBBcHBseSBzZWQoMSkgc3Vic3RpdHV0aW9uIG9wZXJhdGlvbnMKKyAgICAjIyAgQ29weXJpZ2h0IChjKSAyMDAxLTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KKyAgICAjIworCisgICAgIyAgIHJlbWVtYmVyIG9wdGlvbmFsIGxpc3Qgb2YgZmlsZShzKQorICAgIGZpbGVzPSIkKiIKKyAgICBmaWxlc19udW09IiQjIgorCisgICAgIyAgIHBhcmFtZXRlciBjb25zaXN0ZW5jeSBjaGVjaworICAgIGlmIFsgJCMgLWVxIDAgXSAmJiBbICIuJG9wdF9iIiAhPSAuIF07IHRoZW4KKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogb3B0aW9uIC1iIGNhbm5vdCBiZSBhcHBsaWVkIHRvIHN0ZGluIiAxPiYyCisgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICBmaQorICAgIGlmIFsgJCMgLWVxIDAgXSAmJiBbICIuJG9wdF9zIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBvcHRpb24gLXMgY2Fubm90IGJlIGFwcGxpZWQgdG8gc3RkaW4iIDE+JjIKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisKKyAgICAjICAgYnVpbGQgdW5kZXJseWluZyBzZWQoMSkgY29tbWFuZAorICAgIHNlZGNtZD0nc2VkJworICAgIGlmIFsgIi4kb3B0X2UiICE9IC4gXTsgdGhlbgorICAgICAgICBPSUZTPSIkSUZTIjsgSUZTPSIkQVNDX05MIjsgc2V0IC0tICRvcHRfZTsgSUZTPSIkT0lGUyIKKyAgICAgICAgZm9yIGUKKyAgICAgICAgZG8KKyAgICAgICAgICAgIHNlZGNtZD0iJHNlZGNtZCAtZSAnJGUnIgorICAgICAgICBkb25lCisgICAgZWxpZiBbICIuJG9wdF9mIiAhPSAuIF07IHRoZW4KKyAgICAgICAgaWYgWyAhIC1mICRvcHRfZiBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBjb21tYW5kIGZpbGUgXGAkb3B0X2YnIG5vdCBmb3VuZCBvciBub3QgYSByZWd1bGFyIGZpbGUiIDE+JjIKKyAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgZmkKKyAgICAgICAgc2VkY21kPSIkc2VkY21kIC1mICckb3B0X2YnIgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogZWl0aGVyIC1lIG9wdGlvbihzKSBvciAtZiBvcHRpb24gcmVxdWlyZWQiIDE+JjIKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIGV4dGVuc2lvbiBmb3Igb3JpZ2luYWwgZmlsZQorICAgIG9yaWc9Ii5vcmlnIgorICAgIGlmIFsgIi4kb3B0X2IiICE9IC4gXTsgdGhlbgorICAgICAgICBvcmlnPSIkb3B0X2IiCisgICAgZmkKKworICAgICMgICBhcHBseSBzZWQoMSkgb3BlcmF0aW9uKHMpCisgICAgaWYgWyAiLiRmaWxlcyIgIT0gLiBdOyB0aGVuCisgICAgICAgICMgICBhcHBseSBvcGVyYXRpb24ocykgdG8gZmlsZXMKKyAgICAgICAgc3Vic3Rkb25lPW5vCisgICAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKyAgICAgICAgICAgIHRlc3QgIi4kZmlsZSIgPSAuICYmIGNvbnRpbnVlCisgICAgICAgICAgICBpZiBbICEgLWYgJGZpbGUgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogZmlsZSBcYCRmaWxlJyBub3QgZm91bmQgb3Igbm90IGEgcmVndWxhciBmaWxlIiAxPiYyCisgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICMgICBoYW5kbGUgaW50ZXJhY3RpdmUgbW9kZQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfaSIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBldmFsICIkc2VkY21kIDwkZmlsZSA+JGZpbGUubmV3IgorICAgICAgICAgICAgICAgIHNraXA9bm8KKyAgICAgICAgICAgICAgICBpZiBjbXAgJGZpbGUgJGZpbGUubmV3ID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBybSAtZiAkZmlsZS5uZXcKKyAgICAgICAgICAgICAgICAgICAgc2tpcD15ZXMKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIChkaWZmIC1VMSAkZmlsZSAkZmlsZS5uZXcgPiR0bXBmaWxlKSAyPi9kZXYvbnVsbAorICAgICAgICAgICAgICAgICAgICBpZiBbICIuYGNhdCAkdG1wZmlsZWAiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAoZGlmZiAtQzEgJGZpbGUgJGZpbGUubmV3ID4kdG1wZmlsZSkgMj4vZGV2L251bGwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi5gY2F0ICR0bXBmaWxlYCIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4Oldhcm5pbmc6IHVuYWJsZSB0byBzaG93IGRpZmZlcmVuY2UgZm9yIGZpbGUgXGAkZmlsZSciIDE+JjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcCAvZGV2L251bGwgJHRtcGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIHJtIC1mICRmaWxlLm5ldworICAgICAgICAgICAgICAgICAgICBjYXQgJHRtcGZpbGUKKyAgICAgICAgICAgICAgICAgICAgZWNobyBkdW1teSB8IGF3ayAneyBwcmludGYoIiVzIiwgVEVYVCk7IH0nIFRFWFQ9Ij4+PiBBcHBseSBbWS9uXTogIgorICAgICAgICAgICAgICAgICAgICByZWFkIGlucHV0CisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kaW5wdXQiICE9IC5ZIF0gJiZcCisgICAgICAgICAgICAgICAgICAgICAgIFsgIi4kaW5wdXQiICE9IC55IF0gJiZcCisgICAgICAgICAgICAgICAgICAgICAgIFsgIi4kaW5wdXQiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICBza2lwPXllcworICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgWyAiLiRza2lwIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiZmlsZSBcYCRmaWxlJyAtLSBza2lwcGVkIiAxPiYyCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICMgICBhcHBseSBzZWQoMSkgb3BlcmF0aW9uKHMpCisgICAgICAgICAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gInBhdGNoaW5nIFxgJGZpbGUnIiAxPiYyCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJcJCBjcCAtcCAkZmlsZSAkZmlsZSRvcmlnIgorICAgICAgICAgICAgICAgIGVjaG8gIlwkIGNobW9kIHUrdyAkZmlsZSIKKyAgICAgICAgICAgICAgICBlY2hvICJcJCAkc2VkY21kIDwkZmlsZSRvcmlnID4kZmlsZSIKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBpZiBbICIuJG9wdF9uIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAgICAgY3AgLXAgJGZpbGUgJGZpbGUkb3JpZworICAgICAgICAgICAgICAgIGNobW9kIHUrdyAkZmlsZSA+L2Rldi9udWxsIDI+JjEgfHwgdHJ1ZQorICAgICAgICAgICAgICAgIGV2YWwgIiRzZWRjbWQgPCRmaWxlJG9yaWcgPiRmaWxlIgorICAgICAgICAgICAgZmkKKworICAgICAgICAgICAgIyAgIG9wdGlvbmFsbHkgZml4IHRpbWVzdGFtcAorICAgICAgICAgICAgaWYgWyAiLiRvcHRfcyIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICJcJCB0b3VjaCAtciAkZmlsZSRvcmlnICRmaWxlIgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfbiIgPSAubm8gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICB0b3VjaCAtciAkZmlsZSRvcmlnICRmaWxlCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisKKyAgICAgICAgICAgICMgICBvcHRpb25hbGx5IGNoZWNrIHdoZXRoZXIgYW55IGNvbnRlbnQgY2hhbmdlIGFjdHVhbGx5IG9jY3VycmVkCisgICAgICAgICAgICBpZiBbICIuJG9wdF9xIiA9IC5ubyBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgY21wICRmaWxlJG9yaWcgJGZpbGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3ciID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4Oldhcm5pbmc6IHN1YnN0aXR1dGlvbiByZXN1bHRlZCBpbiBubyBjb250ZW50IGNoYW5nZSBvbiBmaWxlIFwiJGZpbGVcIiIgMT4mMgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc3Vic3Rkb25lPXllcworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorCisgICAgICAgICAgICAjICAgb3B0aW9uYWxseSByZW1vdmUgcHJlc2VydmVkIG9yaWdpbmFsIGZpbGUKKyAgICAgICAgICAgIGlmIFsgIi4kb3B0X2IiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgZWNobyAiXCQgcm0gLWYgJGZpbGUkb3JpZyIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X24iID0gLm5vIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgcm0gLWYgJGZpbGUkb3JpZworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgICAgIGlmIFsgIi4kb3B0X3EiID0gLm5vIF0gJiYgWyAiLiRvcHRfdyIgPSAubm8gXTsgdGhlbgorICAgICAgICAgICAgaWYgWyAiLiRzdWJzdGRvbmUiID0gLm5vIF07IHRoZW4KKyAgICAgICAgICAgICAgICBpZiBbICIuJGZpbGVzX251bSIgPSAuMSBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6V2FybmluZzogc3Vic3RpdHV0aW9uIHJlc3VsdGVkIGluIG5vIGNvbnRlbnQgY2hhbmdlIG9uIGZpbGUgXCIkZmlsZVwiIiAxPiYyCisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBlY2hvICIkbXNncHJlZml4Oldhcm5pbmc6IHN1YnN0aXR1dGlvbiByZXN1bHRlZCBpbiBubyBjb250ZW50IGNoYW5nZSBvbiBhbnkgZmlsZSIgMT4mMgorICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGVsc2UKKyAgICAgICAgIyAgIGFwcGx5IG9wZXJhdGlvbihzKSB0byBzdGRpbi9zdGRvdXQKKyAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gInBhdGNoaW5nIDxzdGRpbj4iIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gIlwkICRzZWRjbWQiCisgICAgICAgIGZpCisgICAgICAgIGlmIFsgIi4kb3B0X24iID0gLm5vIF07IHRoZW4KKyAgICAgICAgICAgIGV2YWwgIiRzZWRjbWQiCisgICAgICAgIGZpCisgICAgZmkKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCitwbGF0Zm9ybSApCisgICAgIyMKKyAgICAjIyAgcGxhdGZvcm0gLS0gUGxhdGZvcm0gSWRlbnRpZmljYXRpb24gVXRpbGl0eQorICAgICMjICBDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICAjICAgb3B0aW9uIHBvc3QtcHJvY2Vzc2luZworICAgIGlmIFsgIi4kb3B0X3QiICE9IC4gXTsgdGhlbgorICAgICAgICBjYXNlICIkb3B0X3QiIGluCisgICAgICAgICAgICBiaW5hcnkgKQorICAgICAgICAgICAgICAgICMgICBiaW5hcnkgcGFja2FnZSBpZCAoT3BlblBLRyBSUE0pCisgICAgICAgICAgICAgICAgb3B0X0Y9IiU8YXA+LSU8c3A+IgorICAgICAgICAgICAgICAgIG9wdF9MPXllcworICAgICAgICAgICAgICAgIG9wdF9TPSIiCisgICAgICAgICAgICAgICAgb3B0X0M9IisiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGJ1aWxkICkKKyAgICAgICAgICAgICAgICAjICAgYnVpbGQgdGltZSBjaGVja2luZyAoT3BlblBLRyBSUE0pCisgICAgICAgICAgICAgICAgb3B0X0Y9IiU8YXQ+LSU8c3Q+IgorICAgICAgICAgICAgICAgIG9wdF9MPXllcworICAgICAgICAgICAgICAgIG9wdF9TPSIiCisgICAgICAgICAgICAgICAgb3B0X0M9IisiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGdudSApCisgICAgICAgICAgICAgICAgIyAgIEdOVSBjb25maWcuZ3Vlc3Mgc3R5bGUgPGFyY2g+LTx2ZW5kb3I+LTxvcz48b3N2ZXJzaW9uPgorICAgICAgICAgICAgICAgIG9wdF9GPSIlPGF0Pi11bmtub3duLSU8c3Q+IgorICAgICAgICAgICAgICAgIG9wdF9MPXllcworICAgICAgICAgICAgICAgIG9wdF9TPSIiCisgICAgICAgICAgICAgICAgb3B0X0M9IisiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIHdlYiApCisgICAgICAgICAgICAgICAgIyAgIG5vbi13aGl0ZXNwYWNlIEhUVFAgU2VydmVyLWhlYWRlciBpZAorICAgICAgICAgICAgICAgIG9wdF9GPSIlPHNwPi0lPGFwPiIKKyAgICAgICAgICAgICAgICBvcHRfUz0iLyIKKyAgICAgICAgICAgICAgICBvcHRfQz0iKyIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgc3VtbWFyeSkKKyAgICAgICAgICAgICAgICAjICAgaHVtYW4gcmVhZGFibGUgdmVyYm9zZSBzdW1tYXJ5IGluZm9ybWF0aW9uCisgICAgICAgICAgICAgICAgb3B0X0Y9IkNsYXNzOiAgICAgICVbc2NdICglW2FjXSlcXG5Qcm9kdWN0OiAgICAlW3NwXSAoJVthcF0pXFxuVGVjaG5vbG9neTogJVtzdF0gKCVbYXRdKSIKKyAgICAgICAgICAgICAgICBvcHRfUz0iICIKKyAgICAgICAgICAgICAgICBvcHRfQz0iLyIKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgYWxsLWluLW9uZSApCisgICAgICAgICAgICAgICAgIyAgIGZ1bGwtdGFibGUgYWxsLWluLW9uZSBpbmZvcm1hdGlvbgorICAgICAgICAgICAgICAgIG9wdF9GPSIiCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBhcmNoaXRlY3R1cmUgY2xhc3M6ICAgICAgJTxhYz5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBhcmNoaXRlY3R1cmUgY2xhc3M6ICAgICAgJXthY31cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgY2xhc3M6ICAgICAgJVthY11cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBhcmNoaXRlY3R1cmUgcHJvZHVjdDogICAgJTxhcD5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBhcmNoaXRlY3R1cmUgcHJvZHVjdDogICAgJXthcH1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgcHJvZHVjdDogICAgJVthcF1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBhcmNoaXRlY3R1cmUgdGVjaG5vbG9neTogJTxhdD5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBhcmNoaXRlY3R1cmUgdGVjaG5vbG9neTogJXthdH1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBhcmNoaXRlY3R1cmUgdGVjaG5vbG9neTogJVthdF1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBzeXN0ZW0gY2xhc3M6ICAgICAgICAgICAgJTxzYz5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBzeXN0ZW0gY2xhc3M6ICAgICAgICAgICAgJXtzY31cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gY2xhc3M6ICAgICAgICAgICAgJVtzY11cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBzeXN0ZW0gcHJvZHVjdDogICAgICAgICAgJTxzcD5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBzeXN0ZW0gcHJvZHVjdDogICAgICAgICAgJXtzcH1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gcHJvZHVjdDogICAgICAgICAgJVtzcF1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9Y29uY2lzZSBzeXN0ZW0gdGVjaG5vbG9neTogICAgICAgJTxzdD5cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9cmVndWxhciBzeXN0ZW0gdGVjaG5vbG9neTogICAgICAgJXtzdH1cXG4iCisgICAgICAgICAgICAgICAgb3B0X0Y9IiR7b3B0X0Z9dmVyYm9zZSBzeXN0ZW0gdGVjaG5vbG9neTogICAgICAgJVtzdF0iCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICogKQorICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGludmFsaWQgdHlwZSBcYCRvcHRfdCciIDE+JjIKKyAgICAgICAgICAgICAgICBleGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZmkKKworICAgICMgICBhc3NlbWJsZSBpbml0aWFsIHBsYXRmb3JtIGluZm9ybWF0aW9uCisgICAgVU5BTUVfTUFDSElORT1gKHVuYW1lIC1tKSAyPi9kZXYvbnVsbGAgfHxcCisgICAgVU5BTUVfTUFDSElORT1gKHVuYW1lIC1wKSAyPi9kZXYvbnVsbGAgfHxcCisgICAgVU5BTUVfTUFDSElORT0ndW5rbm93bicKKyAgICBVTkFNRV9TWVNURU09YCh1bmFtZSAtcykgMj4vZGV2L251bGxgICB8fFwKKyAgICBVTkFNRV9TWVNURU09J3Vua25vd24nCisgICAgVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC1yKSAyPi9kZXYvbnVsbGAgfHxcCisgICAgVU5BTUVfUkVMRUFTRT1gKHVuYW1lIC12KSAyPi9kZXYvbnVsbGAgfHxcCisgICAgVU5BTUVfUkVMRUFTRT0ndW5rbm93bicKKworICAgIFVOQU1FPSIke1VOQU1FX01BQ0hJTkV9OiR7VU5BTUVfU1lTVEVNfToke1VOQU1FX1JFTEVBU0V9IgorCisgICAgQUM9IiI7IEFQPSIiOyBBVD0iIgorICAgIFNDPSIiOyBTUD0iIjsgU1Q9IiIKKworICAgICMgICAgZGlzcGF0Y2ggaW50byBwbGF0Zm9ybSBzcGVjaWZpYyBzZWN0aW9ucworICAgIGNhc2UgIiR7VU5BTUV9IiBpbgorCisgICAgICAgICMgICBGcmVlQlNECisgICAgICAgICo6RnJlZUJTRDoqICkKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICBBQz0iJHtVTkFNRV9NQUNISU5FfSIKKyAgICAgICAgICAgIGNhc2UgIiR7QUN9IiBpbgorICAgICAgICAgICAgICAgIGkzODYgKSBBQz0iaVg4NiIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFQPSIke0FDfSIKKyAgICAgICAgICAgIEFUPSIke0FQfSIKKyAgICAgICAgICAgIGlmIFsgIi4ke0FUfSIgPSAiLmlYODYiIF07IHRoZW4KKyAgICAgICAgICAgICAgICBjYXNlICJgKC9zYmluL3N5c2N0bCAtbiBody5tb2RlbCkgMj4mMWAiIGluCisgICAgICAgICAgICAgICAgICAgICoiWGVvbiIqIHwgKiJQZW50aXVtIFBybyIqIHwgKiJDeXJpeCA2eDg2TVgiKiB8ICoiUGVudGl1bSBJSSIqIHwgKiJQZW50aXVtIElJSSIqIHwgKiJQZW50aXVtIDQiKiB8ICoiQ2VsZXJvbiIqICkgQVQ9Imk2ODYiIDs7CisgICAgICAgICAgICAgICAgICAgICoiUGVudGl1bSIqICkgQVQ9Imk1ODYiIDs7ICoiaTQ4NltTRF1YIiogfCAqIkN5cml4IDQ4NiIqIHwgKiJDeXJpeCBbNTZdeDg2IiogfCAqIkJsdWUgTGlnaHRuaW5nIiB8ICoiQ3lyaXggNDg2Uy9EWCIgKSBBVD0iaTQ4NiIgOzsKKyAgICAgICAgICAgICAgICAgICAgKiJpMzg2W1NEXVgiKiB8ICoiTmV4R2VuIDU4NiIqICkgQVQ9ImkzODYiIDs7CisgICAgICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCisgICAgICAgICAgICByPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8XAorICAgICAgICAgICAgICAgc2VkIC1lICdzO1soKV07OycgLWUgJ3MvXCgtLipcKSQvW1wxXS8nYAorICAgICAgICAgICAgU1Q9IkZyZWVCU0QgJHtyfSIKKyAgICAgICAgICAgIFNQPSIke1NUfSIKKyAgICAgICAgICAgIGNhc2UgIiR7cn0iIGluCisgICAgICAgICAgICAgICAgMS4qICkgU0M9IjQuM0JTRCIgOzsKKyAgICAgICAgICAgICAgICAqICAgKSBTQz0iNC40QlNEIiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKworICAgICAgICAjICAgTmV0QlNECisgICAgICAgICo6TmV0QlNEOiogKQorICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgorICAgICAgICAgICAgQVA9IiR7QVR9IgorICAgICAgICAgICAgY2FzZSAiJHtBUH0iIGluCisgICAgICAgICAgICAgICAgaVszLTZdODYgKSBBUD0iaVg4NiIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDPSIke0FQfSIKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCisgICAgICAgICAgICByPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtZSAncy9cKFstX10uKlwpJC9bXDFdLydgCisgICAgICAgICAgICBTVD0iTmV0QlNEICR7cn0iCisgICAgICAgICAgICBTUD0iJHtTVH0iCisgICAgICAgICAgICBjYXNlICIke3J9IiBpbgorICAgICAgICAgICAgICAgIDAuKiApIFNDPSI0LjNCU0QiIDs7CisgICAgICAgICAgICAgICAgKiAgICkgU0M9IjQuNEJTRCIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIE9wZW5CU0QKKyAgICAgICAgKjpPcGVuQlNEOiogKQorICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgorICAgICAgICAgICAgQVA9IiR7QVR9IgorICAgICAgICAgICAgY2FzZSAiJHtBUH0iIGluCisgICAgICAgICAgICAgICAgaVszLTZdODYgKSBBUD0iaVg4NiIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDPSIke0FQfSIKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCisgICAgICAgICAgICByPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8IHNlZCAtZSAncy9cKFstX10uKlwpJC9bXDFdLydgCisgICAgICAgICAgICBTVD0iT3BlbkJTRCAke3J9IgorICAgICAgICAgICAgU1A9IiR7U1R9IgorICAgICAgICAgICAgU0M9IjQuNEJTRCIKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIEdOVS9MaW51eAorICAgICAgICAqOkxpbnV4OiogKQorICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgorICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCisgICAgICAgICAgICAgICBpYTY0ICAgICApIEFUPSJJQTY0IiAgIDs7CisgICAgICAgICAgICAgICB4ODZfNjQgICApIEFUPSdBTUQ2NCcgIDs7CisgICAgICAgICAgICAgICBwYXJpc2MgICApIEFUPSJIUFBBMzIiIDs7CisgICAgICAgICAgICAgICBwYXJpc2M2NCApIEFUPSJIUFBBNjQiIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBBUD0iJHtBVH0iCisgICAgICAgICAgICBjYXNlICIke0FQfSIgaW4KKyAgICAgICAgICAgICAgIGlbMy02XTg2ICkgQVA9J2lYODYnIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBBQz0iJHtBUH0iCisgICAgICAgICAgICAjICAgZGV0ZXJtaW5lIHN5c3RlbQorICAgICAgICAgICAgdl9rZXJuPWBlY2hvICIke1VOQU1FX1JFTEVBU0V9IiB8XAorICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eXChbMC05XVswLTldKlwuWzAtOV1bMC05XSpcKS4qL1wxLydgCisgICAgICAgICAgICB2X2xpYmM9YChzdHJpbmdzIC9saWIvbGliYy5zby4qIHwgZ3JlcCAnXkdMSUJDXycgfCBzZWQgLWUgJ3MvXkdMSUJDXy8vJyB8XAorICAgICAgICAgICAgICAgIGVudiAtaSBzb3J0IC1uIHwgc2VkIC1uIC1lICckcCcgfCBzZWQgLWUgJ3MvXlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKi9cMS8nKSAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgIFNUPSJHTlUvPExpbnV4ID4ke3ZfbGliY30vPCR7dl9rZXJufT4iCisgICAgICAgICAgICBpZiBbIC1mIC9ldGMvbHNiLXJlbGVhc2UgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV2YWwgYCggLiAvZXRjL2xzYi1yZWxlYXNlCisgICAgICAgICAgICAgICAgICAgIGVjaG8gIlNDPVwiTFNCJHtMU0JfVkVSU0lPTn1cIiIKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiR7RElTVFJJQl9JRH0iICE9IC4gLWEgIi4ke0RJU1RSSUJfUkVMRUFTRX0iICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiU1A9XCIke0RJU1RSSUJfSUR9ICR7RElTVFJJQl9SRUxFQVNFfVwiIgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICkgMj4vZGV2L251bGxgCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAiLiRTUCIgPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICBmb3IgdGFnZmlsZSBpbiB4IFwKKyAgICAgICAgICAgICAgICAgICAgYGNkIC9ldGMgJiYgXAorICAgICAgICAgICAgICAgICAgICAvYmluL2xzICpbXy1dcmVsZWFzZSAqW18tXXZlcnNpb24gMj4vZGV2L251bGwgfCBlbnYgLWkgc29ydCB8IFwKKyAgICAgICAgICAgICAgICAgICAgc2VkIC1lICcvXnJlZGhhdC1yZWxlYXNlJC9kJyAtZSAnL15sc2ItcmVsZWFzZSQvZCc7IFwKKyAgICAgICAgICAgICAgICAgICAgZWNobyByZWRoYXQtcmVsZWFzZSBsc2ItcmVsZWFzZWAKKyAgICAgICAgICAgICAgICBkbworICAgICAgICAgICAgICAgICAgICBbICIuJHt0YWdmaWxlfSIgPSAueCBdICYmIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIFsgISAtZiAiL2V0Yy8ke3RhZ2ZpbGV9IiBdICYmIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgIG49YGVjaG8gJHt0YWdmaWxlfSB8IHNlZCAtZSAncy9bXy1dcmVsZWFzZSQvLycgLWUgJ3MvW18tXXZlcnNpb24kLy8nYAorICAgICAgICAgICAgICAgICAgICB2PWAoZ3JlcCBWRVJTSU9OIC9ldGMvJHt0YWdmaWxlfTsgY2F0IC9ldGMvJHt0YWdmaWxlfSkgfCBncmVwICdbMC05XScgfCBzZWQgLWUgJ3EnIHxcCisgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eLyMvJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXC5bMC05XVswLTldKlwuWzAtOV1bMC05XSpcKS4qJC9cMS8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzL14jW14wLTldKlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKiQvXDEvJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eI1teMC05XSpcKFswLTldWzAtOV0qXCkuKiQvXDEvJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncy9eIy4qJC8vJ2AKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiYHV0aWxfbG93ZXIgJHtufWAiIGluCisgICAgICAgICAgICAgICAgICAgICAgICByZWRoYXQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIFsgIi5gZ3JlcCAnUmVkIEhhdCBFbnRlcnByaXNlIExpbnV4JyAvZXRjLyR7dGFnZmlsZX1gIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbj0iPFI+ZWQgPEg+YXQgPEU+bnRlcnByaXNlIDxMPmludXgiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuPSI8Uj5lZCA8SD5hdCA8TD5pbnV4IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYmlhbiAgICAgICAgICAgICApIG49IkRlYmlhblsgR05VL0xpbnV4XSIgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICB1YnVudHUgICAgICAgICAgICAgKSBuPSJVYnVudHVbIEdOVS9MaW51eF0iICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZmVkb3JhICAgICAgICAgICAgICkgbj0iPEZlZG9yYT4gQ29yZVsgR05VL0xpbnV4XSIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1c2UgICAgICAgICAgICAgICApIG49IlN1U0VbIExpbnV4XSIgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICBtYW5kcmFrZSp8bWFuZHJpdmEgKSBuPSJNYW5kcml2YVsgTGludXhdIiAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgZ2VudG9vICAgICAgICAgICAgICkgbj0iR2VudG9vWyBHTlUvTGludXhdIiAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNsYWNrd2FyZSAgICAgICAgICApIG49IlNsYWNrd2FyZVsgTGludXhdIiAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICB0dXJib2xpbnV4ICAgICAgICAgKSBuPSJUdXJib0xpbnV4IiAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICAgICAgdW5pdGVkbGludXggICAgICAgICkgbj0iVW5pdGVkTGludXgiICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICApIG49IiR7bn1bIEdOVS9MaW51eF0iICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJG4iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAqIjwiKiI+IiogKSBTUD0iJG4gPCR2PiIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICApIFNQPSIkbiAkdiIgICA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIFsgIi4kU1AiID0gLiBdICYmIFNQPSIke1NUfSIKKyAgICAgICAgICAgIFsgIi4kU0MiID0gLiBdICYmIFNDPSJMU0IiCisgICAgICAgICAgICA7OworCisgICAgICAgICMgICBTdW4gU29sYXJpcworICAgICAgICAqOlN1bk9TOiogKQorICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgorICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCisgICAgICAgICAgICAgICAgaTg2cGMgKQorICAgICAgICAgICAgICAgICAgICBBVD0iaVg4NiIKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiYCgvYmluL2lzYWluZm8gLWspIDI+JjFgIiBpbgorICAgICAgICAgICAgICAgICAgICAgICAgYW1kNjQgKSBBVD0iQU1ENjQiIDs7CisgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFQPSIke0FUfSIKKyAgICAgICAgICAgIGNhc2UgIiR7QVB9IiBpbgorICAgICAgICAgICAgICAgIHN1bjRbY2RtXSApIEFQPSJTUEFSQzMyIiA7OworICAgICAgICAgICAgICAgIHN1bjRbdXZdICApIEFQPSJTUEFSQzY0IiA7OworICAgICAgICAgICAgICAgIHN1bjQqICAgICApIEFQPSJTUEFSQyIgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUM9IiR7QVB9IgorICAgICAgICAgICAgY2FzZSAiJHtBQ30iIGluCisgICAgICAgICAgICAgICAgU1BBUkMqICkgQUM9IlNQQVJDIiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KKyAgICAgICAgICAgIFNUPSJbU3VuIF1TdW5PUyAke1VOQU1FX1JFTEVBU0V9IgorICAgICAgICAgICAgdj1gZWNobyAiJHtVTkFNRV9SRUxFQVNFfSIgfFwKKyAgICAgICAgICAgICAgIHNlZCAtZSAnczteNFwuOzEuOycgXAorICAgICAgICAgICAgICAgICAgIC1lICdzO141XC5cKFswLTZdXClbXjAtOV0qJDsyLlwxOycgXAorICAgICAgICAgICAgICAgICAgIC1lICdzO141XC5cKFswLTldWzAtOV0qXCkuKjtcMTsnYAorICAgICAgICAgICAgU1A9IltTdW4gXVNvbGFyaXMgJHYiCisgICAgICAgICAgICBjYXNlICIke1VOQU1FX1JFTEVBU0V9IiBpbgorICAgICAgICAgICAgICAgIDQuKiApIFNDPSI0LjNCU0QiIDs7CisgICAgICAgICAgICAgICAgNS4qICkgU0M9IlNWUjQiICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIFNDTyBVbml4V2FyZQorICAgICAgICAqOlVuaXhXYXJlOiogKQorICAgICAgICAgICAgIyAgIGRldGVybWluZSBhcmNoaXRlY3R1cmUKKyAgICAgICAgICAgIEFUPSIke1VOQU1FX01BQ0hJTkV9IgorICAgICAgICAgICAgY2FzZSAiJHtBVH0iIGluCisgICAgICAgICAgICAgICAgaVszLTZdODYgfCBpeDg2YXQgKSBBVD0iaVg4NiIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFQPSIke0FUfSIKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCisgICAgICAgICAgICB2PWAvc2Jpbi91bmFtZSAtdmAKKyAgICAgICAgICAgIFNUPSJbU0NPIF1Vbml4V2FyZSAke3Z9IgorICAgICAgICAgICAgU1A9IiR7U1R9IgorICAgICAgICAgICAgU0M9IlNWUiR7VU5BTUVfUkVMRUFTRX0iCisgICAgICAgICAgICA7OworCisgICAgICAgICMgICBRTlgKKyAgICAgICAgKjpRTlg6KiApCisgICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgQVQ9IiR7VU5BTUVfTUFDSElORX0iCisgICAgICAgICAgICBjYXNlICIke0FUfSIgaW4KKyAgICAgICAgICAgICAgICB4ODZwYyApIEFUPSJpWDg2IiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQVA9IiR7QVR9IgorICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KKyAgICAgICAgICAgIHY9IiR7VU5BTUVfUkVMRUFTRX0iCisgICAgICAgICAgICBTVD0iUU5YWyBOZXV0cmlubyBSVE9TXSAke3Z9IgorICAgICAgICAgICAgdj1gZWNobyAiJHt2fSIgfCBzZWQgLWUgJ3M7XlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKiQ7XDE7J2AKKyAgICAgICAgICAgIFNQPSJRTlhbIE5ldXRyaW5vIFJUT1NdICR7dn0iCisgICAgICAgICAgICBTQz0iUU5YIgorICAgICAgICAgICAgOzsKKworICAgICAgICAjICAgU0dJIElSSVgKKyAgICAgICAgKjpJUklYKjoqICkKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgYXJjaGl0ZWN0dXJlCisgICAgICAgICAgICBBVD0iJHtVTkFNRV9NQUNISU5FfSIKKyAgICAgICAgICAgIEFQPSIke0FUfSIKKyAgICAgICAgICAgIGNhc2UgIiR7QVB9OiR7VU5BTUVfU1lTVEVNfSIgaW4KKyAgICAgICAgICAgICAgICBJUCo6SVJJWDY0ICkgQVA9Ik1JUFM2NCIgOzsKKyAgICAgICAgICAgICAgICBJUCo6KiAgICAgICkgQVA9Ik1JUFMiICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFDPSIke0FQfSIKKyAgICAgICAgICAgICMgICBkZXRlcm1pbmUgc3lzdGVtCisgICAgICAgICAgICB2PWAoL2Jpbi91bmFtZSAtUiB8fCAvYmluL3VuYW1lIC1yKSAyPi9kZXYvbnVsbCB8IHNlZCAtZSAncztbMC05Ll0qIDs7J2AKKyAgICAgICAgICAgIFNUPSJbU0dJIF1JUklYICR7dn0iCisgICAgICAgICAgICB2PSIke1VOQU1FX1JFTEVBU0V9IgorICAgICAgICAgICAgU1A9IltTR0kgXUlSSVggJHt2fSIKKyAgICAgICAgICAgIFNDPSI0LjJCU0QvU1ZSMyIKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIEhQIEhQLVVYCisgICAgICAgICo6SFAtVVg6KiApCisgICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgQVQ9IiR7VU5BTUVfTUFDSElORX0iCisgICAgICAgICAgICBjYXNlICIke0FUfSIgaW4KKyAgICAgICAgICAgICAgICBpYTY0ICkgQVQ9IklBNjQiIDs7CisgICAgICAgICAgICAgICAgOTAwMC9bMzRdPz8gKSBBVD1NNjhLIDs7CisgICAgICAgICAgICAgICAgOTAwMC9bNjc4XVswLTldWzAtOV0pCisgICAgICAgICAgICAgICAgICAgIHNjX2NwdV92ZXJzaW9uPWAvdXNyL2Jpbi9nZXRjb25mIFNDX0NQVV9WRVJTSU9OIDI+L2Rldi9udWxsYAorICAgICAgICAgICAgICAgICAgICBzY19rZXJuZWxfYml0cz1gL3Vzci9iaW4vZ2V0Y29uZiBTQ19LRVJORUxfQklUUyAyPi9kZXYvbnVsbGAKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19jcHVfdmVyc2lvbn0iIGluCisgICAgICAgICAgICAgICAgICAgICAgICA1MjMgKSBBVD0iSFBQQTEuMCIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgIDUyOCApIEFUPSJIUFBBMS4xIiA7OworICAgICAgICAgICAgICAgICAgICAgICAgNTMyICkgQVQ9IkhQUEEyLjAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAiJHtzY19rZXJuZWxfYml0c30iIGluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDMyICkgQVQ9IiR7QVR9biIgOzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNjQgKSBBVD0iJHtBVH13IiA7OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICBBUD0iJHtBVH0iCisgICAgICAgICAgICBjYXNlICIke0FQfSIgaW4KKyAgICAgICAgICAgICAgICBIUFBBKiApIEFQPSJIUFBBIiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgQUM9IiR7QVB9IgorICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KKyAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1lICdzO15bXjAtOV0qOzsnYAorICAgICAgICAgICAgU1Q9IltIUCBdPEhQPi08VVggJHt2fT4iCisgICAgICAgICAgICBTUD0iJHtTVH0iCisgICAgICAgICAgICBjYXNlICIke3Z9IiBpbgorICAgICAgICAgICAgICAgIDEwLiogICApIFNDPSJTVlI0LjIiIDs7CisgICAgICAgICAgICAgICAgWzctOV0qICkgU0M9IlNWUjQiICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIEhQIFRydTY0IChPU0YxKQorICAgICAgICAqOk9TRjE6KiApCisgICAgICAgICAgICAjICAgZGV0ZXJtaW5lIGFyY2hpdGVjdHVyZQorICAgICAgICAgICAgQVA9IiR7VU5BTUVfTUFDSElORX0iCisgICAgICAgICAgICBjYXNlICIke0FQfSIgaW4KKyAgICAgICAgICAgICAgICBhbHBoYSApIEFQPSJBbHBoYSIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGFscGhhX3R5cGU9YCgvdXNyL3NiaW4vcHNyaW5mbyAtdikgMj4vZGV2L251bGwgfFwKKyAgICAgICAgICAgICAgICBzZWQgLW4gLWUgJ3MvXi4qVGhlIGFscGhhIFwoW14gXVteIF0qXCkuKnByb2Nlc3Nvci4qJC9cMS9wJyB8IHNlZCAtZSAncSdgCisgICAgICAgICAgICBBVD0iJHtBUH0ke2FscGhhX3R5cGV9IgorICAgICAgICAgICAgQUM9IiR7QVB9IgorICAgICAgICAgICAgIyAgIGRldGVybWluZSBzeXN0ZW0KKyAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHwgc2VkIC1lICdzO15bVlRYXTs7J2AKKyAgICAgICAgICAgIFNUPSJbSFAgXVRydTY0ICR7dn0iCisgICAgICAgICAgICBTUD0iJHtTVH0iCisgICAgICAgICAgICBTQz0iT1NGMSIKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIElCTSBBSVgKKyAgICAgICAgKjpBSVg6KiApCisgICAgICAgICAgICBjcHVfYXJjaD1yczYwMDAKKyAgICAgICAgICAgIGlmIFsgLXggL3Vzci9zYmluL2xzZGV2IC1hIC14IC91c3Ivc2Jpbi9sc2F0dHIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGNwdV9pZD1gL3Vzci9zYmluL2xzZGV2IC1DIC1jIHByb2Nlc3NvciAtUyBhdmFpbGFibGUgfCBzZWQgMXEgfCBhd2sgJ3sgcHJpbnQgJDEgfSdgCisgICAgICAgICAgICAgICAgaWYgWyAiLmAvdXNyL3NiaW4vbHNhdHRyIC1FbCAke2NwdV9pZH0gfCBncmVwIC1pIHBvd2VycGNgIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgY3B1X2FyY2g9cG93ZXJwYworICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICBlbGlmIFsgLWQgL1FPcGVuU3lzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjICAgSUJNIGk1L09TIChha2EgT1MvNDAwKSB3aXRoIFBBU0UgKFBvcnRhYmxlIEFwcGxpY2F0aW9uIFNvbHV0aW9ucyBFbnZpcm9ubWVudCkKKyAgICAgICAgICAgICAgICBjcHVfYXJjaD1wb3dlcnBjCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgaWYgWyAteCAvdXNyL2Jpbi9vc2xldmVsIF07IHRoZW4KKyAgICAgICAgICAgICAgICBvc19sZXZlbD1gL3Vzci9iaW4vb3NsZXZlbGAKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBvc19sZXZlbD0iYHVuYW1lIC12YC5gdW5hbWUgLXJgIgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIG9zX2xldmVsPWBlY2hvICIke29zX2xldmVsfSIgfFwKKyAgICAgICAgICAgICAgICAgICAgICBzZWQgLWUgJ3M7XlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXClcKFwuWzAtOV1bMC05XSpcKVwoLipcKSQ7PFwxPlwyW1wzXTsnIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7XlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXClcKC4qXCkkOzxcMT5cMjsnYAorICAgICAgICAgICAgQVQ9IiR7Y3B1X2FyY2h9IgorICAgICAgICAgICAgQVA9IiR7QVR9IgorICAgICAgICAgICAgQUM9IiR7QVB9IgorICAgICAgICAgICAgU1Q9IltJQk0gXTxBSVggPiR7b3NfbGV2ZWx9IgorICAgICAgICAgICAgU1A9IiR7U1R9IgorICAgICAgICAgICAgY2FzZSAiJHtvc19sZXZlbH0iIGluCisgICAgICAgICAgICAgICAgWzEyXSogKSBTQz0iU1ZSMiIgOzsKKyAgICAgICAgICAgICAgICAqICAgICApIFNDPSJTVlI0IiA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKworICAgICAgICAjICAgQXBwbGUgTWFjT1MgWCBEYXJ3aW4KKyAgICAgICAgKjpEYXJ3aW46KiApCisgICAgICAgICAgICBBVD1gdW5hbWUgLXBgCisgICAgICAgICAgICBjYXNlICIke0FUfSIgaW4KKyAgICAgICAgICAgICAgICBwb3dlcnBjICkgQVQ9IlBQQyIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIEFQPSIke0FUfSIKKyAgICAgICAgICAgIEFDPSIke0FQfSIKKyAgICAgICAgICAgIGNhc2UgIiR7QUN9IiBpbgorICAgICAgICAgICAgICAgIGk/ODYgKSBBQz0iaVg4NiIgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIFNUPSJbQXBwbGUgXSR7VU5BTUVfU1lTVEVNfSAke1VOQU1FX1JFTEVBU0V9IgorICAgICAgICAgICAgU1A9IiR7U1R9IgorICAgICAgICAgICAgU0M9IjQuNEJTRC9NYWNoMyIKKyAgICAgICAgICAgIDs7CisKKyAgICAgICAgIyAgIFRPRE8gLi4uQUREIFlPVVIgTkVXIFBMQVRGT1JNIENIRUNLIEhFUkUuLi4gVE9ETworICAgICAgICAjICo6WFhYOiogKQorICAgICAgICAjICAgLi4uCisgICAgICAgICMgICA7OworCisgICAgICAgICMgICAuLi5BIFNUSUxMIFVOS05PV04gUExBVEZPUk0uLi4KKyAgICAgICAgKiApCisgICAgICAgICAgICBBVD1gZWNobyAiJHtVTkFNRV9NQUNISU5FfSIgfCBzZWQgLWUgInM7IDske29wdF9DfTtnImAKKyAgICAgICAgICAgIEFQPSIke0FUfSIKKyAgICAgICAgICAgIEFDPSIke0FQfSIKKyAgICAgICAgICAgIHY9YGVjaG8gIiR7VU5BTUVfUkVMRUFTRX0iIHxcCisgICAgICAgICAgICAgICBzZWQgLWUgJ3MvXi8jLycgXAorICAgICAgICAgICAgICAgICAgIC1lICdzL14jW14wLTldKlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXC5bMC05XVswLTldKlwpLiokL1wxLycgXAorICAgICAgICAgICAgICAgICAgIC1lICdzL14jW14wLTldKlwoWzAtOV1bMC05XSpcLlswLTldWzAtOV0qXCkuKiQvXDEvJyBcCisgICAgICAgICAgICAgICAgICAgLWUgJ3MvXiNbXjAtOV0qXChbMC05XVswLTldKlwpLiokL1wxLycgXAorICAgICAgICAgICAgICAgICAgIC1lICdzL14jLiokLz8vJ2AKKyAgICAgICAgICAgIFNUPSIke1VOQU1FX1NZU1RFTX0gJHt2fSIKKyAgICAgICAgICAgIFNQPSIke1NUfSIKKyAgICAgICAgICAgIFNDPSIke1NQfSIKKyAgICAgICAgICAgIDs7CisKKyAgICBlc2FjCisKKyAgICAjICAgcHJvdmlkZSBmYWxsYmFjayB2YWx1ZXMKKyAgICBbICIuJEFUIiA9IC4gXSAmJiBBVD0iJHtBUDotJHtBQ319IgorICAgIFsgIi4kQVAiID0gLiBdICYmIEFQPSIke0FUOi0ke0FDfX0iCisgICAgWyAiLiRBQyIgPSAuIF0gJiYgQUM9IiR7QVA6LSR7QVR9fSIKKyAgICBbICIuJFNUIiA9IC4gXSAmJiBTVD0iJHtTUDotJHtTQ319IgorICAgIFsgIi4kU1AiID0gLiBdICYmIFNQPSIke1NUOi0ke1NDfX0iCisgICAgWyAiLiRTQyIgPSAuIF0gJiYgU0M9IiR7U1A6LSR7U1R9fSIKKworICAgICMgICBzdXBwb3J0IGV4cGxpY2l0IGVuZm9yY2VkIHZlcmJvc2UvY29uY2lzZSBvdXRwdXQKKyAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBvcHRfRj1gZWNobyAiOiRvcHRfRiIgfCBzZWQgLWUgJ3MvXjovLycgLWUgJ3MvJVwoW2FzXVtjcHRdXCkvJVtcMV0vZydgCisgICAgZWxpZiBbICIuJG9wdF9jIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBvcHRfRj1gZWNobyAiOiRvcHRfRiIgfCBzZWQgLWUgJ3MvXjovLycgLWUgJ3MvJVwoW2FzXVtjcHRdXCkvJTxcMT4vZydgCisgICAgZmkKKworICAgICMgICBwcm92aWRlIHZlcmJvc2UgYW5kIGNvbmNpc2UgdmFyaWFudHMKKyAgICBBQ19WPSIiOyBBQ19OPSIiOyBBQ19DPSIiCisgICAgQVBfVj0iIjsgQVBfTj0iIjsgQVBfQz0iIgorICAgIEFUX1Y9IiI7IEFUX049IiI7IEFUX0M9IiIKKyAgICBTQ19WPSIiOyBTQ19OPSIiOyBTQ19DPSIiCisgICAgU1BfVj0iIjsgU1BfTj0iIjsgU1BfQz0iIgorICAgIFNUX1Y9IiI7IFNUX049IiI7IFNUX0M9IiIKKyAgICBmb3IgdmFyX2xjIGluIGF0IGFwIGFjIHN0IHNwIHNjOyBkbworICAgICAgICBjYXNlICIkb3B0X0YiIGluCisgICAgICAgICAgICAqIiVbJHt2YWxfbGN9XSIqIHwgKiIleyR7dmFsX2xjfX0iKiB8ICoiJSR7dmFsX2xjfSIqIHwgKiIlPCR7dmFsX2xjfT4iKiApCisgICAgICAgICAgICB2YXJfdWM9YHV0aWxfdXBwZXIgIiR2YXJfbGMiYAorICAgICAgICAgICAgZXZhbCAidmFsPVwiXCQke3Zhcl91Y31cIiIKKyAgICAgICAgICAgIHZhbF9WPSIiOyB2YWxfTj0iIjsgdmFsX0M9IiIKKyAgICAgICAgICAgIGNhc2UgIiRvcHRfRiIgaW4KKyAgICAgICAgICAgICAgICAqIiVbJHt2YXJfbGN9XSIqICkKKyAgICAgICAgICAgICAgICAgICAgdmFsX1Y9YGVjaG8gIjokdmFsIiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eOi8vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7XFtcKFteXV0qXClcXTtcMTtnJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7PFwoW14+XSpcKT47XDE7ZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOyA7p6c7ZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOy87JSU7ZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzO6enOyR7b3B0X1N9O2ciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczslJTske29wdF9DfTtnImAKKyAgICAgICAgICAgICAgICAgICAgZXZhbCAiJHt2YXJfdWN9X1Y9XCJcJHt2YWxfVn1cIiIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGNhc2UgIiRvcHRfRiIgaW4KKyAgICAgICAgICAgICAgICAqIiV7JHt2YXJfbGN9fSIqIHwgKiIlJHt2YXJfbGN9IiogKQorICAgICAgICAgICAgICAgICAgICB2YWxfTj1gZWNobyAiOiR2YWwiIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VkIC1lICdzL146Ly8nIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAncztcW1woW15dXSpcKVxdOztnJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7PFwoW14+XSpcKT47XDE7ZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOyA7p6c7ZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOy87JSU7ZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzO6enOyR7b3B0X1N9O2ciIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtZSAiczslJTske29wdF9DfTtnImAKKyAgICAgICAgICAgICAgICAgICAgZXZhbCAiJHt2YXJfdWN9X049XCJcJHt2YWxfTn1cIiIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGNhc2UgIiRvcHRfRiIgaW4KKyAgICAgICAgICAgICAgICAqIiU8JHt2YXJfbGN9PiIqICkKKyAgICAgICAgICAgICAgICAgICAgdmFsX0M9YGVjaG8gIjokdmFsIiB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlZCAtZSAncy9eOi8vJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgJ3M7XFtcKFteXV0qXClcXTs7ZycgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICdzO1tePF0qPFwoW14+XSpcKT5bXjxdKjtcMTtnJyBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7IDunpztnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7LzslJTtnIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLWUgInM7p6c7JHtvcHRfU307ZyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC1lICJzOyUlOyR7b3B0X0N9O2ciYAorICAgICAgICAgICAgICAgICAgICBldmFsICIke3Zhcl91Y31fQz1cIlwke3ZhbF9DfVwiIgorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgZXNhYworICAgICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgIGRvbmUKKworICAgICMgICBjcmVhdGUgb3V0cHV0IHN0cmluZworICAgIG91dHB1dD1gZWNobyAiOiRvcHRfRiIgfFwKKyAgICAgICAgICAgIHNlZCAtZSAicy9eOi8vIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JVxcW2FjXFxdOyR7QUNfVn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyV7YWN9OyR7QUNfTn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyVhYzske0FDX059O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslPGFjPjske0FDX0N9O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslXFxbYXBcXF07JHtBUF9WfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JXthcH07JHtBUF9OfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JWFwOyR7QVBfTn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyU8YXA+OyR7QVBfQ307ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyVcXFthdFxcXTske0FUX1Z9O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczsle2F0fTske0FUX059O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslYXQ7JHtBVF9OfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JTxhdD47JHtBVF9DfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JVxcW3NjXFxdOyR7U0NfVn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyV7c2N9OyR7U0NfTn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyVzYzske1NDX059O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslPHNjPjske1NDX0N9O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslXFxbc3BcXF07JHtTUF9WfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JXtzcH07JHtTUF9OfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JXNwOyR7U1BfTn07ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyU8c3A+OyR7U1BfQ307ZyIgXAorICAgICAgICAgICAgICAgIC1lICJzOyVcXFtzdFxcXTske1NUX1Z9O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczsle3N0fTske1NUX059O2ciIFwKKyAgICAgICAgICAgICAgICAtZSAiczslc3Q7JHtTVF9OfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgInM7JTxzdD47JHtTVF9DfTtnIiBcCisgICAgICAgICAgICAgICAgLWUgJ3MvXFxcXG4vXi9nJyB8XAorICAgICAgICAgICAgIHRyICdeJyAnXDAxMidgCisKKyAgICAjICAgc3VwcG9ydCBsb3dlci91cHBlci1jYXNlIG1hcHBpbmcKKyAgICBpZiBbICIuJG9wdF9MIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBvdXRwdXQ9YHV0aWxfbG93ZXIgIiRvdXRwdXQiYAorICAgIGVsaWYgWyAiLiRvcHRfVSIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgb3V0cHV0PWB1dGlsX3VwcGVyICIkb3V0cHV0ImAKKyAgICBmaQorCisgICAgIyAgIGRpc3BsYXkgb3V0cHV0IHN0cmluZworICAgIGlmIFsgIi4kb3B0X24iID0gLnllcyBdOyB0aGVuCisgICAgICAgIGVjaG8gLiB8IGF3ayAneyBwcmludGYoIiVzIiwgb3V0cHV0KTsgfScgb3V0cHV0PSIkb3V0cHV0IgorICAgIGVsc2UKKyAgICAgICAgZWNobyAiJG91dHB1dCIKKyAgICBmaQorCisgICAgc2h0b29sX2V4aXQgMAorICAgIDs7CisKK2FyeCApCisgICAgIyMKKyAgICAjIyAgYXJ4IC0tIEV4dGVuZGVkIGFyY2hpdmUgY29tbWFuZAorICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBhcl9wcmc9IiRvcHRfQyIKKyAgICBhcl9jbWQ9IiQxIjsgc2hpZnQKKyAgICBhcmNoaXZlPSIkMSI7IHNoaWZ0CisgICAgZmlsZXM9IiQqIgorCisgICAgIyAgIHdhbGsgdGhyb3VnaCB0aGUgZmlsZSBsaXN0IGFuZCBleHBhbmQgYXJjaGl2ZXMgbWVtYmVycworICAgIGFyX3RtcGRpcj1gZWNobyAkYXJjaGl2ZSB8IHNlZCAtZSAncztbXi9dKiQ7LmFyeDsnYAorICAgIG5maWxlcz0nJworICAgIGlmIFsgIi4kZmlsZXMiICE9IC4gXTsgdGhlbgorICAgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisgICAgICAgICAgICBpZiBbICEgLWYgJGZpbGUgXTsgdGhlbgorICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IGlucHV0IGZpbGUgbm90IGZvdW5kOiAkZmlsZSIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgIGZpCisgICAgICAgICAgICBjYXNlICRmaWxlIGluCisgICAgICAgICAgICAgICAgKi5hICkKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAhIC1kICRhcl90bXBkaXIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgWyAiLiRvcHRfdCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJta2RpciAkYXJfdG1wZGlyIiAxPiYyCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIgJGFyX3RtcGRpcgorICAgICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICAgICBjYXNlICRhcl90bXBkaXIgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAuYXJ4ICkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbT0iLi4vJGZpbGUiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAgICAgKiApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcj1gZWNobyAkZmlsZSB8IHNlZCAtZSAncztbXi9dKiQ7OycgLWUgJ3M7XCguXCkvJDtcMTsnIC1lICdzO14kOy47J2AKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZT1gZWNobyAkZmlsZSB8IHNlZCAtZSAnczsuKi9cKFteL10qXCkkO1wxOydgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb209ImBjZCAkZGlyOyBwd2RgLyRiYXNlIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIoY2QgJGFyX3RtcGRpciAmJiAkYXJfcHJnIHggJGZyb20pIiAxPiYyCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgIChjZCAkYXJfdG1wZGlyICYmIGV2YWwgJGFyX3ByZyB4ICRmcm9tKQorICAgICAgICAgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiRtc2dwcmVmaXg6RXJyb3I6IG1lbWJlciBleHRyYWN0aW9uIGZhaWxlZCBmb3IgYXJjaGl2ZTogJGZpbGUiIDE+JjIKKyAgICAgICAgICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICAgICAgZm9yIG1lbWJlciBpbiAtIGBldmFsICRhcl9wcmcgdCAkZmlsZSB8IHNlZCAtZSAnL19cLlNZTURFRi9kJ2A7IGRvCisgICAgICAgICAgICAgICAgICAgICAgICBbICIuJG1lbWJlciIgPSAuLSBdICYmIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgICAgICAgICBuZmlsZXM9IiRuZmlsZXMgJGFyX3RtcGRpci8kbWVtYmVyIgorICAgICAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgKiApCisgICAgICAgICAgICAgICAgICAgIG5maWxlcz0iJG5maWxlcyAkZmlsZSIKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgZG9uZQorICAgIGZpCisKKyAgICAjICAgcnVuIHRoZSBmaW5hbCBhcmNoaXZlIGNvbW1hbmQKKyAgICBpZiBbICIuJG9wdF90IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBlY2hvICIkYXJfcHJnICRhcl9jbWQgJGFyY2hpdmUgJG5maWxlcyIgMT4mMgorICAgIGZpCisgICAgZXZhbCAkYXJfcHJnICRhcl9jbWQgJGFyY2hpdmUgJG5maWxlcworICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgorICAgICAgICBlY2hvICIkbXNncHJlZml4OkVycm9yOiBhcmNoaXZlIGNvbW1hbmQgZmFpbGVkIiAxPiYyCisgICAgICAgIHNodG9vbF9leGl0ICQ/CisgICAgZmkKKworICAgICMgICBjbGVhbnVwIGFuZCBkaWUgZ3JhY2VmdWxseQorICAgIGlmIFsgLWQgJGFyX3RtcGRpciBdOyB0aGVuCisgICAgICAgIGlmIFsgIi4kb3B0X3QiID0gLnllcyBdOyB0aGVuCisgICAgICAgICAgICBlY2hvICJybSAtcmYgJGFyX3RtcGRpciIgMT4mMgorICAgICAgICBmaQorICAgICAgICBybSAtcmYgJGFyX3RtcGRpcgorICAgIGZpCisKKyAgICBzaHRvb2xfZXhpdCAwCisgICAgOzsKKworc2xvICkKKyAgICAjIworICAgICMjICBzbG8gLS0gU2VwYXJhdGUgbGlua2VyIG9wdGlvbnMgYnkgbGlicmFyeSBjbGFzcworICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBESUZTPSIkSUZTIgorCisgICAgIyAgIHBhcnNlIG91dCAtTCBhbmQgLWwgb3B0aW9ucyBmcm9tIGNvbW1hbmQgbGluZQorICAgIERJUlM9JycKKyAgICBMSUJTPScnCisgICAgQVJHVj0nJworICAgIG9wdHByZXY9JycKKyAgICBmb3Igb3B0CisgICAgZG8KKyAgICAgICAgIyAgIGNvbmNhdGVuYXRlIHdpdGggcHJldmlvdXMgb3B0aW9uIGlmIGV4aXN0cworICAgICAgICBpZiBbICIuJG9wdHByZXYiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgb3B0PSIke29wdHByZXZ9JHtvcHR9IjsKKyAgICAgICAgICAgIG9wdHByZXY9JycKKyAgICAgICAgZmkKKyAgICAgICAgIyAgIHJlbWVtYmVyIG9wdGlvbnMgZm9yIGFyZyBpZiB1c2VkIHN0YW5kLWFsb25lCisgICAgICAgIGlmIFsgIi4kb3B0IiA9ICIuLUwiIF0gfHwgWyAiLiRvcHQiID0gIi4tbCIgXTsgdGhlbgorICAgICAgICAgICAgb3B0cHJldj0iJG9wdCIKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBmaQorICAgICAgICAjICAgc3BsaXQgYXJndW1lbnQgaW50byBvcHRpb24gcGx1cyBvcHRpb24gYXJndW1lbnQKKyAgICAgICAgYXJnPSJgZWNobyAkb3B0IHwgY3V0IC1jMy1gIgorICAgICAgICBvcHQ9ImBlY2hvICRvcHQgfCBjdXQgLWMxLTJgIgorICAgICAgICAjICAgc3RvcmUgaW50byBjb250YWluZXJzCisgICAgICAgIGNhc2UgJG9wdCBpbgorICAgICAgICAgICAgLUwpIERJUlM9IiRESVJTOiRhcmciIDs7CisgICAgICAgICAgICAtbCkgTElCUz0iJExJQlM6JGFyZyIgOzsKKyAgICAgICAgICAgICAqKSBBUkdWPSIkQVJHViAkb3B0IiA7OworICAgICAgICBlc2FjCisgICAgZG9uZQorCisgICAgIyAgIHNldCBsaW5rZXIgZGVmYXVsdCBkaXJlY3RvcmllcworICAgIERJUlNfREVGQVVMVD0nL2xpYjovdXNyL2xpYicKKyAgICBpZiBbICIuJExEX0xJQlJBUllfUEFUSCIgIT0gLiBdOyB0aGVuCisgICAgICAgIERJUlNfREVGQVVMVD0iJERJUlNfREVGQVVMVDokTERfTElCUkFSWV9QQVRIIgorICAgIGZpCisKKyAgICAjICAgc29ydCBvcHRpb25zIGJ5IGNsYXNzCisgICAgRElSU19PQko9JycKKyAgICBMSUJTX09CSj0nJworICAgIERJUlNfUElDPScnCisgICAgTElCU19QSUM9JycKKyAgICBESVJTX0RTTz0nJworICAgIExJQlNfRFNPPScnCisKKyAgICAjICAgIGZvciBlYWNoIGxpYnJhcnkuLi4KKyAgICBPSUZTPSIkSUZTIjsgSUZTPSc6JworICAgIGZvciBsaWIgaW4gJExJQlM7IGRvCisgICAgICAgIFsgIi4kbGliIiA9IC4gXSAmJiBjb250aW51ZQorCisgICAgICAgIGZvdW5kPSdubycKKyAgICAgICAgZm91bmRfaW5kZWZkaXI9J25vJworICAgICAgICBmb3VuZF90eXBlPScnCisgICAgICAgIGZvdW5kX2Rpcj0nJworCisgICAgICAgICMgICAgZm9yIGVhY2ggZGlyZWN0b3J5Li4uCisgICAgICAgIE9JRlMyPSIkSUZTIjsgSUZTPSI6JERJRlMiCisgICAgICAgIGZvciBkaXIgaW4gJHtESVJTfSBzd2l0Y2gtdG8tZGVmZGlycyAke0RJUlNfREVGQVVMVH07IGRvCisgICAgICAgICAgICBbICIuJGRpciIgPSAuIF0gJiYgY29udGludWUKKyAgICAgICAgICAgIFsgIi4kZGlyIiA9IC5zd2l0Y2gtdG8tZGVmZGlycyBdICYmIGZvdW5kX2luZGVmZGlyPXllcworICAgICAgICAgICAgWyAhIC1kICRkaXIgXSAmJiBjb250aW51ZQorCisgICAgICAgICAgICAjICAgIHNlYXJjaCB0aGUgZmlsZQorICAgICAgICAgICAgT0lGUzM9IiRJRlMiOyBJRlM9IiRESUZTIgorICAgICAgICAgICAgZm9yIGZpbGUgaW4gJycgYGNkICRkaXIgJiYgZW52IC1pIC9iaW4vbHMgbGliJHtsaWJ9LiogMj4vZGV2L251bGxgOyBkbworICAgICAgICAgICAgICAgICBbICIuJGZpbGUiID0gLiBdICYmIGNvbnRpbnVlCisgICAgICAgICAgICAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICAgICAgICAgICAgICAgICouc298Ki5zby5bMC05XSp8Ki5zbHwqLnNsLlswLTldKiApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kPXllczsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZm91bmRfdHlwZT1EU087CisgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAqLmxvfCoubGEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZD15ZXM7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3R5cGU9UElDCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgICAgICAqLmEgKQorICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBbICIuJGZvdW5kX3R5cGUiID0gLiBdOyB0aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3VuZD15ZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvdW5kX3R5cGU9T0JKCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGRvbmUKKyAgICAgICAgICAgIElGUz0iJE9JRlMzIgorICAgICAgICAgICAgaWYgWyAiLiRmb3VuZCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgICAgICBmb3VuZF9kaXI9IiRkaXIiCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgSUZTPSIkT0lGUzIiCisKKyAgICAgICAgaWYgWyAiLiRmb3VuZCIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGlmIFsgIi4kZm91bmRfaW5kZWZkaXIiICE9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgIGV2YWwgImRpcmxpc3Q9XCJcJHtESVJTXyR7Zm91bmRfdHlwZX19OlwiIgorICAgICAgICAgICAgICAgIGNhc2UgIiRkaXJsaXN0IiBpbgorICAgICAgICAgICAgICAgICAgICAqOiRmb3VuZF9kaXI6KiApIDs7CisgICAgICAgICAgICAgICAgICAgICogKSBldmFsICJESVJTXyR7Zm91bmRfdHlwZX09XCJcJERJUlNfJHtmb3VuZF90eXBlfToke2ZvdW5kX2Rpcn1cIiIgOzsKKyAgICAgICAgICAgICAgICBlc2FjCisgICAgICAgICAgICAgICAgZXZhbCAiTElCU18ke2ZvdW5kX3R5cGV9PVwiXCRMSUJTXyR7Zm91bmRfdHlwZX06JGxpYlwiIgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGV2YWwgIkxJQlNfJHtmb3VuZF90eXBlfT1cIlwkTElCU18ke2ZvdW5kX3R5cGV9OiRsaWJcIiIKKyAgICAgICAgICAgIGZpCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIExJQlNfT0JKPSIkTElCU19PQko6JGxpYiIKKyAgICAgICAgICAgICNkaXJsaXN0PSJgZWNobyAkRElSUyAkRElSU19ERUZBVUxUIHwgc2VkIC1lICdzLzovIC9nJ2AiCisgICAgICAgICAgICAjZWNobyAic2xvOldhcm5pbmc6IGxpYnJhcnkgXCIkbGliXCIgbm90IGZvdW5kIGluIGFueSBvZiB0aGUgZm9sbG93aW5nIGRpcnM6IiAyPiYxCisgICAgICAgICAgICAjZWNobyAic2xvOldhcm5pbmc6ICRkaXJsaXN0IiAxPiYxCisgICAgICAgIGZpCisgICAgZG9uZQorICAgIElGUz0iJE9JRlMiCisKKyAgICAjICAgYWxzbyBwYXNzLXRocm91Z2ggdW51c2VkIGRpcnMgZXZlbiBpZiBpdCdzIHVzZWxlc3MKKyAgICBPSUZTPSIkSUZTIjsgSUZTPSc6JworICAgIGZvciBkaXIgaW4gJERJUlM7IGRvCisgICAgICAgIGRpcmxpc3Q9IiR7RElSU19PQkp9OiR7RElSU19QSUN9OiR7RElSU19EU099OiIKKyAgICAgICAgY2FzZSAiJGRpcmxpc3QiIGluCisgICAgICAgICAgICAqOiRkaXI6KiApIDs7CisgICAgICAgICAgICAqICkgRElSU19PQko9IiRESVJTX09CSjokZGlyIiA7OworICAgICAgICBlc2FjCisgICAgZG9uZQorICAgIElGUz0iJE9JRlMiCisKKyAgICAjICAgcmVhc3NlbWJsZSB0aGUgb3B0aW9ucyBidXQgc2VwYXJhdGVkIGJ5IHR5cGUKKyAgICBmb3IgdHlwZSBpbiBPQkogUElDIERTTzsgZG8KKyAgICAgICAgT0lGUz0iJElGUyI7IElGUz0nOicKKyAgICAgICAgZXZhbCAibGlicz1cIlwkTElCU18ke3R5cGV9XCIiCisgICAgICAgIG9wdHM9JycKKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKyAgICAgICAgICAgIFsgIi4kbGliIiA9IC4gXSAmJiBjb250aW51ZQorICAgICAgICAgICAgb3B0cz0iJG9wdHMgLWwkbGliIgorICAgICAgICBkb25lCisgICAgICAgIGV2YWwgIkxJQlNfJHt0eXBlfT1cIiRvcHRzXCIiCisKKyAgICAgICAgZXZhbCAiZGlycz1cIlwkRElSU18ke3R5cGV9XCIiCisgICAgICAgIG9wdHM9JycKKyAgICAgICAgZm9yIGRpciBpbiAkZGlyczsgZG8KKyAgICAgICAgICAgIFsgIi4kZGlyIiA9IC4gXSAmJiBjb250aW51ZQorICAgICAgICAgICAgb3B0cz0iJG9wdHMgLUwkZGlyIgorICAgICAgICBkb25lCisgICAgICAgIGV2YWwgIkRJUlNfJHt0eXBlfT1cIiRvcHRzXCIiCisgICAgICAgIElGUz0iJE9JRlMiCisgICAgZG9uZQorCisgICAgIyAgIGdpdmUgYmFjayByZXN1bHRzCisgICAgZm9yIHZhciBpbiBBUkdWIERJUlNfT0JKIExJQlNfT0JKIERJUlNfUElDIExJQlNfUElDIERJUlNfRFNPIExJQlNfRFNPOyBkbworICAgICAgICBldmFsICJ2YWw9XCJcJCR7dmFyfVwiIgorICAgICAgICB2YWw9ImBlY2hvICR2YWwgfCBzZWQgLWUgJ3MvXiAqLy8nYCIKKyAgICAgICAgZWNobyAiJHtvcHRfcH0ke3Zhcn09XCIke3ZhbH1cIiIKKyAgICBkb25lCisKKyAgICBzaHRvb2xfZXhpdCAwCisgICAgOzsKKworc2NwcCApCisgICAgIyMKKyAgICAjIyAgc2NwcCAtLSBTaGFyaW5nIEMgUHJlLVByb2Nlc3NvcgorICAgICMjICBDb3B5cmlnaHQgKGMpIDE5OTktMjAwNiBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPgorICAgICMjCisKKyAgICBzcmNzPSIkKiIKKyAgICBvdXRwdXQ9IiR7b3B0X299Lm4iCisKKyAgICAjICAgZmluZCBhIHJlYXNvbmFibGUgQXdrCisgICAgYXdrPScnCisgICAgcGF0aHM9YGVjaG8gJFBBVEggfFwKKyAgICAgICAgICAgc2VkIC1lICdzJS8qOiU6JWcnIC1lICdzJS8kJSUnIFwKKyAgICAgICAgICAgICAgIC1lICdzL146Ly46LycgLWUgJ3MvOjovOi46L2cnIC1lICdzLzokLzouLycgXAorICAgICAgICAgICAgICAgLWUgJ3MvOi8gL2cnYAorICAgIGZvciBuYW1lIGluIGdhd2sgbmF3ayBhd2s7IGRvCisgICAgICAgIGZvciBwYXRoIGluICRwYXRoczsgZG8KKyAgICAgICAgICAgIGlmIFsgLXIgIiRwYXRoLyRuYW1lIiBdOyB0aGVuCisgICAgICAgICAgICAgICAgYXdrPSIkcGF0aC8kbmFtZSIKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiBbICIuJGF3ayIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgIGRvbmUKKyAgICBpZiBbICIuJGF3ayIgPSAuIF07IHRoZW4KKyAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogY2Fubm90IGZpbmQgYSByZWFzb25hYmxlIEF3ayIgMT4mMgorICAgICAgICBzaHRvb2xfZXhpdCAxCisgICAgZmkKKworICAgICMgICBwYXJzZSBzb3VyY2UgZmlsZShzKQorICAgIGlmIFsgIi4kb3B0X3YiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGVjaG8gIlBhcnNpbmc6IiB8ICRhd2sgJ3sgcHJpbnRmKCIlcyIsICQwKTsgfScgMT4mMgorICAgIGZpCisgICAgZm9yIHNyYyBpbiAkc3JjczsgZG8KKyAgICAgICAgaWYgWyAiLiRvcHRfdiIgPSAueWVzIF07IHRoZW4KKyAgICAgICAgICAgIGVjaG8gJHNyYyB8ICRhd2sgJ3sgcHJpbnRmKCIgJXMiLCAkMCk7IH0nIDE+JjIKKyAgICAgICAgZmkKKyAgICAgICAgaWYgWyAiLiRvcHRfZiIgIT0gLiBdOyB0aGVuCisgICAgICAgICAgICBpbnB1dGNtZD0ic2VkIgorICAgICAgICAgICAgT0lGUz0iJElGUyI7IElGUz0iJEFTQ19OTCI7IHNldCAtLSAkb3B0X2Y7IElGUz0iJE9JRlMiCisgICAgICAgICAgICBmb3IgZQorICAgICAgICAgICAgZG8KKyAgICAgICAgICAgICAgICBpbnB1dGNtZD0iJGlucHV0Y21kIC1lICckZSciCisgICAgICAgICAgICBkb25lCisgICAgICAgICAgICBpbnB1dGNtZD0iJGlucHV0Y21kICckc3JjJyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgaW5wdXRjbWQ9ImNhdCAnJHNyYyciCisgICAgICAgIGZpCisgICAgICAgIGV2YWwgJGlucHV0Y21kIHxcCisgICAgICAgICRhd2sgJworICAgICAgICAgICBCRUdJTiB7CisgICAgICAgICAgICAgICBsbiAgICA9IDA7CisgICAgICAgICAgICAgICBmbG4gICA9IDA7CisgICAgICAgICAgICAgICBsZXZlbCA9IDA7CisgICAgICAgICAgICAgICBtb2RlICA9ICIiOworICAgICAgICAgICAgICAgc3RvcmUgPSAiIjsKKyAgICAgICAgICAgfQorICAgICAgICAgICB7CisgICAgICAgICAgICAgICBsbisrOworICAgICAgICAgICB9CisgICAgICAgICAgIC9eI2lmLiovIHsKKyAgICAgICAgICAgICAgIGxldmVsKys7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgL14jaWYgW2EtekEtWl9dW2EtekEtWjAtOV9dKiAqJC8geworICAgICAgICAgICAgICAgaWYgKCQyID09IGRlZmluZSkgeworICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiRCI7CisgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJEOiNsaW5lICVkIFwiJXNcIlxuIiwgbG4sIHNyYyk7CisgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfQorICAgICAgICAgICAvXiNlbmRpZi4qLyB7CisgICAgICAgICAgICAgICBsZXZlbC0tOworICAgICAgICAgICAgICAgaWYgKG1vZGUgPT0gIkQiICYmIGxldmVsID09IDApIHsKKyAgICAgICAgICAgICAgICAgICBtb2RlID0gIiI7CisgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfQorICAgICAgICAgICAvXlthLXpBLVpfXVthLXpBLVowLTlfXS4qOy4qLyB7CisgICAgICAgICAgICAgICBpZiAoJDEgPT0gY2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICBwcmludGYoIlY6I2xpbmUgJWQgXCIlc1wiXG4iLCBsbiwgc3JjKTsKKyAgICAgICAgICAgICAgICAgICBwcmludGYoIlY6JXNcbiIsICQwKTsKKyAgICAgICAgICAgICAgICAgICBwcmludGYoIko6JXNcbiIsICQwKTsKKyAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgICAgIC9eW2EtekEtWl9dW2EtekEtWjAtOV9dLio9LiovIHsKKyAgICAgICAgICAgICAgIGlmICgkMSA9PSBjbGFzcykgeworICAgICAgICAgICAgICAgICAgIHByaW50ZigiVjojbGluZSAlZCBcIiVzXCJcbiIsIGxuLCBzcmMpOworICAgICAgICAgICAgICAgICAgIHByaW50ZigiVjolc1xuIiwgJDApOworICAgICAgICAgICAgICAgICAgIHByaW50ZigiSjolc1xuIiwgJDApOworICAgICAgICAgICAgICAgICAgIG5leHQ7CisgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgICAgL15bYS16QS1aX11bYS16QS1aMC05X10qLyB7CisgICAgICAgICAgICAgICBpZiAoJDEgPT0gY2xhc3MpIHsKKyAgICAgICAgICAgICAgICAgICBmbG4gPSBsbjsKKyAgICAgICAgICAgICAgICAgICBzdG9yZSA9ICQwOworICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiRiI7CisgICAgICAgICAgICAgICAgICAgbmV4dDsKKyAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgfQorICAgICAgICAgICAvXlx7ICokLyB7CisgICAgICAgICAgICAgICBpZiAobW9kZSA9PSAiRiIpIHsKKyAgICAgICAgICAgICAgICAgICBwcmludGYoIkY6I2xpbmUgJWQgXCIlc1wiXG4iLCBmbG4sIHNyYyk7CisgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJGOiVzO1xuIiwgc3RvcmUpOworICAgICAgICAgICAgICAgICAgIHByaW50ZigiSTolcztcbiIsIHN0b3JlKTsKKyAgICAgICAgICAgICAgICAgICBzdG9yZSA9ICIiOworICAgICAgICAgICAgICAgICAgIG1vZGUgPSAiIjsKKyAgICAgICAgICAgICAgICAgICBuZXh0OworICAgICAgICAgICAgICAgfQorICAgICAgICAgICB9CisgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgIGlmIChtb2RlID09ICJEIikKKyAgICAgICAgICAgICAgICAgICBwcmludGYoIkQ6JXNcbiIsICQwKTsKKyAgICAgICAgICAgICAgIGVsc2UgaWYgKG1vZGUgPT0gIkYiKQorICAgICAgICAgICAgICAgICAgIHN0b3JlID0gc3RvcmUgIiAiICQwOworICAgICAgICAgICB9CisgICAgICAgICcgInNyYz0kc3JjIiAiZGVmaW5lPSRvcHRfRCIgImNsYXNzPSRvcHRfQyIgPj4kdG1wZmlsZQorICAgIGRvbmUKKyAgICBpZiBbICIuJG9wdF92IiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBlY2hvICIiIDE+JjIKKyAgICBmaQorCisgICAgIyAgIHN0YXJ0IGdlbmVyYXRpbmcgb3V0cHV0IGhlYWRlcgorICAgIGVjaG8gIi8qICRvcHRfbyAtLSBhdXRvZ2VuZXJhdGVkIGZyb20gJG9wdF90LCBETyBOT1QgRURJVCEgKi8iID4kb3V0cHV0CisgICAgZWNobyAiI2xpbmUgMSBcIiRvcHRfdFwiIiA+PiRvdXRwdXQKKyAgICBzZWQgPCRvcHRfdCAtZSAiMSwvXiR7b3B0X019ICpcJC9wIiAtZSAnZCcgfFwKKyAgICBzZWQgLWUgIi9eJHtvcHRfTX0gKlwkL2QiID4+JG91dHB1dAorCisgICAgIyAgIG1lcmdlIGluIHRoZSBkZWZpbmUgYmxvY2tzCisgICAgZ3JlcCAnXkQ6JyAkdG1wZmlsZSB8IHNlZCAtZSAncy9eRDovLycgPj4kb3V0cHV0CisKKyAgICAjICAgZ2VuZXJhdGUgc3RhbmRhcmQgcHJvbG9nCisgICAgZWNobyAiI2xpbmUgMSBcIl9PTl9USEVfRkxZX1wiIiA+PiRvdXRwdXQKKyAgICBlY2hvICIiID4+JG91dHB1dAorICAgIGVjaG8gIi8qIG1ha2Ugc3VyZSB0aGUgc2NwcCBzb3VyY2UgZXh0ZW5zaW9ucyBhcmUgc2tpcHBlZCAqLyIgPj4kb3V0cHV0CisgICAgZWNobyAiI2RlZmluZSAkb3B0X0QgMCIgPj4kb3V0cHV0CisgICAgZWNobyAiI2RlZmluZSAkb3B0X0MgLyoqLyIgPj4kb3V0cHV0CisKKyAgICAjICAgZ2VuZXJhdGUgbmFtZXNwYWNlIGhpZGluZyBmb3IgdmFyaWFibGVzCisgICAgZWNobyAiIiA+PiRvdXRwdXQKKyAgICBlY2hvICIvKiBtb3ZlIGludGVybiB2YXJpYWJsZXMgdG8gaGlkZGVuIG5hbWVzcGFjZSAqLyIgPj4kb3V0cHV0CisgICAgZ3JlcCAnXko6JyAkdG1wZmlsZSB8IHNlZCA+PiRvdXRwdXQgXAorICAgICAgICAtZSAncy9eSjovLycgXAorICAgICAgICAtZSAncy8gICovIC9nJyBcCisgICAgICAgIC1lICdzL15bXj07XSpbICpdXChbYS16QS1aMC05X10qXClcW1xdOy4qJC8jZGVmaW5lIFwxIF9fXDEvJyBcCisgICAgICAgIC1lICdzL15bXj07XSpbICpdXChbYS16QS1aMC05X10qXClcW1xdID0uKiQvI2RlZmluZSBcMSBfX1wxLycgXAorICAgICAgICAtZSAncy9eW149O10qWyAqXVwoW2EtekEtWjAtOV9dKlwpOy4qJC8jZGVmaW5lIFwxIF9fXDEvJyBcCisgICAgICAgIC1lICdzL15bXj07XSpbICpdXChbYS16QS1aMC05X10qXCkgPS4qJC8jZGVmaW5lIFwxIF9fXDEvJworCisgICAgIyAgIGdlbmVyYXRlIG5hbWVzcGFjZSBoaWRpbmcgZm9yIGZ1bmN0aW9ucworICAgIGVjaG8gIiIgPj4kb3V0cHV0CisgICAgZWNobyAiLyogbW92ZSBpbnRlcm4gZnVuY3Rpb25zIHRvIGhpZGRlbiBuYW1lc3BhY2UgKi8iID4+JG91dHB1dAorICAgIGdyZXAgJ15JOicgJHRtcGZpbGUgfCBzZWQgPj4kb3V0cHV0IFwKKyAgICAgICAgLWUgJ3MvXkk6Ly8nIFwKKyAgICAgICAgLWUgJ3MvXChbIChdXCkgKi9cMS9nJyBcCisgICAgICAgIC1lICdzLyAqXChbKSxdXCkvXDEvZycgXAorICAgICAgICAtZSAncy9eW14oXSpbICpdXChbYS16QS1aMC05X10qXCkoLiokLyNkZWZpbmUgXDEgX19cMS8nCisKKyAgICAjICAgZ2VuZXJhdGUgcHJvdG90eXBlcyBmb3IgdmFyaWFibGVzCisgICAgZWNobyAiIiA+PiRvdXRwdXQKKyAgICBlY2hvICIvKiBwcm90b3R5cGVzIGZvciBpbnRlcm4gdmFyaWFibGVzICovIiA+PiRvdXRwdXQKKyAgICBncmVwICdeVjonICR0bXBmaWxlIHwgc2VkID4+JG91dHB1dCBcCisgICAgICAgIC1lICdzL15WOi8vJyBcCisgICAgICAgIC1lICdzLyAgKi8gL2cnIFwKKyAgICAgICAgLWUgJ3MvXlwoW149O10qWyAqXVthLXpBLVowLTlfXSpcW1xdXCk7LiokL1wxOy8nIFwKKyAgICAgICAgLWUgJ3MvXlwoW149O10qWyAqXVthLXpBLVowLTlfXSpcW1xdXCkgPS4qJC9cMTsvJyBcCisgICAgICAgIC1lICdzL15cKFtePTtdKlsgKl1bYS16QS1aMC05X10qXCk7LiokL1wxOy8nIFwKKyAgICAgICAgLWUgJ3MvXlwoW149O10qWyAqXVthLXpBLVowLTlfXSpcKSA9LiokL1wxOy8nIFwKKyAgICAgICAgLWUgJ3MvIDsvOy9nJyBcCisgICAgICAgIC1lICJzL14kb3B0X0MgL2V4dGVybiAvIgorCisgICAgIyAgIGdlbmVyYXRlIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucworICAgIGVjaG8gIiIgPj4kb3V0cHV0CisgICAgZWNobyAiLyogcHJvdG90eXBlcyBmb3IgaW50ZXJuIGZ1bmN0aW9ucyAqLyIgPj4kb3V0cHV0CisgICAgZ3JlcCAnXkY6JyAkdG1wZmlsZSB8IHNlZCA+PiRvdXRwdXQgXAorICAgICAgICAtZSAncy9eRjovLycgXAorICAgICAgICAtZSAncy9cKFsgKF1cKSAqL1wxL2cnIFwKKyAgICAgICAgLWUgJ3MvICpcKFspLF1cKS9cMS9nJyBcCisgICAgICAgIC1lICdzL1woWyogXVwpW2EtekEtWjAtOV9dKiwvXDEsL2cnIFwKKyAgICAgICAgLWUgJ3MvXChbKiBdXClbYS16QS1aMC05X10qKTsvXDEpOy9nJyBcCisgICAgICAgIC1lICdzLyhcKlthLXpBLVowLTlfXSopKC8oKikoL2cnIFwKKyAgICAgICAgLWUgJ3MvXChbIChdXCkgKi9cMS9nJyBcCisgICAgICAgIC1lICdzLyAqXChbKSxdXCkvXDEvZycgXAorICAgICAgICAtZSAicy9eJG9wdF9DIC9leHRlcm4gLyIKKworICAgICMgICBmaW5pc2ggZ2VuZXJhdGluZyBvdXRwdXQgaGVhZGVyCisgICAgbj1gKGVjaG8gJyc7IHNlZCA8JG9wdF90IC1lICIxLC9eJHtvcHRfTX0gKlwkL3AiIC1lICdkJykgfFwKKyAgICAgICB3YyAtbCB8IHNlZCAtZSAnczteICpcKFswLTldKlwpICokO1wxOydgCisgICAgZWNobyAiI2xpbmUgJG4gXCIkb3B0X3RcIiIgPj4kb3V0cHV0CisgICAgc2VkIDwkb3B0X3QgLWUgIi9eJHtvcHRfTX0gKlwkLyxcJHAiIC1lICdkJyB8XAorICAgIHNlZCAtZSAiL14ke29wdF9NfSAqXCQvZCIgPj4kb3V0cHV0CisKKyAgICAjICAgY3JlYXRlIGZpbmFsIG91dHB1dCBmaWxlCisgICAgaWYgWyAtZiAkb3B0X28gXTsgdGhlbgorICAgICAgICBpZiBbICIuJG9wdF9wIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgZ3JlcCAtdiAnXiNsaW5lJyAkb3B0X28gID4kdG1wZmlsZS5vCisgICAgICAgICAgICBncmVwIC12ICdeI2xpbmUnICRvdXRwdXQgPiR0bXBmaWxlLm4KKyAgICAgICAgICAgIG91dF9vbGQ9IiR0bXBmaWxlLm8iCisgICAgICAgICAgICBvdXRfbmV3PSIkdG1wZmlsZS5uIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBvdXRfb2xkPSIkb3B0X28iCisgICAgICAgICAgICBvdXRfbmV3PSIkb3V0cHV0IgorICAgICAgICBmaQorICAgICAgICBpZiBjbXAgLXMgJG91dF9vbGQgJG91dF9uZXc7IHRoZW4KKyAgICAgICAgICAgIDoKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3AgJG91dHB1dCAkb3B0X28KKyAgICAgICAgZmkKKyAgICBlbHNlCisgICAgICAgIGNwICRvdXRwdXQgJG9wdF9vCisgICAgZmkKKyAgICBybSAtZiAkb3V0cHV0CisgICAgcm0gLWYgJHRtcGZpbGUgJHRtcGZpbGUuKiA+L2Rldi9udWxsIDI+JjEKKworICAgIHNodG9vbF9leGl0IDAKKyAgICA7OworCit2ZXJzaW9uICkKKyAgICAjIworICAgICMjICB2ZXJzaW9uIC0tIE1haW50YWluIGEgdmVyc2lvbiBpbmZvcm1hdGlvbiBmaWxlCisgICAgIyMgIENvcHlyaWdodCAoYykgMTk5NC0yMDA2IFJhbGYgUy4gRW5nZWxzY2hhbGwgPHJzZUBlbmdlbHNjaGFsbC5jb20+CisgICAgIyMKKworICAgIGZpbGU9IiQxIgorCisgICAgIyAgIGRldGVybWluZSBwcmVmaXggYW5kIG5hbWUKKyAgICBuYW1lPSIkb3B0X24iCisgICAgcHJlZml4PSIkb3B0X3AiCisKKyAgICAjICAgZGV0ZXJtaW5lIGN1cnJlbnQgdmVyc2lvbgorICAgIHRyaXBsZT0iJG9wdF9zIgorICAgIGlmIFsgIi4kdHJpcGxlIiAhPSAuIF07IHRoZW4KKyAgICAgICAgIyAgIHVzZSBnaXZlbiB0cmlwbGUKKyAgICAgICAgaWYgWyAiLmBlY2hvICR0cmlwbGUgfCBncmVwICdbMC05XSouWzAtOV0qW3NhYnAuXVswLTldKidgIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtcyc6IFxgJG9wdF9zJyIgMT4mMgorICAgICAgICAgICAgc2h0b29sX2V4aXQgMQorICAgICAgICBmaQorICAgICAgICBldmFsIGBlY2hvICR0cmlwbGUgfFwKKyAgICAgICAgICAgICAgc2VkIC1lICdzJVwoWzAtOV0qXClcLlwoWzAtOV0qXClcKFtzYWJwLl1cKVwoWzAtOV0qXCkuKiVcCisgICAgICAgICAgICAgIHZlcj0iXDEiO3Jldj0iXDIiO3R5cD0iXDMiO2xldj0iXDQiJSdgCisgICAgICAgIHRpbT1jYWxjCisgICAgZWxpZiBbIC1yICRmaWxlIF07IHRoZW4KKyAgICAgICAgIyAgIGRldGVybWluZSB0cmlwbGUgZnJvbSBnaXZlbiBmaWxlCisgICAgICAgIGV2YWwgYGdyZXAgJ1ZlcnNpb24gWzAtOV0qLlswLTldKltzYWJwLl1bMC05XSogKFswLTldKi1bYS16QS1aXSotWzAtOV0qKScgJGZpbGUgfFwKKyAgICAgICAgICAgICAgc2VkIC1lICdzJS4qVmVyc2lvbiBcKFswLTldKlwpXC5cKFswLTldKlwpXChbc2FicC5dXClcKFswLTldKlwpIChcKFswLTldKi1bYS16QS1aXSotWzAtOV0qXCkpLiolXAorICAgICAgICAgICAgICB2ZXI9IlwxIjtyZXY9IlwyIjt0eXA9IlwzIjtsZXY9Ilw0Ijt0aW09Ilw1IiUnIC1lICdxJ2AKKyAgICBlbHNlCisgICAgICAgICMgICBpbnRpYWxpc2UgdG8gZmlyc3QgdmVyc2lvbgorICAgICAgICB2ZXI9MAorICAgICAgICByZXY9MQorICAgICAgICB0eXA9LgorICAgICAgICBsZXY9MAorICAgICAgICB0aW09Y2FsYworICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIG5ldyB2ZXJzaW9uIGluIGJhdGNoCisgICAgaWYgWyAiLiRvcHRfaSIgIT0gLiBdOyB0aGVuCisgICAgICAgIGNhc2UgJG9wdF9pIGluCisgICAgICAgICAgICB2ICkgdmVyPWBleHByICR2ZXIgKyAxYAorICAgICAgICAgICAgICAgIHJldj0wCisgICAgICAgICAgICAgICAgbGV2PTAKKyAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgciApIHJldj1gZXhwciAkcmV2ICsgMWAKKyAgICAgICAgICAgICAgICBsZXY9MAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBsICkgbGV2PWBleHByICRsZXYgKyAxYAorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtaSc6IFxgJG9wdF9pJyIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgICAgIHRpbT1jYWxjCisgICAgZmkKKworICAgICMgICBkZXRlcm1pbmUgbmV3IHZlcnNpb24gaW50ZXJhY3RpdmVseQorICAgIGlmIFsgIi4kb3B0X2UiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGVjaG8gIm9sZCB2ZXJzaW9uOiAke3Zlcn0uJHtyZXZ9JHt0eXB9JHtsZXZ9IgorICAgICAgICB3aGlsZSBbIDEgXTsgZG8KKyAgICAgICAgICAgIGVjaG8gZHVtbXkgfCBhd2sgJ3sgcHJpbnRmKCJuZXcgdmVyc2lvbjogIik7IH0nCisgICAgICAgICAgICByZWFkIHRyaXBsZQorICAgICAgICAgICAgY2FzZSAkdHJpcGxlIGluCisgICAgICAgICAgICAgICAgWzAtOV0qLlswLTldKltzYWJwLl1bMC05XSogKQorICAgICAgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIHZlcnNpb24gc3RyaW5nIGVudGVyZWQ6IFxgJHRyaXBsZSciIDE+JjIKKyAgICAgICAgICAgICAgICAgICAgY29udGludWUKKyAgICAgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGVzYWMKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRvbmUKKyAgICAgICAgZXZhbCBgZWNobyAkdHJpcGxlIHxcCisgICAgICAgICAgICAgIHNlZCAtZSAncyVeXChbMC05XSpcKVwuXChbMC05XSpcKVwoW3NhYnAuXVwpXChbMC05XSpcKSQlXAorICAgICAgICAgICAgICB2ZXI9IlwxIjtyZXY9IlwyIjt0eXA9IlwzIjtsZXY9Ilw0IiUnYAorICAgICAgICB0aW09Y2FsYworICAgIGZpCisKKyAgICAjICAgZGV0ZXJtaW5lIGhleGFkZWNpbWFsIGFuZCBsaWJ0b29sIHZhbHVlIG9mIHZlcnNpb24KKyAgICBjYXNlICR0eXAgaW4KKyAgICAgICAgYSAgICAgKSB0eXBudW09MDsgIGxldm51bT0kbGV2IDs7CisgICAgICAgIGIgICAgICkgdHlwbnVtPTE7ICBsZXZudW09JGxldiA7OworICAgICAgICBwIHwgLiApIHR5cG51bT0yOyAgbGV2bnVtPSRsZXYgOzsKKyAgICAgICAgcyAgICAgKSB0eXBudW09MTU7IGxldm51bT0yNTUgIDs7ICMgc25hcHNob3RzIGFyZSBzcGVjaWFsCisgICAgZXNhYworICAgIGhleD1gZWNobyAiJHZlcjokcmV2OiR0eXBudW06JGxldm51bSIgfFwKKyAgICAgICAgIGF3ayAtRjogJ3sgcHJpbnRmKCIweCV4JTAyeCUxeCUwMngiLCAkMSwgJDIsICQzLCAkNCk7IH0nIHxcCisgICAgICAgICB0ciAnYWJjZGVmJyAnQUJDREVGJ2AKKyAgICBsdHY9YGVjaG8gIiR2ZXI6JHJldjokdHlwbnVtOiRsZXZudW0iIHxcCisgICAgICAgICBhd2sgLUY6ICd7IHByaW50ZigiJWQ6JWQiLCAkMSoxMCArICQyLCAkMyoxMCArICQ0KTsgfSdgCisKKyAgICAjICAgZGV0ZXJtaW5lIGRhdGUKKyAgICBpZiBbICIuJHRpbSIgPSAuY2FsYyBdOyB0aGVuCisgICAgICAgIGRheT1gZGF0ZSAnKyVkJ2AKKyAgICAgICAgbW9udGg9YGRhdGUgJyslbSdgCisgICAgICAgIHllYXI9YGRhdGUgJyslWScgMj4vZGV2L251bGxgCisgICAgICAgIGlmIFsgIi4kdGltZV95ZWFyIiA9IC4gXTsgdGhlbgorICAgICAgICAgICAgeWVhcj1gZGF0ZSAnKyV5J2AKKyAgICAgICAgICAgIGNhc2UgJHllYXIgaW4KKyAgICAgICAgICAgICAgICBbNS05XVswLTldKSB5ZWFyPSIxOSR5ZWFyIiA7OworICAgICAgICAgICAgICAgIFswLTRdWzAtOV0pIHllYXI9IjIwJHllYXIiIDs7CisgICAgICAgICAgICBlc2FjCisgICAgICAgIGZpCisgICAgICAgIGNhc2UgJG1vbnRoIGluCisgICAgICAgICAgICAxfDAxKSBtb250aD0nSmFuJyA7OworICAgICAgICAgICAgMnwwMikgbW9udGg9J0ZlYicgOzsKKyAgICAgICAgICAgIDN8MDMpIG1vbnRoPSdNYXInIDs7CisgICAgICAgICAgICA0fDA0KSBtb250aD0nQXByJyA7OworICAgICAgICAgICAgNXwwNSkgbW9udGg9J01heScgOzsKKyAgICAgICAgICAgIDZ8MDYpIG1vbnRoPSdKdW4nIDs7CisgICAgICAgICAgICA3fDA3KSBtb250aD0nSnVsJyA7OworICAgICAgICAgICAgOHwwOCkgbW9udGg9J0F1ZycgOzsKKyAgICAgICAgICAgIDl8MDkpIG1vbnRoPSdTZXAnIDs7CisgICAgICAgICAgICAgIDEwKSBtb250aD0nT2N0JyA7OworICAgICAgICAgICAgICAxMSkgbW9udGg9J05vdicgOzsKKyAgICAgICAgICAgICAgMTIpIG1vbnRoPSdEZWMnIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgdGltPSIke2RheX0tJHttb250aH0tJHt5ZWFyfSIKKyAgICBmaQorCisgICAgIyAgIHBlcmZvcm0gcmVzdWx0IGFjdGlvbnMKKyAgICBtb2RlPXNob3cKKyAgICBpZiBbICIuJG9wdF9pIiAhPSAuIF07IHRoZW4KKyAgICAgICAgbW9kZT1lZGl0CisgICAgZWxpZiBbICIuJG9wdF9lIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBtb2RlPWVkaXQKKyAgICBlbGlmIFsgIi4kb3B0X3MiICE9IC4gXTsgdGhlbgorICAgICAgICBtb2RlPWVkaXQKKyAgICBmaQorICAgIGlmIFsgIi4kbW9kZSIgPSAuc2hvdyBdOyB0aGVuCisgICAgICAgICMgICBqdXN0IGRpc3BsYXkgdGhlIGN1cnJlbnQgdmVyc2lvbgorICAgICAgICBjYXNlICRvcHRfZCBpbgorICAgICAgICAgICAgc2hvcnQgKQorICAgICAgICAgICAgICAgIGVjaG8gIiR7dmVyfS4ke3Jldn0ke3R5cH0ke2xldn0iCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGxvbmcgKQorICAgICAgICAgICAgICAgIGVjaG8gIiR7dmVyfS4ke3Jldn0ke3R5cH0ke2xldn0gKCR0aW0pIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBsaWJ0b29sICkKKyAgICAgICAgICAgICAgICBlY2hvICIke2x0dn0iCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIGhleCApCisgICAgICAgICAgICAgICAgZWNobyAiJHtoZXh9IgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqICkgZWNobyAiJG1zZ3ByZWZpeDpFcnJvcjogaW52YWxpZCBhcmd1bWVudCB0byBvcHRpb24gXGAtZCc6IFxgJG9wdF9kJyIgMT4mMgorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICAgICAgICAgICAgICA7OworICAgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgICAjICAgdXBkYXRlIHRoZSB2ZXJzaW9uIGZpbGUKKworICAgICAgICAjICAgcHJlLWdlbmVyYXRlIHZhcmlvdXMgc3RyaW5ncworICAgICAgICB0cmlwbGU9IiR7dmVyfS4ke3Jldn0ke3R5cH0ke2xldn0iCisgICAgICAgIHZIZXg9IiRoZXgiCisgICAgICAgIHZTaG9ydD0iJHt0cmlwbGV9IgorICAgICAgICB2TG9uZz0iJHt0cmlwbGV9ICgke3RpbX0pIgorICAgICAgICB2VGVYPSJUaGlzIGlzICR7bmFtZX0sIFZlcnNpb24gJHt0cmlwbGV9ICgke3RpbX0pIgorICAgICAgICB2R05VPSIke25hbWV9ICR7dHJpcGxlfSAoJHt0aW19KSIKKyAgICAgICAgdldlYj0iJHtuYW1lfS8ke3RyaXBsZX0iCisgICAgICAgIHZTQ0NTPSJAKCMpJHtuYW1lfSAke3RyaXBsZX0gKCR7dGltfSkiCisgICAgICAgIHZSQ1M9IlwkSWQ6ICR7bmFtZX0gJHt0cmlwbGV9ICgke3RpbX0pIFwkIgorCisgICAgICAgICMgICBkZXRlcm1pbmUgc3RyaW5nIG91dCBvZiBmaWxlbmFtZQorICAgICAgICAjICAgKGRvIE5PVCB0cnkgdG8gb3B0aW1pemUgdGhpcyBpbiBhbnkgd2F5IGJlY2F1c2Ugb2YgcG9ydGFiaWxpdHkpCisgICAgICAgIGZpbGVzdHI9YHV0aWxfdXBwZXIgIiRmaWxlIiB8IHRyICcuLyUrJyAnX19fXycgfCBzZWQgLWUgJ3MvLS9fL2cnYAorCisgICAgICAgICMgICBnZW5lcmF0ZSB1cHBlcmNhc2UgcHJlZml4CisgICAgICAgIHByZWZpeHVwcGVyPWB1dGlsX3VwcGVyICIkcHJlZml4ImAKKworICAgICAgICAjICAgY3JlYXRlIHRoZSB2ZXJzaW9uIGZpbGUgYWNjb3JkaW5nIHRoZSB0aGUgc2VsZWN0ZWQgbGFuZ3VhZ2UKKyAgICAgICAgZWNobyAibmV3IHZlcnNpb246ICR7dkxvbmd9IgorCisgICAgICAgIGNwIC9kZXYvbnVsbCAkZmlsZQorICAgICAgICBjYXNlICRvcHRfbCBpbgorICAgICAgICAgICAgdHh0ICkKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgJHtmaWxlfSAtLSBWZXJzaW9uIEluZm9ybWF0aW9uIGZvciAke25hbWV9IChzeW50YXg6IFRleHQpIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICBbYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYW5kIG1haW50YWluZWQgYnkgR05VIHNodG9vbF0iCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICR2VGVYIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBjICkKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIi8qIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiKiogICR7ZmlsZX0gLS0gVmVyc2lvbiBJbmZvcm1hdGlvbiBmb3IgJHtuYW1lfSAoc3ludGF4OiBDL0MrKykiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIqKiAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiKi8iCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjaWZkZWYgXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiNpZm5kZWYgXyR7ZmlsZXN0cn1fIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2RlZmluZSBfJHtmaWxlc3RyfV8iCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjZGVmaW5lICR7cHJlZml4dXBwZXJ9VkVSU0lPTiAke3ZIZXh9IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAidHlwZWRlZiBzdHJ1Y3QgeyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBjb25zdCBpbnQgICB2X2hleDsiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9zaG9ydDsiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9sb25nOyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBjb25zdCBjaGFyICp2X3RleDsiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgY29uc3QgY2hhciAqdl9nbnU7IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIGNvbnN0IGNoYXIgKnZfd2ViOyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBjb25zdCBjaGFyICp2X3NjY3M7IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIGNvbnN0IGNoYXIgKnZfcmNzOyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIn0gJHtwcmVmaXh9dmVyc2lvbl90OyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgImV4dGVybiAke3ByZWZpeH12ZXJzaW9uX3QgJHtwcmVmaXh9dmVyc2lvbjsiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjZW5kaWYgLyogXyR7ZmlsZXN0cn1fICovIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2Vsc2UgLyogXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyAqLyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiNkZWZpbmUgXyR7ZmlsZXN0cn1fQVNfSEVBREVSXyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiNpbmNsdWRlIFwiJHtmaWxlfVwiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI3VuZGVmICBfJHtmaWxlc3RyfV9BU19IRUFERVJfIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiJHtwcmVmaXh9dmVyc2lvbl90ICR7cHJlZml4fXZlcnNpb24gPSB7IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICR7dkhleH0sIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2U2hvcnR9XCIsIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2TG9uZ31cIiwiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgXCIke3ZUZVh9XCIsIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIFwiJHt2R05VfVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBcIiR7dldlYn1cIiwiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgXCIke3ZTQ0NTfVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICBcIiR7dlJDU31cIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIn07IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiI2VuZGlmIC8qIF8ke2ZpbGVzdHJ9X0FTX0hFQURFUl8gKi8iCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIG00ICkKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiMjIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMgICR7ZmlsZX0gLS0gVmVyc2lvbiBJbmZvcm1hdGlvbiBmb3IgJHtuYW1lfSAoc3ludGF4OiBNNCkiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3ZfaGV4XSwgICBbJHt2SGV4fV0pIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAibTRfZGVmaW5lKFt2X3Nob3J0XSwgWyR7dlNob3J0fV0pIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAibTRfZGVmaW5lKFt2X2xvbmddLCAgWyR7dkxvbmd9XSkiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3ZfdGV4XSwgICBbJHt2VGVYfV0pIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAibTRfZGVmaW5lKFt2X2dudV0sICAgWyR7dkdOVX1dKSIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIm00X2RlZmluZShbdl93ZWJdLCAgIFske3ZXZWJ9XSkiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJtNF9kZWZpbmUoW3Zfc2Njc10sICBbJHt2U0NDU31dKSIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIm00X2RlZmluZShbdl9yY3NdLCAgIFske3ZSQ1N9XSkiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgIHBlcmwgKQorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgJHtmaWxlfSAtLSBWZXJzaW9uIEluZm9ybWF0aW9uIGZvciAke25hbWV9IChzeW50YXg6IFBlcmwpIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMgIFthdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBhbmQgbWFpbnRhaW5lZCBieSBHTlUgc2h0b29sXSIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiMjIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAib3VyIFwkJHtwcmVmaXh9dmVyc2lvbiA9IHsiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgJ3ZfaGV4JyAgID0+ICR7dkhleH0sIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X3Nob3J0JyA9PiBcIiR7dlNob3J0fVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl9sb25nJyAgPT4gXCIke3ZMb25nfVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl90ZXgnICAgPT4gXCIke3ZUZVh9XCIsIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgICd2X2dudScgICA9PiBcIiR7dkdOVX1cIiwiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgJ3Zfd2ViJyAgID0+IFwiJHt2V2VifVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl9zY2NzJyAgPT4gXCIke3ZTQ0NTfVwiLCIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICAndl9yY3MnICAgPT4gXCJcXCR7dlJDU30vXCIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJ9OyIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIjE7IgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIgorICAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICBweXRob24gKQorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgJHtmaWxlfSAtLSBWZXJzaW9uIEluZm9ybWF0aW9uIGZvciAke25hbWV9IChzeW50YXg6IFB5dGhvbikiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIjIyAgW2F1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IEdOVSBzaHRvb2xdIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiIyMiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICJjbGFzcyAke3ByZWZpeH12ZXJzaW9uOiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICB2X2hleCAgICAgICA9ICR7dkhleH0iCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgdl9zaG9ydCAgICAgPSBcIiR7dlNob3J0fVwiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfbG9uZyAgICAgID0gXCIke3ZMb25nfVwiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfdGV4ICAgICAgID0gXCIke3ZUZVh9XCIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIgICAgdl9nbnUgICAgICAgPSBcIiR7dkdOVX1cIiIKKyAgICAgICAgICAgICAgICBlY2hvID4+JGZpbGUgIiAgICB2X3dlYiAgICAgICA9IFwiJHt2V2VifVwiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfc2NjcyAgICAgID0gXCIke3ZTQ0NTfVwiIgorICAgICAgICAgICAgICAgIGVjaG8gPj4kZmlsZSAiICAgIHZfcmNzICAgICAgID0gXCIke3ZSQ1N9XCIiCisgICAgICAgICAgICAgICAgZWNobyA+PiRmaWxlICIiCisgICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICogKSBlY2hvICIkbXNncHJlZml4OkVycm9yOiBpbnZhbGlkIGFyZ3VtZW50IHRvIG9wdGlvbiBcYC1sJzogXGAkb3B0X2wnIiAxPiYyCisgICAgICAgICAgICAgICAgc2h0b29sX2V4aXQgMQorICAgICAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICBmaQorCisgICAgc2h0b29sX2V4aXQgMAorICAgIDs7CisKK3BhdGggKQorICAgICMjCisgICAgIyMgIHBhdGggLS0gRGVhbCB3aXRoIHByb2dyYW0gcGF0aHMKKyAgICAjIyAgQ29weXJpZ2h0IChjKSAxOTk4LTIwMDYgUmFsZiBTLiBFbmdlbHNjaGFsbCA8cnNlQGVuZ2Vsc2NoYWxsLmNvbT4KKyAgICAjIworCisgICAgbmFtZWxpc3Q9IiQqIgorCisgICAgIyAgIGNoZWNrIHdoZXRoZXIgdGhlIHRlc3QgY29tbWFuZCBzdXBwb3J0cyB0aGUgLXggb3B0aW9uCisgICAgaWYgWyAteCAvYmluL3NoIF0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgbWludXN4PSIteCIKKyAgICBlbHNlCisgICAgICAgIG1pbnVzeD0iLXIiCisgICAgZmkKKworICAgICMgICBzcGxpdCBwYXRoIHN0cmluZworICAgIHBhdGhzPSJgZWNobyAkb3B0X3AgfFwKKyAgICAgICAgICAgIHNlZCAtZSAncy9eOi8uOi8nIFwKKyAgICAgICAgICAgICAgICAtZSAncy86Oi86LjovZycgXAorICAgICAgICAgICAgICAgIC1lICdzLzokLzouLycgXAorICAgICAgICAgICAgICAgIC1lICdzLzovIC9nJ2AiCisKKyAgICAjICAgU1BFQ0lBTCBSRVFVRVNUCisgICAgIyAgIHRyYW5zbGF0ZSBmb3J3YXJkIHRvIHJldmVyc2UgcGF0aAorICAgIGlmIFsgIi4kb3B0X3IiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGlmIFsgIngkbmFtZWxpc3QiID0gInguIiBdOyB0aGVuCisgICAgICAgICAgICBycD0nLicKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcnA9JycKKyAgICAgICAgICAgIGZvciBwZSBpbiBgSUZTPSIkSUZTLyI7IGVjaG8gJG5hbWVsaXN0YDsgZG8KKyAgICAgICAgICAgICAgICBycD0iLi4vJHJwIgorICAgICAgICAgICAgZG9uZQorICAgICAgICBmaQorICAgICAgICBlY2hvICRycCB8IHNlZCAtZSAnczovJDo6JworICAgICAgICBzaHRvb2xfZXhpdCAwCisgICAgZmkKKworICAgICMgICBTUEVDSUFMIFJFUVVFU1QKKyAgICAjICAgc3RyaXAgb3V0IGRpcmVjdG9yeSBvciBiYXNlIG5hbWUKKyAgICBpZiBbICIuJG9wdF9kIiA9IC55ZXMgXTsgdGhlbgorICAgICAgICBlY2hvICIkbmFtZWxpc3QiIHxcCisgICAgICAgIHNlZCAtZSAncztbXi9dKiQ7OycgLWUgJ3M7XCguXCkvJDtcMTsnCisgICAgICAgIHNodG9vbF9leGl0IDAKKyAgICBmaQorICAgIGlmIFsgIi4kb3B0X2IiID0gLnllcyBdOyB0aGVuCisgICAgICAgIGVjaG8gIiRuYW1lbGlzdCIgfFwKKyAgICAgICAgc2VkIC1lICdzOy4qL1woW14vXSpcKSQ7XDE7JworICAgICAgICBzaHRvb2xfZXhpdCAwCisgICAgZmkKKworICAgICMgICBNQUdJQyBTSVRVQVRJT04KKyAgICAjICAgUGVybCBJbnRlcnByZXRlciAocGVybCkKKyAgICBpZiBbICIuJG9wdF9tIiA9IC55ZXMgXSAmJiBbICIuJG5hbWVsaXN0IiA9IC5wZXJsIF07IHRoZW4KKyAgICAgICAgcm0gLWYgJHRtcGZpbGUgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgIHRvdWNoICR0bXBmaWxlCisgICAgICAgIGZvdW5kPTAKKyAgICAgICAgcGM9OTkKKyAgICAgICAgZm9yIGRpciBpbiAkcGF0aHM7IGRvCisgICAgICAgICAgICBkaXI9YGVjaG8gJGRpciB8IHNlZCAtZSAnczsvKiQ7OydgCisgICAgICAgICAgICBuYz05OQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gcGVybCBwZXJsNSBtaW5pcGVybDsgZG8KKyAgICAgICAgICAgICAgICAgaWYgWyAkbWludXN4ICIkZGlyLyRuYW1lIiBdICYmIFsgISAtZCAiJGRpci8kbmFtZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAgcGVybD0iJGRpci8kbmFtZSIKKyAgICAgICAgICAgICAgICAgICAgIHB2PWAkcGVybCAtZSAncHJpbnRmKCIlLjNmIiwgJF0pOydgCisgICAgICAgICAgICAgICAgICAgICBlY2hvICIkcHY6JHBjOiRuYzokcGVybCIgPj4kdG1wZmlsZQorICAgICAgICAgICAgICAgICAgICAgZm91bmQ9MQorICAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgICBuYz1gZXhwciAkbmMgLSAxYAorICAgICAgICAgICAgZG9uZQorICAgICAgICAgICAgcGM9YGV4cHIgJHBjIC0gMWAKKyAgICAgICAgZG9uZQorICAgICAgICBpZiBbICRmb3VuZCA9IDEgXTsgdGhlbgorICAgICAgICAgICAgcGVybD0iYGNhdCAkdG1wZmlsZSB8IHNvcnQgLXIgLXUgfCBzZWQgLWUgJ3EnIHwgY3V0IC1kOiAtZjRgIgorICAgICAgICAgICAgcm0gLWYgJHRtcGZpbGUgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgICAgICBlY2hvICIkcGVybCIKKyAgICAgICAgICAgIHNodG9vbF9leGl0IDAKKyAgICAgICAgZmkKKyAgICAgICAgcm0gLWYgJHRtcGZpbGUgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgIHNodG9vbF9leGl0IDEKKyAgICBmaQorCisgICAgIyAgIE1BR0lDIFNJVFVBVElPTgorICAgICMgICBDIHByZS1wcm9jZXNzb3IgKGNwcCkKKyAgICBpZiBbICIuJG9wdF9tIiA9IC55ZXMgXSAmJiBbICIuJG5hbWVsaXN0IiA9IC5jcHAgXTsgdGhlbgorICAgICAgICBlY2hvID4kdG1wZmlsZS5jICIjaW5jbHVkZSA8YXNzZXJ0Lmg+IgorICAgICAgICBlY2hvID4+JHRtcGZpbGUuYyAiU3ludGF4IEVycm9yIgorICAgICAgICAjICAgMS4gdHJ5IHRoZSBzdGFuZGFyZCBjYyAtRSBhcHByb2FjaAorICAgICAgICBjcHA9IiR7Q0MtY2N9IC1FIgorICAgICAgICAoZXZhbCAiJGNwcCAkdG1wZmlsZS5jID4vZGV2L251bGwiKSAyPiR0bXBmaWxlLm91dAorICAgICAgICBteV9lcnJvcj1gZ3JlcCAtdiAnXiAqKycgJHRtcGZpbGUub3V0YAorICAgICAgICBpZiBbICIuJG15X2Vycm9yIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICMgICAyLiB0cnkgdGhlIGNjIC1FIGFwcHJvYWNoIGFuZCBHQ0MncyAtdHJhZGl0aW9uYWwtY2NwIG9wdGlvbgorICAgICAgICAgICAgY3BwPSIke0NDLWNjfSAtRSAtdHJhZGl0aW9uYWwtY3BwIgorICAgICAgICAgICAgKGV2YWwgIiRjcHAgJHRtcGZpbGUuYyA+L2Rldi9udWxsIikgMj4kdG1wZmlsZS5vdXQKKyAgICAgICAgICAgIG15X2Vycm9yPWBncmVwIC12ICdeICorJyAkdG1wZmlsZS5vdXRgCisgICAgICAgICAgICBpZiBbICIuJG15X2Vycm9yIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAjICAgMy4gdHJ5IGEgc3RhbmRhbG9uZSBjcHAgY29tbWFuZCBpbiBwYXRoIGFuZCBsaWIgZGlycworICAgICAgICAgICAgICAgIGZvciBwYXRoIGluICRwYXRocyAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliOyBkbworICAgICAgICAgICAgICAgICAgICBwYXRoPWBlY2hvICRwYXRoIHwgc2VkIC1lICdzOy8qJDs7J2AKKyAgICAgICAgICAgICAgICAgICAgaWYgWyAkbWludXN4ICIkcGF0aC9jcHAiIF0gJiYgWyAhIC1kICIkcGF0aC9jcHAiIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgIGNwcD0iJHBhdGgvY3BwIgorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgICAgICBkb25lCisgICAgICAgICAgICAgICAgaWYgWyAiLiRjcHAiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICAoZXZhbCAiJGNwcCAkdG1wZmlsZS5jID4vZGV2L251bGwiKSAyPiR0bXBmaWxlLm91dAorICAgICAgICAgICAgICAgICAgICBteV9lcnJvcj1gZ3JlcCAtdiAnXiAqKycgJHRtcGZpbGUub3V0YAorICAgICAgICAgICAgICAgICAgICBpZiBbICIuJG15X2Vycm9yIiAhPSAuIF07IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgICBvaywgd2UgZ2F2ZSB1cC4uLgorICAgICAgICAgICAgICAgICAgICAgICAgY3BwPScnCisgICAgICAgICAgICAgICAgICAgIGZpCisgICAgICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIGZpCisgICAgICAgIGZpCisgICAgICAgIHJtIC1mICR0bXBmaWxlID4vZGV2L251bGwgMj4mMQorICAgICAgICBybSAtZiAkdG1wZmlsZS5jICR0bXBmaWxlLm91dCA+L2Rldi9udWxsIDI+JjEKKyAgICAgICAgaWYgWyAiLiRjcHAiICE9IC4gXTsgdGhlbgorICAgICAgICAgICAgZWNobyAiJGNwcCIKKyAgICAgICAgICAgIHNodG9vbF9leGl0IDAKKyAgICAgICAgZmkKKyAgICAgICAgc2h0b29sX2V4aXQgMQorICAgIGZpCisKKyAgICAjICAgU1RBTkRBUkQgU0lUVUFUSU9OCisgICAgIyAgIGl0ZXJhdGUgb3ZlciBuYW1lcworICAgIGZvciBuYW1lIGluICRuYW1lbGlzdDsgZG8KKyAgICAgICAgIyAgIGl0ZXJhdGUgb3ZlciBwYXRocworICAgICAgICBmb3IgcGF0aCBpbiAkcGF0aHM7IGRvCisgICAgICAgICAgICBwYXRoPWBlY2hvICRwYXRoIHwgc2VkIC1lICdzOy8qJDs7J2AKKyAgICAgICAgICAgIGlmIFsgJG1pbnVzeCAiJHBhdGgvJG5hbWUiIF0gJiYgWyAhIC1kICIkcGF0aC8kbmFtZSIgXTsgdGhlbgorICAgICAgICAgICAgICAgIGlmIFsgIi4kb3B0X3MiICE9IC55ZXMgXTsgdGhlbgorICAgICAgICAgICAgICAgICAgICBlY2hvICIkcGF0aC8kbmFtZSIKKyAgICAgICAgICAgICAgICBmaQorICAgICAgICAgICAgICAgIHNodG9vbF9leGl0IDAKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBkb25lCisKKyAgICBzaHRvb2xfZXhpdCAxCisgICAgOzsKKworZXNhYworCitzaHRvb2xfZXhpdCAwCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2F1dG9jb25mL3lsd3JhcCBiL2x6by0yLjAzL2F1dG9jb25mL3lsd3JhcApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iYjU4OTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvYXV0b2NvbmYveWx3cmFwCkBAIC0wLDAgKzEsMjIxIEBACisjISAvYmluL3NoCisjIHlsd3JhcCAtIHdyYXBwZXIgZm9yIGxleC95YWNjIGludm9jYXRpb25zLgorCitzY3JpcHR2ZXJzaW9uPTIwMDctMTEtMjIuMjIKKworIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCisjIDIwMDcgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBXcml0dGVuIGJ5IFRvbSBUcm9tZXkgPHRyb21leUBjeWdudXMuY29tPi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMywgb3IgKGF0IHlvdXIgb3B0aW9uKQorIyBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyMgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyMKKyMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGlmIHlvdQorIyBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIGEKKyMgY29uZmlndXJhdGlvbiBzY3JpcHQgZ2VuZXJhdGVkIGJ5IEF1dG9jb25mLCB5b3UgbWF5IGluY2x1ZGUgaXQgdW5kZXIKKyMgdGhlIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorCisjIFRoaXMgZmlsZSBpcyBtYWludGFpbmVkIGluIEF1dG9tYWtlLCBwbGVhc2UgcmVwb3J0CisjIGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPiBvciBzZW5kIHBhdGNoZXMgdG8KKyMgPGF1dG9tYWtlLXBhdGNoZXNAZ251Lm9yZz4uCisKK2Nhc2UgIiQxIiBpbgorICAnJykKKyAgICBlY2hvICIkMDogTm8gZmlsZXMgZ2l2ZW4uICBUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgorICAgIGV4aXQgMQorICAgIDs7CisgIC0tYmFzZWRpcikKKyAgICBiYXNlZGlyPSQyCisgICAgc2hpZnQgMgorICAgIDs7CisgIC1ofC0taCopCisgICAgY2F0IDw8XEVPRgorVXNhZ2U6IHlsd3JhcCBbLS1oZWxwfC0tdmVyc2lvbl0gSU5QVVQgW09VVFBVVCBERVNJUkVEXS4uLiAtLSBQUk9HUkFNIFtBUkdTXS4uLgorCitXcmFwcGVyIGZvciBsZXgveWFjYyBpbnZvY2F0aW9ucywgcmVuYW1pbmcgZmlsZXMgYXMgZGVzaXJlZC4KKworICBJTlBVVCBpcyB0aGUgaW5wdXQgZmlsZQorICBPVVRQVVQgaXMgb25lIGZpbGUgUFJPRyBnZW5lcmF0ZXMKKyAgREVTSVJFRCBpcyB0aGUgZmlsZSB3ZSBhY3R1YWxseSB3YW50IGluc3RlYWQgb2YgT1VUUFVUCisgIFBST0dSQU0gaXMgcHJvZ3JhbSB0byBydW4KKyAgQVJHUyBhcmUgcGFzc2VkIHRvIFBST0cKKworQW55IG51bWJlciBvZiBPVVRQVVQsREVTSVJFRCBwYWlycyBtYXkgYmUgdXNlZC4KKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvbWFrZUBnbnUub3JnPi4KK0VPRgorICAgIGV4aXQgJD8KKyAgICA7OworICAtdnwtLXYqKQorICAgIGVjaG8gInlsd3JhcCAkc2NyaXB0dmVyc2lvbiIKKyAgICBleGl0ICQ/CisgICAgOzsKK2VzYWMKKworCisjIFRoZSBpbnB1dC4KK2lucHV0PSIkMSIKK3NoaWZ0CitjYXNlICIkaW5wdXQiIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICAgICMgQWJzb2x1dGUgcGF0aDsgZG8gbm90aGluZy4KKyAgICA7OworICAqKQorICAgICMgUmVsYXRpdmUgcGF0aC4gIE1ha2UgaXQgYWJzb2x1dGUuCisgICAgaW5wdXQ9ImBwd2RgLyRpbnB1dCIKKyAgICA7OworZXNhYworCitwYWlybGlzdD0KK3doaWxlIHRlc3QgIiQjIiAtbmUgMDsgZG8KKyAgaWYgdGVzdCAiJDEiID0gIi0tIjsgdGhlbgorICAgIHNoaWZ0CisgICAgYnJlYWsKKyAgZmkKKyAgcGFpcmxpc3Q9IiRwYWlybGlzdCAkMSIKKyAgc2hpZnQKK2RvbmUKKworIyBUaGUgcHJvZ3JhbSB0byBydW4uCitwcm9nPSIkMSIKK3NoaWZ0CisjIE1ha2UgYW55IHJlbGF0aXZlIHBhdGggaW4gJHByb2cgYWJzb2x1dGUuCitjYXNlICIkcHJvZyIgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopIDs7CisgICpbXFwvXSopIHByb2c9ImBwd2RgLyRwcm9nIiA7OworZXNhYworCisjIEZJWE1FOiBhZGQgaG9zdG5hbWUgaGVyZSBmb3IgcGFyYWxsZWwgbWFrZXMgdGhhdCBydW4gY29tbWFuZHMgb24KKyMgb3RoZXIgbWFjaGluZXMuICBCdXQgdGhhdCBtaWdodCB0YWtlIHVzIG92ZXIgdGhlIDE0LWNoYXIgbGltaXQuCitkaXJuYW1lPXlsd3JhcCQkCit0cmFwICJjZCAnYHB3ZGAnOyBybSAtcmYgJGRpcm5hbWUgPiAvZGV2L251bGwgMj4mMSIgMSAyIDMgMTUKK21rZGlyICRkaXJuYW1lIHx8IGV4aXQgMQorCitjZCAkZGlybmFtZQorCitjYXNlICQjIGluCisgIDApICIkcHJvZyIgIiRpbnB1dCIgOzsKKyAgKikgIiRwcm9nIiAiJEAiICIkaW5wdXQiIDs7Citlc2FjCityZXQ9JD8KKworaWYgdGVzdCAkcmV0IC1lcSAwOyB0aGVuCisgIHNldCBYICRwYWlybGlzdAorICBzaGlmdAorICBmaXJzdD15ZXMKKyAgIyBTaW5jZSBET1MgZmlsZW5hbWUgY29udmVudGlvbnMgZG9uJ3QgYWxsb3cgdHdvIGRvdHMsCisgICMgdGhlIERPUyB2ZXJzaW9uIG9mIEJpc29uIHdyaXRlcyBvdXQgeV90YWIuYyBpbnN0ZWFkIG9mIHkudGFiLmMKKyAgIyBhbmQgeV90YWIuaCBpbnN0ZWFkIG9mIHkudGFiLmguIFRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgdGhlIGNhc2UuCisgIHlfdGFiX25vZG90PSJubyIKKyAgaWYgdGVzdCAtZiB5X3RhYi5jIHx8IHRlc3QgLWYgeV90YWIuaDsgdGhlbgorICAgIHlfdGFiX25vZG90PSJ5ZXMiCisgIGZpCisKKyAgIyBUaGUgZGlyZWN0b3J5IGhvbGRpbmcgdGhlIGlucHV0LgorICBpbnB1dF9kaXI9YGVjaG8gIiRpbnB1dCIgfCBzZWQgLWUgJ3MsXChbXFwvXVwpW15cXC9dKiQsXDEsJ2AKKyAgIyBRdW90ZSAkSU5QVVRfRElSIHNvIHdlIGNhbiB1c2UgaXQgaW4gYSByZWdleHAuCisgICMgRklYTUU6IHJlYWxseSB3ZSBzaG91bGQgY2FyZSBhYm91dCBtb3JlIHRoYW4gYC4nIGFuZCBgXCcuCisgIGlucHV0X3J4PWBlY2hvICIkaW5wdXRfZGlyIiB8IHNlZCAncyxcXFxcLFxcXFxcXFxcLGc7cyxcXC4sXFxcXC4sZydgCisKKyAgd2hpbGUgdGVzdCAiJCMiIC1uZSAwOyBkbworICAgIGZyb209IiQxIgorICAgICMgSGFuZGxlIHlfdGFiLmMgYW5kIHlfdGFiLmggb3V0cHV0IGJ5IERPUworICAgIGlmIHRlc3QgJHlfdGFiX25vZG90ID0gInllcyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgJGZyb20gPSAieS50YWIuYyI7IHRoZW4KKyAgICAJZnJvbT0ieV90YWIuYyIKKyAgICAgIGVsc2UKKyAgICAJaWYgdGVzdCAkZnJvbSA9ICJ5LnRhYi5oIjsgdGhlbgorICAgIAkgIGZyb209InlfdGFiLmgiCisgICAgCWZpCisgICAgICBmaQorICAgIGZpCisgICAgaWYgdGVzdCAtZiAiJGZyb20iOyB0aGVuCisgICAgICAjIElmICQyIGlzIGFuIGFic29sdXRlIHBhdGggbmFtZSwgdGhlbiBqdXN0IHVzZSB0aGF0LAorICAgICAgIyBvdGhlcndpc2UgcHJlcGVuZCBgLi4vJy4KKyAgICAgIGNhc2UgIiQyIiBpbgorICAgIAlbXFwvXSogfCA/OltcXC9dKikgdGFyZ2V0PSIkMiI7OworICAgIAkqKSB0YXJnZXQ9Ii4uLyQyIjs7CisgICAgICBlc2FjCisKKyAgICAgICMgV2UgZG8gbm90IHdhbnQgdG8gb3ZlcndyaXRlIGEgaGVhZGVyIGZpbGUgaWYgaXQgaGFzbid0CisgICAgICAjIGNoYW5nZWQuICBUaGlzIGF2b2lkIHVzZWxlc3MgcmVjb21waWxhdGlvbnMuICBIb3dldmVyIHRoZQorICAgICAgIyBwYXJzZXIgaXRzZWxmICh0aGUgZmlyc3QgZmlsZSkgc2hvdWxkIGFsd2F5cyBiZSB1cGRhdGVkLAorICAgICAgIyBiZWNhdXNlIGl0IGlzIHRoZSBkZXN0aW5hdGlvbiBvZiB0aGUgLnkuYyBydWxlIGluIHRoZQorICAgICAgIyBNYWtlZmlsZS4gIERpdmVydCB0aGUgb3V0cHV0IG9mIGFsbCBvdGhlciBmaWxlcyB0byBhIHRlbXBvcmFyeQorICAgICAgIyBmaWxlIHNvIHdlIGNhbiBjb21wYXJlIHRoZW0gdG8gZXhpc3RpbmcgdmVyc2lvbnMuCisgICAgICBpZiB0ZXN0ICRmaXJzdCA9IG5vOyB0aGVuCisJcmVhbHRhcmdldD0iJHRhcmdldCIKKwl0YXJnZXQ9InRtcC1gZWNobyAkdGFyZ2V0IHwgc2VkIHMvLipbXFwvXS8vZ2AiCisgICAgICBmaQorICAgICAgIyBFZGl0IG91dCBgI2xpbmUnIG9yIGAjJyBkaXJlY3RpdmVzLgorICAgICAgIworICAgICAgIyBXZSBkb24ndCB3YW50IHRoZSByZXN1bHRpbmcgZGVidWcgaW5mb3JtYXRpb24gdG8gcG9pbnQgYXQKKyAgICAgICMgYW4gYWJzb2x1dGUgc3JjZGlyOyBpdCBpcyBiZXR0ZXIgZm9yIGl0IHRvIGp1c3QgbWVudGlvbiB0aGUKKyAgICAgICMgLnkgZmlsZSB3aXRoIG5vIHBhdGguCisgICAgICAjCisgICAgICAjIFdlIHdhbnQgdG8gdXNlIHRoZSByZWFsIG91dHB1dCBmaWxlIG5hbWUsIG5vdCB5eS5sZXguYyBmb3IKKyAgICAgICMgaW5zdGFuY2UuCisgICAgICAjCisgICAgICAjIFdlIHdhbnQgdGhlIGluY2x1ZGUgZ3VhcmRzIHRvIGJlIGFkanVzdGVkIHRvby4KKyAgICAgIEZST009YGVjaG8gIiRmcm9tIiB8IHNlZCBcCisgICAgICAgICAgICAtZSAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nXAorICAgICAgICAgICAgLWUgJ3MvW15BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl0vXy9nJ2AKKyAgICAgIFRBUkdFVD1gZWNobyAiJDIiIHwgc2VkIFwKKyAgICAgICAgICAgIC1lICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydcCisgICAgICAgICAgICAtZSAncy9bXkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaXS9fL2cnYAorCisgICAgICBzZWQgLWUgIi9eIy8hYiIgLWUgInMsJGlucHV0X3J4LCwiIC1lICJzLCRmcm9tLCQyLCIgXAorICAgICAgICAgIC1lICJzLCRGUk9NLCRUQVJHRVQsIiAiJGZyb20iID4iJHRhcmdldCIgfHwgcmV0PSQ/CisKKyAgICAgICMgQ2hlY2sgd2hldGhlciBoZWFkZXIgZmlsZXMgbXVzdCBiZSB1cGRhdGVkLgorICAgICAgaWYgdGVzdCAkZmlyc3QgPSBubzsgdGhlbgorCWlmIHRlc3QgLWYgIiRyZWFsdGFyZ2V0IiAmJiBjbXAgLXMgIiRyZWFsdGFyZ2V0IiAiJHRhcmdldCI7IHRoZW4KKwkgIGVjaG8gIiQyIiBpcyB1bmNoYW5nZWQKKwkgIHJtIC1mICIkdGFyZ2V0IgorCWVsc2UKKyAgICAgICAgICBlY2hvIHVwZGF0aW5nICIkMiIKKyAgICAgICAgICBtdiAtZiAiJHRhcmdldCIgIiRyZWFsdGFyZ2V0IgorICAgICAgICBmaQorICAgICAgZmkKKyAgICBlbHNlCisgICAgICAjIEEgbWlzc2luZyBmaWxlIGlzIG9ubHkgYW4gZXJyb3IgZm9yIHRoZSBmaXJzdCBmaWxlLiAgVGhpcworICAgICAgIyBpcyBhIGJsYXRhbnQgaGFjayB0byBsZXQgdXMgc3VwcG9ydCB1c2luZyAieWFjYyAtZCIuICBJZiAtZAorICAgICAgIyBpcyBub3Qgc3BlY2lmaWVkLCB3ZSBkb24ndCB3YW50IGFuIGVycm9yIHdoZW4gdGhlIGhlYWRlcgorICAgICAgIyBmaWxlIGlzICJtaXNzaW5nIi4KKyAgICAgIGlmIHRlc3QgJGZpcnN0ID0geWVzOyB0aGVuCisgICAgICAgIHJldD0xCisgICAgICBmaQorICAgIGZpCisgICAgc2hpZnQKKyAgICBzaGlmdAorICAgIGZpcnN0PW5vCisgIGRvbmUKK2Vsc2UKKyAgcmV0PSQ/CitmaQorCisjIFJlbW92ZSB0aGUgZGlyZWN0b3J5LgorY2QgLi4KK3JtIC1yZiAkZGlybmFtZQorCitleGl0ICRyZXQKKworIyBMb2NhbCBWYXJpYWJsZXM6CisjIG1vZGU6IHNoZWxsLXNjcmlwdAorIyBzaC1pbmRlbnRhdGlvbjogMgorIyBldmFsOiAoYWRkLWhvb2sgJ3dyaXRlLWZpbGUtaG9va3MgJ3RpbWUtc3RhbXApCisjIHRpbWUtc3RhbXAtc3RhcnQ6ICJzY3JpcHR2ZXJzaW9uPSIKKyMgdGltZS1zdGFtcC1mb3JtYXQ6ICIlOnktJTAybS0lMDJkLiUwMkgiCisjIHRpbWUtc3RhbXAtZW5kOiAiJCIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvY29uZmlnLmhpbiBiL2x6by0yLjAzL2NvbmZpZy5oaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2I5YzhhNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2NvbmZpZy5oaW4KQEAgLTAsMCArMSwzNjQgQEAKKy8qIGNvbmZpZy5oaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuYWMgYnkgYXV0b2hlYWRlci4gICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWNjZXNzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FDQ0VTUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsbG9jYScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BTExPQ0EKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxhc3NlcnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9BU1NFUlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGF0ZXhpdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9BVEVYSVQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdG9pJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FUT0kKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBhdG9sJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0FUT0wKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjaG1vZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DSE1PRAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNob3duJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NIT1dOCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9DTE9DS19HRVRDUFVDTE9DS0lECisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0cmVzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT0NLX0dFVFJFUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb2NrX2dldHRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGN0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y3R5cGUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9DVFlQRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGlmZnRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRElGRlRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ESVJFTlRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRExGQ05fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGVycm5vLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRVJSTk9fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkNOVExfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZsb2F0Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfRkxPQVRfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZzdGF0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0ZTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0ZW52JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVEVOVgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHBhZ2VzaXplJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFBBR0VTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0cnVzYWdlJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0dFVFJVU0FHRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHRpbWVvZmRheScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnbXRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR01USU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW50dHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTlRUWVBFU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaXNhdHR5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lTQVRUWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0xJTUlUU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbG9jYWx0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xPQ0FMVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvbmdqbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTE9OR0pNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxzdGF0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0xTVEFUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTUFMTE9DX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jbXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTUNQWQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTUVNTU9WRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX01FTU9SWV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtc2V0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01FTVNFVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1rZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01LRElSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWt0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01LVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1tYXAnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfTU1BUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1wcm90ZWN0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01QUk9URUNUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbXVubWFwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX01VTk1BUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHFzb3J0JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1FTT1JUCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcmFpc2UnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUkFJU0UKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBybWRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9STURJUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGptcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TRVRKTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZXRqbXAuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TRVRKTVBfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ25hbCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TSUdOQUwKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzaWduYWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TSUdOQUxfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NOUFJJTlRGCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYXJnLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1REQVJHX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRkZWYuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERERUZfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGludC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NURElOVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW8uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TVERJT19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkbGliLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RETElCX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjYXNlY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkNBU0VDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJjaHInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkRVUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmVycm9yJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUkVSUk9SCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZnRpbWUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSRlRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJpY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUklDTVAKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdHJpbmdzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RyaW5nLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1RSSU5HX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJuY2FzZWNtcCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJOQ0FTRUNNUAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cm5pY21wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUk5JQ01QCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RycmNocicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9TVFJSQ0hSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3Ryc3RyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1NUUlNUUgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9tbWFuLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX01NQU5fSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9yZXNvdXJjZS5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19SRVNPVVJDRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3RpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvd2FpdC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19XQUlUX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1RJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx0aW1lLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdW1hc2snIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfVU1BU0sKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VTklTVERfSAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHV0aW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1VUSU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXRpbWUuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9VVElNRV9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgdnNucHJpbnRmJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1ZTTlBSSU5URgorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIG1hY2hpbmUgaXMgYmlnIGVuZGlhbi4gKi8KKyN1bmRlZiBMWk9fQUJJX0JJR19FTkRJQU4KKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBtYWNoaW5lIGlzIGxpdHRsZSBlbmRpYW4uICovCisjdW5kZWYgTFpPX0FCSV9MSVRUTEVfRU5ESUFOCisKKy8qIE5hbWUgb2YgcGFja2FnZSAqLworI3VuZGVmIFBBQ0tBR0UKKworLyogRGVmaW5lIHRvIHRoZSBhZGRyZXNzIHdoZXJlIGJ1ZyByZXBvcnRzIGZvciB0aGlzIHBhY2thZ2Ugc2hvdWxkIGJlIHNlbnQuICovCisjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKKworLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKworLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQorCisvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorCisvKiBEZWZpbmUgYXMgdGhlIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyAoYGludCcgb3IgYHZvaWQnKS4gKi8KKyN1bmRlZiBSRVRTSUdUWVBFCisKKy8qIFRoZSBzaXplIG9mIGEgYGRldl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9ERVZfVAorCisvKiBUaGUgc2l6ZSBvZiBhIGBkb3VibGUnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0RPVUJMRQorCisvKiBUaGUgc2l6ZSBvZiBhIGBmbG9hdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfRkxPQVQKKworLyogVGhlIHNpemUgb2YgYSBgZnBvc190JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9GUE9TX1QKKworLyogVGhlIHNpemUgb2YgYSBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9JTlQKKworLyogVGhlIHNpemUgb2YgYSBgaW50bWF4X3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0lOVE1BWF9UCisKKy8qIFRoZSBzaXplIG9mIGEgYGludHB0cl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9JTlRQVFJfVAorCisvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9MT05HCisKKy8qIFRoZSBzaXplIG9mIGEgYGxvbmcgZG91YmxlJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9MT05HX0RPVUJMRQorCisvKiBUaGUgc2l6ZSBvZiBhIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX0xPTkdfTE9ORworCisvKiBUaGUgc2l6ZSBvZiBhIGBtb2RlX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX01PREVfVAorCisvKiBUaGUgc2l6ZSBvZiBhIGBvZmZfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfT0ZGX1QKKworLyogVGhlIHNpemUgb2YgYSBgcHRyZGlmZl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9QVFJESUZGX1QKKworLyogVGhlIHNpemUgb2YgYSBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NIT1JUCisKKy8qIFRoZSBzaXplIG9mIGEgYHNpemVfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfU0laRV9UCisKKy8qIFRoZSBzaXplIG9mIGEgYHNzaXplX3QnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX1NTSVpFX1QKKworLyogVGhlIHNpemUgb2YgYSBgdGltZV90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9USU1FX1QKKworLyogVGhlIHNpemUgb2YgYSBgdWludG1heF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9VSU5UTUFYX1QKKworLyogVGhlIHNpemUgb2YgYSBgdWludHB0cl90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9VSU5UUFRSX1QKKworLyogVGhlIHNpemUgb2YgYSBgdm9pZCAqJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9WT0lEX1AKKworLyogVGhlIHNpemUgb2YgYSBgX19pbnQxNicsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyN1bmRlZiBTSVpFT0ZfX19JTlQxNgorCisvKiBUaGUgc2l6ZSBvZiBhIGBfX2ludDMyJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9fX0lOVDMyCisKKy8qIFRoZSBzaXplIG9mIGEgYF9faW50NjQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCisjdW5kZWYgU0laRU9GX19fSU5UNjQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIEFOU0kgQyBoZWFkZXIgZmlsZXMuICovCisjdW5kZWYgU1REQ19IRUFERVJTCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLworI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQorCisvKiBWZXJzaW9uIG51bWJlciBvZiBwYWNrYWdlICovCisjdW5kZWYgVkVSU0lPTgorCisvKiBOdW1iZXIgb2YgYml0cyBpbiBhIGZpbGUgb2Zmc2V0LCBvbiBob3N0cyB3aGVyZSB0aGlzIGlzIHNldHRhYmxlLiAqLworI3VuZGVmIF9GSUxFX09GRlNFVF9CSVRTCisKKy8qIERlZmluZSBmb3IgbGFyZ2UgZmlsZXMsIG9uIEFJWC1zdHlsZSBob3N0cy4gKi8KKyN1bmRlZiBfTEFSR0VfRklMRVMKKworLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCisjdW5kZWYgY29uc3QKKworLyogRGVmaW5lIHRvIGBsb25nJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBvZmZfdAorCisvKiBEZWZpbmUgdG8gYGxvbmcnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLworI3VuZGVmIHB0cmRpZmZfdAorCisvKiBEZWZpbmUgdG8gYHVuc2lnbmVkJyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2NvbmZpZ3VyZSBiL2x6by0yLjAzL2NvbmZpZ3VyZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iNzdjM2FkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvY29uZmlndXJlCkBAIC0wLDAgKzEsMzE4MDcgQEAKKyMhIC9iaW4vc2gKKyMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5IGZvciBsem8gMi4wMy4KKyMKKyMgUmVwb3J0IGJ1Z3MgdG8gPG1hcmt1c0BvYmVyaHVtZXIuY29tPi4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lci4KKyMgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMgVGhpcyBjb25maWd1cmUgc2NyaXB0IG1heSBiZSBjb3BpZWQsIGRpc3RyaWJ1dGVkIGFuZCBtb2RpZmllZCB1bmRlciB0aGUKKyMgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlOyBzZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKworIyBCZSBCb3VybmUgY29tcGF0aWJsZQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGVtdWxhdGUgc2gKKyAgTlVMTENNRD06CisgICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBpcyBjb250cmFyeSB0byBvdXIgdXNhZ2UuICBEaXNhYmxlIHRoaXMgZmVhdHVyZS4KKyAgYWxpYXMgLWcgJyR7MSsiJEAifSc9JyIkQCInCitlbGlmIHRlc3QgLW4gIiR7QkFTSF9WRVJTSU9OK3NldH0iICYmIChzZXQgLW8gcG9zaXgpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBzZXQgLW8gcG9zaXgKK2ZpCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCisKKyMgU3VwcG9ydCB1bnNldCB3aGVuIHBvc3NpYmxlLgoraWYgKCAoTUFJTD02MDsgdW5zZXQgTUFJTCkgfHwgZXhpdCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX3Vuc2V0PXVuc2V0CitlbHNlCisgIGFzX3Vuc2V0PWZhbHNlCitmaQorCisKKyMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgorJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICitQUzE9JyQgJworUFMyPSc+ICcKK1BTND0nKyAnCisKKyMgTkxTIG51aXNhbmNlcy4KK2ZvciBhc192YXIgaW4gXAorICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAorICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAorICBMQ19URUxFUEhPTkUgTENfVElNRQorZG8KKyAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KKyAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKKyAgZWxzZQorICAgICRhc191bnNldCAkYXNfdmFyCisgIGZpCitkb25lCisKKyMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgoraWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZXhwcj1leHByCitlbHNlCisgIGFzX2V4cHI9ZmFsc2UKK2ZpCisKK2lmIChiYXNlbmFtZSAvKSA+L2Rldi9udWxsIDI+JjEgJiYgdGVzdCAiWGBiYXNlbmFtZSAvIDI+JjFgIiA9ICJYLyI7IHRoZW4KKyAgYXNfYmFzZW5hbWU9YmFzZW5hbWUKK2Vsc2UKKyAgYXNfYmFzZW5hbWU9ZmFsc2UKK2ZpCisKKworIyBOYW1lIG9mIHRoZSBleGVjdXRhYmxlLgorYXNfbWU9YCRhc19iYXNlbmFtZSAiJDAiIHx8CiskYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXC9cKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKworCisjIFBBVEggbmVlZHMgQ1IsIGFuZCBMSU5FTk8gbmVlZHMgQ1IgYW5kIFBBVEguCisjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCithc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKK2FzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJworYXNfY3JfTGV0dGVycz0kYXNfY3JfbGV0dGVycyRhc19jcl9MRVRURVJTCithc19jcl9kaWdpdHM9JzAxMjM0NTY3ODknCithc19jcl9hbG51bT0kYXNfY3JfTGV0dGVycyRhc19jcl9kaWdpdHMKKworIyBUaGUgdXNlciBpcyBhbHdheXMgcmlnaHQuCitpZiB0ZXN0ICIke1BBVEhfU0VQQVJBVE9SK3NldH0iICE9IHNldDsgdGhlbgorICBlY2hvICIjISAvYmluL3NoIiA+Y29uZiQkLnNoCisgIGVjaG8gICJleGl0IDAiICAgPj5jb25mJCQuc2gKKyAgY2htb2QgK3ggY29uZiQkLnNoCisgIGlmIChQQVRIPSIvbm9uZXhpc3RlbnQ7LiI7IGNvbmYkJC5zaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgUEFUSF9TRVBBUkFUT1I9JzsnCisgIGVsc2UKKyAgICBQQVRIX1NFUEFSQVRPUj06CisgIGZpCisgIHJtIC1mIGNvbmYkJC5zaAorZmkKKworCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgIHx8IHsKKyAgIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gcGF0aCBhdCBhbGwKKyAgIyByZWxhdGl2ZSBvciBub3QuCisgIGNhc2UgJDAgaW4KKyAgICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworZG9uZQorCisgICAgICAgOzsKKyAgZXNhYworICAjIFdlIGRpZCBub3QgZmluZCBvdXJzZWx2ZXMsIG1vc3QgcHJvYmFibHkgd2Ugd2VyZSBydW4gYXMgYHNoIENPTU1BTkQnCisgICMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgorICBpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgICAgYXNfbXlzZWxmPSQwCisgIGZpCisgIGlmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBmaQorICBjYXNlICRDT05GSUdfU0hFTEwgaW4KKyAgJycpCisgICAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJIGNhc2UgJGFzX2RpciBpbgorCSAvKikKKwkgICBpZiAoIiRhc19kaXIvJGFzX2Jhc2UiIC1jICcKKyAgYXNfbGluZW5vXzE9JExJTkVOTworICBhc19saW5lbm9fMj0kTElORU5PCisgIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKKyAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCisgIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAnKSAyPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgJGFzX3Vuc2V0IEJBU0hfRU5WIHx8IHRlc3QgIiR7QkFTSF9FTlYrc2V0fSIgIT0gc2V0IHx8IHsgQkFTSF9FTlY9OyBleHBvcnQgQkFTSF9FTlY7IH0KKwkgICAgICRhc191bnNldCBFTlYgfHwgdGVzdCAiJHtFTlYrc2V0fSIgIT0gc2V0IHx8IHsgRU5WPTsgZXhwb3J0IEVOVjsgfQorCSAgICAgQ09ORklHX1NIRUxMPSRhc19kaXIvJGFzX2Jhc2UKKwkgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKKwkgICAgIGV4ZWMgIiRDT05GSUdfU0hFTEwiICIkMCIgJHsxKyIkQCJ9CisJICAgZmk7OworCSBlc2FjCisgICAgICAgZG9uZQorZG9uZQorOzsKKyAgZXNhYworCisgICMgQ3JlYXRlICRhc19tZS5saW5lbm8gYXMgYSBjb3B5IG9mICRhc19teXNlbGYsIGJ1dCB3aXRoICRMSU5FTk8KKyAgIyB1bmlmb3JtbHkgcmVwbGFjZWQgYnkgdGhlIGxpbmUgbnVtYmVyLiAgVGhlIGZpcnN0ICdzZWQnIGluc2VydHMgYQorICAjIGxpbmUtbnVtYmVyIGxpbmUgYmVmb3JlIGVhY2ggbGluZTsgdGhlIHNlY29uZCAnc2VkJyBkb2VzIHRoZSByZWFsCisgICMgd29yay4gIFRoZSBzZWNvbmQgc2NyaXB0IHVzZXMgJ04nIHRvIHBhaXIgZWFjaCBsaW5lLW51bWJlciBsaW5lCisgICMgd2l0aCB0aGUgbnVtYmVyZWQgbGluZSwgYW5kIGFwcGVuZHMgdHJhaWxpbmcgJy0nIGR1cmluZworICAjIHN1YnN0aXR1dGlvbiBzbyB0aGF0ICRMSU5FTk8gaXMgbm90IGEgc3BlY2lhbCBjYXNlIGF0IGxpbmUgZW5kLgorICAjIChSYWphIFIgSGFyaW5hdGggc3VnZ2VzdGVkIHNlZCAnPScsIGFuZCBQYXVsIEVnZ2VydCB3cm90ZSB0aGUKKyAgIyBzZWNvbmQgJ3NlZCcgc2NyaXB0LiAgQmxhbWUgTGVlIEUuIE1jTWFob24gZm9yIHNlZCdzIHN5bnRheC4gIDotKQorICBzZWQgJz0nIDwkYXNfbXlzZWxmIHwKKyAgICBzZWQgJworICAgICAgTgorICAgICAgcywkLC0sCisgICAgICA6IGxvb3AKKyAgICAgIHMsXlwoWyckYXNfY3JfZGlnaXRzJ10qXClcKC4qXClbJF1MSU5FTk9cKFteJyRhc19jcl9hbG51bSdfXVwpLFwxXDJcMVwzLAorICAgICAgdCBsb29wCisgICAgICBzLC0kLCwKKyAgICAgIHMsXlsnJGFzX2NyX2RpZ2l0cyddKlxuLCwKKyAgICAnID4kYXNfbWUubGluZW5vICYmCisgIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKKyAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCisgICMgRG9uJ3QgdHJ5IHRvIGV4ZWMgYXMgaXQgY2hhbmdlcyAkWzBdLCBjYXVzaW5nIGFsbCBzb3J0IG9mIHByb2JsZW1zCisgICMgKHRoZSBkaXJuYW1lIG9mICRbMF0gaXMgbm90IHRoZSBwbGFjZSB3aGVyZSB3ZSBtaWdodCBmaW5kIHRoZQorICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2libGUgdG8gdGhpcykuCisgIC4gLi8kYXNfbWUubGluZW5vCisgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgorICBleGl0Cit9CisKKworY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KKyAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JworJyBFQ0hPX1Q9JwknIDs7CisgICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKKyAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7Citlc2FjCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorZWNobyA+Y29uZiQkLmZpbGUKK2lmIGxuIC1zIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICAjIFdlIGNvdWxkIGp1c3QgY2hlY2sgZm9yIERKR1BQOyBidXQgdGhpcyB0ZXN0IGEpIHdvcmtzIGIpIGlzIG1vcmUgZ2VuZXJpYworICAjIGFuZCBjKSB3aWxsIHJlbWFpbiB2YWxpZCBvbmNlIERKR1BQIHN1cHBvcnRzIHN5bWxpbmtzIChESkdQUCAyLjA0KS4KKyAgaWYgdGVzdCAtZiBjb25mJCQuZXhlOyB0aGVuCisgICAgIyBEb24ndCB1c2UgbG4gYXQgYWxsOyB3ZSBkb24ndCBoYXZlIGFueSBsaW5rcworICAgIGFzX2xuX3M9J2NwIC1wJworICBlbHNlCisgICAgYXNfbG5fcz0nbG4gLXMnCisgIGZpCitlbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19sbl9zPWxuCitlbHNlCisgIGFzX2xuX3M9J2NwIC1wJworZmkKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCisKK2lmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbWtkaXJfcD06CitlbHNlCisgIHRlc3QgLWQgLi8tcCAmJiBybWRpciAuLy1wCisgIGFzX21rZGlyX3A9ZmFsc2UKK2ZpCisKK2FzX2V4ZWN1dGFibGVfcD0idGVzdCAtZiIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIENQUCBuYW1lLgorYXNfdHJfY3BwPSJldmFsIHNlZCAneSUqJGFzX2NyX2xldHRlcnMlUCRhc19jcl9MRVRURVJTJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworIyBTZWQgZXhwcmVzc2lvbiB0byBtYXAgYSBzdHJpbmcgb250byBhIHZhbGlkIHZhcmlhYmxlIG5hbWUuCithc190cl9zaD0iZXZhbCBzZWQgJ3klKislcHAlO3MlW15fJGFzX2NyX2FsbnVtXSVfJWcnIgorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLgorYXNfbmw9JworJworSUZTPSIgCSRhc19ubCIKKworIyBDRFBBVEguCiskYXNfdW5zZXQgQ0RQQVRICisKKworCisjIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCitTSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorCitjYXNlIFgkRUNITyBpbgorWCotLWZhbGxiYWNrLWVjaG8pCisgICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCisgIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXCRcXCQwLCckMCcsJ2AKKyAgOzsKK2VzYWMKKworZWNobz0ke0VDSE8tZWNob30KK2lmIHRlc3QgIlgkMSIgPSBYLS1uby1yZWV4ZWM7IHRoZW4KKyAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCisgIHNoaWZ0CitlbGlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCisgICMgQXZvaWQgaW5saW5lIGRvY3VtZW50IGhlcmUsIGl0IG1heSBiZSBsZWZ0IG92ZXIKKyAgOgorZWxpZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgOyB0aGVuCisgICMgWWlwcGVlLCAkZWNobyB3b3JrcyEKKyAgOgorZWxzZQorICAjIFJlc3RhcnQgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCisgIGV4ZWMgJFNIRUxMICIkMCIgLS1uby1yZWV4ZWMgJHsxKyIkQCJ9CitmaQorCitpZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgorICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobworICBzaGlmdAorICBjYXQgPDxFT0YKKyQqCitFT0YKKyAgZXhpdCAwCitmaQorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KK2lmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgorIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0CisgIGZvciBjbWQgaW4gJ3NlZCA1MHEgIiQwIicgJ3NlZCAyMHEgIiQwIicgJ3NlZCAxMHEgIiQwIicgJ3NlZCAycSAiJDAiJyAnZWNobyB0ZXN0JzsgZG8KKyAgICAjIGV4cGVjdGVkIHNpemVzOiBsZXNzIHRoYW4gMktiLCAxS2IsIDUxMiBieXRlcywgMTYgYnl0ZXMsIC4uLgorICAgIGlmIChlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRjbWRgKSAyPi9kZXYvbnVsbCAmJgorICAgICAgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGAgJiYKKyAgICAgICAodGVzdCAiWCRlY2hvX3Rlc3Rfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbAorICAgIHRoZW4KKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorZmkKKworaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCisgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgOgorZWxzZQorICAjIFRoZSBTb2xhcmlzLCBBSVgsIGFuZCBEaWdpdGFsIFVuaXggZGVmYXVsdCBlY2hvIHByb2dyYW1zIHVucXVvdGUKKyAgIyBiYWNrc2xhc2hlcy4gIFRoaXMgbWFrZXMgaXQgaW1wb3NzaWJsZSB0byBxdW90ZSBiYWNrc2xhc2hlcyB1c2luZworICAjICAgZWNobyAiJHNvbWV0aGluZyIgfCBzZWQgJ3MvXFwvXFxcXC9nJworICAjCisgICMgU28sIGZpcnN0IHdlIGxvb2sgZm9yIGEgd29ya2luZyBlY2hvIGluIHRoZSB1c2VyJ3MgUEFUSC4KKworICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGRpciBpbiAkUEFUSCAvdXNyL3VjYjsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICBpZiAodGVzdCAtZiAkZGlyL2VjaG8gfHwgdGVzdCAtZiAkZGlyL2VjaG8kYWNfZXhlZXh0KSAmJgorICAgICAgIHRlc3QgIlhgKCRkaXIvZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKKyAgICAgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGRpci9lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgorICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorICAgICAgZWNobz0iJGRpci9lY2hvIgorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorCisgIGlmIHRlc3QgIlgkZWNobyIgPSBYZWNobzsgdGhlbgorICAgICMgV2UgZGlkbid0IGZpbmQgYSBiZXR0ZXIgZWNobywgc28gbG9vayBmb3IgYWx0ZXJuYXRpdmVzLgorICAgIGlmIHRlc3QgIlhgKHByaW50IC1yICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YChwcmludCAtciAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKyAgICAgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKyAgICAgICMgVGhpcyBzaGVsbCBoYXMgYSBidWlsdGluIHByaW50IC1yIHRoYXQgZG9lcyB0aGUgdHJpY2suCisgICAgICBlY2hvPSdwcmludCAtcicKKyAgICBlbGlmICh0ZXN0IC1mIC9iaW4va3NoIHx8IHRlc3QgLWYgL2Jpbi9rc2gkYWNfZXhlZXh0KSAmJgorCSB0ZXN0ICJYJENPTkZJR19TSEVMTCIgIT0gWC9iaW4va3NoOyB0aGVuCisgICAgICAjIElmIHdlIGhhdmUga3NoLCB0cnkgcnVubmluZyBjb25maWd1cmUgYWdhaW4gd2l0aCBpdC4KKyAgICAgIE9SSUdJTkFMX0NPTkZJR19TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQorICAgICAgZXhwb3J0IE9SSUdJTkFMX0NPTkZJR19TSEVMTAorICAgICAgQ09ORklHX1NIRUxMPS9iaW4va3NoCisgICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisgICAgICBleGVjICRDT05GSUdfU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KKyAgICBlbHNlCisgICAgICAjIFRyeSB1c2luZyBwcmludGYuCisgICAgICBlY2hvPSdwcmludGYgJXNcbicKKyAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgorCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgorCSMgQ29vbCwgcHJpbnRmIHdvcmtzCisJOgorICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKKwkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKKwkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KKwlDT05GSUdfU0hFTEw9JE9SSUdJTkFMX0NPTkZJR19TSEVMTAorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwlTSEVMTD0iJENPTkZJR19TSEVMTCIKKwlleHBvcnQgU0hFTEwKKwllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKKyAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gJ1x0JykgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICdYXHQnICYmCisJICAgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIiQwIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCisJICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCisJZWNobz0iJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iCisgICAgICBlbHNlCisJIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KKwlwcmV2PToKKworCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDUwcSAiJDAiJzsgZG8KKwkgIGlmICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlhgZXZhbCAkY21kYCIpIDI+L2Rldi9udWxsCisJICB0aGVuCisJICAgIGJyZWFrCisJICBmaQorCSAgcHJldj0iJGNtZCIKKwlkb25lCisKKwlpZiB0ZXN0ICIkcHJldiIgIT0gJ3NlZCA1MHEgIiQwIic7IHRoZW4KKwkgIGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJHByZXZgCisJICBleHBvcnQgZWNob190ZXN0X3N0cmluZworCSAgZXhlYyAke09SSUdJTkFMX0NPTkZJR19TSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0gIiQwIiAkezErIiRAIn0KKwllbHNlCisJICAjIE9vcHMuICBXZSBsb3N0IGNvbXBsZXRlbHksIHNvIGp1c3Qgc3RpY2sgd2l0aCBlY2hvLgorCSAgZWNobz1lY2hvCisJZmkKKyAgICAgIGZpCisgICAgZmkKKyAgZmkKK2ZpCitmaQorCisjIENvcHkgZWNobyBhbmQgcXVvdGUgdGhlIGNvcHkgc3VpdGFibHkgZm9yIHBhc3NpbmcgdG8gbGlidG9vbCBmcm9tCisjIHRoZSBNYWtlZmlsZSwgaW5zdGVhZCBvZiBxdW90aW5nIHRoZSBvcmlnaW5hbCwgd2hpY2ggaXMgdXNlZCBsYXRlci4KK0VDSE89JGVjaG8KK2lmIHRlc3QgIlgkRUNITyIgPSAiWCRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIjsgdGhlbgorICAgRUNITz0iJENPTkZJR19TSEVMTCBcXFwkXCQwIC0tZmFsbGJhY2stZWNobyIKK2ZpCisKKworCisKK3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUNYWAorCit0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzcKKworIyBOYW1lIG9mIHRoZSBob3N0LgorIyBob3N0bmFtZSBvbiBzb21lIHN5c3RlbXMgKFNWUjMuMiwgTGludXgpIHJldHVybnMgYSBib2d1cyBleGl0IHN0YXR1cywKKyMgc28gdW5hbWUgZ2V0cyBydW4gdG9vLgorYWNfaG9zdG5hbWU9YChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgCisKK2V4ZWMgNj4mMQorCisjCisjIEluaXRpYWxpemF0aW9ucy4KKyMKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKK2FjX2NvbmZpZ19saWJvYmpfZGlyPS4KK2Nyb3NzX2NvbXBpbGluZz1ubworc3ViZGlycz0KK01GTEFHUz0KK01BS0VGTEFHUz0KK1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CisKKyMgTWF4aW11bSBudW1iZXIgb2YgbGluZXMgdG8gcHV0IGluIGEgc2hlbGwgaGVyZSBkb2N1bWVudC4KKyMgVGhpcyB2YXJpYWJsZSBzZWVtcyBvYnNvbGV0ZS4gIEl0IHNob3VsZCBwcm9iYWJseSBiZSByZW1vdmVkLCBhbmQKKyMgb25seSBhY19tYXhfc2VkX2xpbmVzIHNob3VsZCBiZSB1c2VkLgorOiAke2FjX21heF9oZXJlX2xpbmVzPTM4fQorCisjIElkZW50aXR5IG9mIHRoaXMgcGFja2FnZS4KK1BBQ0tBR0VfTkFNRT0nbHpvJworUEFDS0FHRV9UQVJOQU1FPSdsem8nCitQQUNLQUdFX1ZFUlNJT049JzIuMDMnCitQQUNLQUdFX1NUUklORz0nbHpvIDIuMDMnCitQQUNLQUdFX0JVR1JFUE9SVD0nbWFya3VzQG9iZXJodW1lci5jb20nCisKK2FjX3VuaXF1ZV9maWxlPSJzcmMvbHpvX2luaXQuYyIKK2FjX2RlZmF1bHRfcHJlZml4PS91c3IvbG9jYWwKKyMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KK2FjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZiIKKworYWNfc3Vic3RfdmFycz0nU0hFTEwgUEFUSF9TRVBBUkFUT1IgUEFDS0FHRV9OQU1FIFBBQ0tBR0VfVEFSTkFNRSBQQUNLQUdFX1ZFUlNJT04gUEFDS0FHRV9TVFJJTkcgUEFDS0FHRV9CVUdSRVBPUlQgZXhlY19wcmVmaXggcHJlZml4IHByb2dyYW1fdHJhbnNmb3JtX25hbWUgYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyIGJ1aWxkX2FsaWFzIGhvc3RfYWxpYXMgdGFyZ2V0X2FsaWFzIERFRlMgRUNIT19DIEVDSE9fTiBFQ0hPX1QgTElCUyBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyB0YXJnZXQgdGFyZ2V0X2NwdSB0YXJnZXRfdmVuZG9yIHRhcmdldF9vcyBNQUlOVEFJTkVSX01PREVfVFJVRSBNQUlOVEFJTkVSX01PREVfRkFMU0UgTUFJTlQgQ0MgQ0ZMQUdTIExERkxBR1MgQ1BQRkxBR1MgYWNfY3RfQ0MgRVhFRVhUIE9CSkVYVCBDUFAgSU5TVEFMTF9QUk9HUkFNIElOU1RBTExfU0NSSVBUIElOU1RBTExfREFUQSBDWUdQQVRIX1cgUEFDS0FHRSBWRVJTSU9OIEFDTE9DQUwgQVVUT0NPTkYgQVVUT01BS0UgQVVUT0hFQURFUiBNQUtFSU5GTyBpbnN0YWxsX3NoIFNUUklQIGFjX2N0X1NUUklQIElOU1RBTExfU1RSSVBfUFJPR1JBTSBta2Rpcl9wIEFXSyBTRVRfTUFLRSBhbV9fbGVhZGluZ19kb3QgQU1UQVIgYW1fX3RhciBhbV9fdW50YXIgREVQRElSIGFtX19pbmNsdWRlIGFtX19xdW90ZSBBTURFUF9UUlVFIEFNREVQX0ZBTFNFIEFNREVQQkFDS1NMQVNIIENDREVQTU9ERSBhbV9fZmFzdGRlcENDX1RSVUUgYW1fX2Zhc3RkZXBDQ19GQUxTRSBFR1JFUCBMTl9TIEVDSE8gQVIgYWNfY3RfQVIgUkFOTElCIGFjX2N0X1JBTkxJQiBDWFggQ1hYRkxBR1MgYWNfY3RfQ1hYIENYWERFUE1PREUgYW1fX2Zhc3RkZXBDWFhfVFJVRSBhbV9fZmFzdGRlcENYWF9GQUxTRSBDWFhDUFAgRjc3IEZGTEFHUyBhY19jdF9GNzcgTElCVE9PTCBMWk9fVVNFX0FTTV9UUlVFIExaT19VU0VfQVNNX0ZBTFNFIExaT19BU01fVlBBVEggTFpPX0NQUEZMQUdTIExaT19FWFRSQV9DUFBGTEFHUyBMWk9fQ0ZMQUdTIExaT19FWFRSQV9DRkxBR1MgY29uZmlndXJlX0NQUEZMQUdTIGNvbmZpZ3VyZV9DRkxBR1MgTElCT0JKUyBMVExJQk9CSlMnCithY19zdWJzdF9maWxlcz0nJworCisjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCithY19pbml0X2hlbHA9CithY19pbml0X3ZlcnNpb249ZmFsc2UKKyMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCisjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCitjYWNoZV9maWxlPS9kZXYvbnVsbAorZXhlY19wcmVmaXg9Tk9ORQorbm9fY3JlYXRlPQorbm9fcmVjdXJzaW9uPQorcHJlZml4PU5PTkUKK3Byb2dyYW1fcHJlZml4PU5PTkUKK3Byb2dyYW1fc3VmZml4PU5PTkUKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWU9cyx4LHgsCitzaWxlbnQ9CitzaXRlPQorc3JjZGlyPQordmVyYm9zZT0KK3hfaW5jbHVkZXM9Tk9ORQoreF9saWJyYXJpZXM9Tk9ORQorCisjIEluc3RhbGxhdGlvbiBkaXJlY3Rvcnkgb3B0aW9ucy4KKyMgVGhlc2UgYXJlIGxlZnQgdW5leHBhbmRlZCBzbyB1c2VycyBjYW4gIm1ha2UgaW5zdGFsbCBleGVjX3ByZWZpeD0vZm9vIgorIyBhbmQgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgYmFzZWQgb24gZXhlY19wcmVmaXgKKyMgYnkgZGVmYXVsdCB3aWxsIGFjdHVhbGx5IGNoYW5nZS4KKyMgVXNlIGJyYWNlcyBpbnN0ZWFkIG9mIHBhcmVucyBiZWNhdXNlIHNoLCBwZXJsLCBldGMuIGFsc28gYWNjZXB0IHRoZW0uCitiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L2JpbicKK3NiaW5kaXI9JyR7ZXhlY19wcmVmaXh9L3NiaW4nCitsaWJleGVjZGlyPScke2V4ZWNfcHJlZml4fS9saWJleGVjJworZGF0YWRpcj0nJHtwcmVmaXh9L3NoYXJlJworc3lzY29uZmRpcj0nJHtwcmVmaXh9L2V0YycKK3NoYXJlZHN0YXRlZGlyPScke3ByZWZpeH0vY29tJworbG9jYWxzdGF0ZWRpcj0nJHtwcmVmaXh9L3ZhcicKK2xpYmRpcj0nJHtleGVjX3ByZWZpeH0vbGliJworaW5jbHVkZWRpcj0nJHtwcmVmaXh9L2luY2x1ZGUnCitvbGRpbmNsdWRlZGlyPScvdXNyL2luY2x1ZGUnCitpbmZvZGlyPScke3ByZWZpeH0vaW5mbycKK21hbmRpcj0nJHtwcmVmaXh9L21hbicKKworYWNfcHJldj0KK2ZvciBhY19vcHRpb24KK2RvCisgICMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkcyBhbiBhcmd1bWVudCwgYXNzaWduIGl0LgorICBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgICBldmFsICIkYWNfcHJldj1cJGFjX29wdGlvbiIKKyAgICBhY19wcmV2PQorICAgIGNvbnRpbnVlCisgIGZpCisKKyAgYWNfb3B0YXJnPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFtePV0qPVwoLipcKSdgCisKKyAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KKworICBjYXNlICRhY19vcHRpb24gaW4KKworICAtYmluZGlyIHwgLS1iaW5kaXIgfCAtLWJpbmRpIHwgLS1iaW5kIHwgLS1iaW4gfCAtLWJpKQorICAgIGFjX3ByZXY9YmluZGlyIDs7CisgIC1iaW5kaXI9KiB8IC0tYmluZGlyPSogfCAtLWJpbmRpPSogfCAtLWJpbmQ9KiB8IC0tYmluPSogfCAtLWJpPSopCisgICAgYmluZGlyPSRhY19vcHRhcmcgOzsKKworICAtYnVpbGQgfCAtLWJ1aWxkIHwgLS1idWlsIHwgLS1idWkgfCAtLWJ1KQorICAgIGFjX3ByZXY9YnVpbGRfYWxpYXMgOzsKKyAgLWJ1aWxkPSogfCAtLWJ1aWxkPSogfCAtLWJ1aWw9KiB8IC0tYnVpPSogfCAtLWJ1PSopCisgICAgYnVpbGRfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWxlIHwgLS1jYWNoZS1maWwgfCAtLWNhY2hlLWZpIFwKKyAgfCAtLWNhY2hlLWYgfCAtLWNhY2hlLSB8IC0tY2FjaGUgfCAtLWNhY2ggfCAtLWNhYyB8IC0tY2EgfCAtLWMpCisgICAgYWNfcHJldj1jYWNoZV9maWxlIDs7CisgIC1jYWNoZS1maWxlPSogfCAtLWNhY2hlLWZpbGU9KiB8IC0tY2FjaGUtZmlsPSogfCAtLWNhY2hlLWZpPSogXAorICB8IC0tY2FjaGUtZj0qIHwgLS1jYWNoZS09KiB8IC0tY2FjaGU9KiB8IC0tY2FjaD0qIHwgLS1jYWM9KiB8IC0tY2E9KiB8IC0tYz0qKQorICAgIGNhY2hlX2ZpbGU9JGFjX29wdGFyZyA7OworCisgIC0tY29uZmlnLWNhY2hlIHwgLUMpCisgICAgY2FjaGVfZmlsZT1jb25maWcuY2FjaGUgOzsKKworICAtZGF0YWRpciB8IC0tZGF0YWRpciB8IC0tZGF0YWRpIHwgLS1kYXRhZCB8IC0tZGF0YSB8IC0tZGF0IHwgLS1kYSkKKyAgICBhY19wcmV2PWRhdGFkaXIgOzsKKyAgLWRhdGFkaXI9KiB8IC0tZGF0YWRpcj0qIHwgLS1kYXRhZGk9KiB8IC0tZGF0YWQ9KiB8IC0tZGF0YT0qIHwgLS1kYXQ9KiBcCisgIHwgLS1kYT0qKQorICAgIGRhdGFkaXI9JGFjX29wdGFyZyA7OworCisgIC1kaXNhYmxlLSogfCAtLWRpc2FibGUtKikKKyAgICBhY19mZWF0dXJlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZGlzYWJsZS1cKC4qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2ZlYXR1cmUiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY19mZWF0dXJlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX2ZlYXR1cmU9YGVjaG8gJGFjX2ZlYXR1cmUgfCBzZWQgJ3MvLS9fL2cnYAorICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT1ubyIgOzsKKworICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQorICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBjYXNlICRhY19vcHRpb24gaW4KKyAgICAgICo9KikgYWNfb3B0YXJnPWBlY2hvICIkYWNfb3B0YXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7CisgICAgICAqKSBhY19vcHRhcmc9eWVzIDs7CisgICAgZXNhYworICAgIGV2YWwgImVuYWJsZV8kYWNfZmVhdHVyZT0nJGFjX29wdGFyZyciIDs7CisKKyAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAorICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCisgIHwgLS1leGVjIHwgLS1leGUgfCAtLWV4KQorICAgIGFjX3ByZXY9ZXhlY19wcmVmaXggOzsKKyAgLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWNfcHJlZml4PSogfCAtLWV4ZWMtcHJlZml4PSogfCAtLWV4ZWMtcHJlZmk9KiBcCisgIHwgLS1leGVjLXByZWY9KiB8IC0tZXhlYy1wcmU9KiB8IC0tZXhlYy1wcj0qIHwgLS1leGVjLXA9KiB8IC0tZXhlYy09KiBcCisgIHwgLS1leGVjPSogfCAtLWV4ZT0qIHwgLS1leD0qKQorICAgIGV4ZWNfcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtZ2FzIHwgLS1nYXMgfCAtLWdhIHwgLS1nKQorICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgtZ2FzLgorICAgIHdpdGhfZ2FzPXllcyA7OworCisgIC1oZWxwIHwgLS1oZWxwIHwgLS1oZWwgfCAtLWhlIHwgLWgpCisgICAgYWNfaW5pdF9oZWxwPWxvbmcgOzsKKyAgLWhlbHA9ciogfCAtLWhlbHA9ciogfCAtLWhlbD1yKiB8IC0taGU9ciogfCAtaHIqKQorICAgIGFjX2luaXRfaGVscD1yZWN1cnNpdmUgOzsKKyAgLWhlbHA9cyogfCAtLWhlbHA9cyogfCAtLWhlbD1zKiB8IC0taGU9cyogfCAtaHMqKQorICAgIGFjX2luaXRfaGVscD1zaG9ydCA7OworCisgIC1ob3N0IHwgLS1ob3N0IHwgLS1ob3MgfCAtLWhvKQorICAgIGFjX3ByZXY9aG9zdF9hbGlhcyA7OworICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQorICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OworCisgIC1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGlyIHwgLS1pbmNsdWRlZGkgfCAtLWluY2x1ZGVkIHwgLS1pbmNsdWRlIFwKKyAgfCAtLWluY2x1ZCB8IC0taW5jbHUgfCAtLWluY2wgfCAtLWluYykKKyAgICBhY19wcmV2PWluY2x1ZGVkaXIgOzsKKyAgLWluY2x1ZGVkaXI9KiB8IC0taW5jbHVkZWRpcj0qIHwgLS1pbmNsdWRlZGk9KiB8IC0taW5jbHVkZWQ9KiB8IC0taW5jbHVkZT0qIFwKKyAgfCAtLWluY2x1ZD0qIHwgLS1pbmNsdT0qIHwgLS1pbmNsPSogfCAtLWluYz0qKQorICAgIGluY2x1ZGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1pbmZvZGlyIHwgLS1pbmZvZGlyIHwgLS1pbmZvZGkgfCAtLWluZm9kIHwgLS1pbmZvIHwgLS1pbmYpCisgICAgYWNfcHJldj1pbmZvZGlyIDs7CisgIC1pbmZvZGlyPSogfCAtLWluZm9kaXI9KiB8IC0taW5mb2RpPSogfCAtLWluZm9kPSogfCAtLWluZm89KiB8IC0taW5mPSopCisgICAgaW5mb2Rpcj0kYWNfb3B0YXJnIDs7CisKKyAgLWxpYmRpciB8IC0tbGliZGlyIHwgLS1saWJkaSB8IC0tbGliZCkKKyAgICBhY19wcmV2PWxpYmRpciA7OworICAtbGliZGlyPSogfCAtLWxpYmRpcj0qIHwgLS1saWJkaT0qIHwgLS1saWJkPSopCisgICAgbGliZGlyPSRhY19vcHRhcmcgOzsKKworICAtbGliZXhlY2RpciB8IC0tbGliZXhlY2RpciB8IC0tbGliZXhlY2RpIHwgLS1saWJleGVjZCB8IC0tbGliZXhlYyBcCisgIHwgLS1saWJleGUgfCAtLWxpYmV4IHwgLS1saWJlKQorICAgIGFjX3ByZXY9bGliZXhlY2RpciA7OworICAtbGliZXhlY2Rpcj0qIHwgLS1saWJleGVjZGlyPSogfCAtLWxpYmV4ZWNkaT0qIHwgLS1saWJleGVjZD0qIHwgLS1saWJleGVjPSogXAorICB8IC0tbGliZXhlPSogfCAtLWxpYmV4PSogfCAtLWxpYmU9KikKKyAgICBsaWJleGVjZGlyPSRhY19vcHRhcmcgOzsKKworICAtbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpciB8IC0tbG9jYWxzdGF0ZWRpIHwgLS1sb2NhbHN0YXRlZCBcCisgIHwgLS1sb2NhbHN0YXRlIHwgLS1sb2NhbHN0YXQgfCAtLWxvY2Fsc3RhIHwgLS1sb2NhbHN0IFwKKyAgfCAtLWxvY2FscyB8IC0tbG9jYWwgfCAtLWxvY2EgfCAtLWxvYyB8IC0tbG8pCisgICAgYWNfcHJldj1sb2NhbHN0YXRlZGlyIDs7CisgIC1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaXI9KiB8IC0tbG9jYWxzdGF0ZWRpPSogfCAtLWxvY2Fsc3RhdGVkPSogXAorICB8IC0tbG9jYWxzdGF0ZT0qIHwgLS1sb2NhbHN0YXQ9KiB8IC0tbG9jYWxzdGE9KiB8IC0tbG9jYWxzdD0qIFwKKyAgfCAtLWxvY2Fscz0qIHwgLS1sb2NhbD0qIHwgLS1sb2NhPSogfCAtLWxvYz0qIHwgLS1sbz0qKQorICAgIGxvY2Fsc3RhdGVkaXI9JGFjX29wdGFyZyA7OworCisgIC1tYW5kaXIgfCAtLW1hbmRpciB8IC0tbWFuZGkgfCAtLW1hbmQgfCAtLW1hbiB8IC0tbWEgfCAtLW0pCisgICAgYWNfcHJldj1tYW5kaXIgOzsKKyAgLW1hbmRpcj0qIHwgLS1tYW5kaXI9KiB8IC0tbWFuZGk9KiB8IC0tbWFuZD0qIHwgLS1tYW49KiB8IC0tbWE9KiB8IC0tbT0qKQorICAgIG1hbmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLW5mcCB8IC0tbmZwIHwgLS1uZikKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRob3V0LWZwLgorICAgIHdpdGhfZnA9bm8gOzsKKworICAtbm8tY3JlYXRlIHwgLS1uby1jcmVhdGUgfCAtLW5vLWNyZWF0IHwgLS1uby1jcmVhIHwgLS1uby1jcmUgXAorICB8IC0tbm8tY3IgfCAtLW5vLWMgfCAtbikKKyAgICBub19jcmVhdGU9eWVzIDs7CisKKyAgLW5vLXJlY3Vyc2lvbiB8IC0tbm8tcmVjdXJzaW9uIHwgLS1uby1yZWN1cnNpbyB8IC0tbm8tcmVjdXJzaSBcCisgIHwgLS1uby1yZWN1cnMgfCAtLW5vLXJlY3VyIHwgLS1uby1yZWN1IHwgLS1uby1yZWMgfCAtLW5vLXJlIHwgLS1uby1yKQorICAgIG5vX3JlY3Vyc2lvbj15ZXMgOzsKKworICAtb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpciB8IC0tb2xkaW5jbHVkZWRpIHwgLS1vbGRpbmNsdWRlZCBcCisgIHwgLS1vbGRpbmNsdWRlIHwgLS1vbGRpbmNsdWQgfCAtLW9sZGluY2x1IHwgLS1vbGRpbmNsIHwgLS1vbGRpbmMgXAorICB8IC0tb2xkaW4gfCAtLW9sZGkgfCAtLW9sZCB8IC0tb2wgfCAtLW8pCisgICAgYWNfcHJldj1vbGRpbmNsdWRlZGlyIDs7CisgIC1vbGRpbmNsdWRlZGlyPSogfCAtLW9sZGluY2x1ZGVkaXI9KiB8IC0tb2xkaW5jbHVkZWRpPSogfCAtLW9sZGluY2x1ZGVkPSogXAorICB8IC0tb2xkaW5jbHVkZT0qIHwgLS1vbGRpbmNsdWQ9KiB8IC0tb2xkaW5jbHU9KiB8IC0tb2xkaW5jbD0qIHwgLS1vbGRpbmM9KiBcCisgIHwgLS1vbGRpbj0qIHwgLS1vbGRpPSogfCAtLW9sZD0qIHwgLS1vbD0qIHwgLS1vPSopCisgICAgb2xkaW5jbHVkZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXByZWZpeCB8IC0tcHJlZml4IHwgLS1wcmVmaSB8IC0tcHJlZiB8IC0tcHJlIHwgLS1wciB8IC0tcCkKKyAgICBhY19wcmV2PXByZWZpeCA7OworICAtcHJlZml4PSogfCAtLXByZWZpeD0qIHwgLS1wcmVmaT0qIHwgLS1wcmVmPSogfCAtLXByZT0qIHwgLS1wcj0qIHwgLS1wPSopCisgICAgcHJlZml4PSRhY19vcHRhcmcgOzsKKworICAtcHJvZ3JhbS1wcmVmaXggfCAtLXByb2dyYW0tcHJlZml4IHwgLS1wcm9ncmFtLXByZWZpIHwgLS1wcm9ncmFtLXByZWYgXAorICB8IC0tcHJvZ3JhbS1wcmUgfCAtLXByb2dyYW0tcHIgfCAtLXByb2dyYW0tcCkKKyAgICBhY19wcmV2PXByb2dyYW1fcHJlZml4IDs7CisgIC1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpeD0qIHwgLS1wcm9ncmFtLXByZWZpPSogXAorICB8IC0tcHJvZ3JhbS1wcmVmPSogfCAtLXByb2dyYW0tcHJlPSogfCAtLXByb2dyYW0tcHI9KiB8IC0tcHJvZ3JhbS1wPSopCisgICAgcHJvZ3JhbV9wcmVmaXg9JGFjX29wdGFyZyA7OworCisgIC1wcm9ncmFtLXN1ZmZpeCB8IC0tcHJvZ3JhbS1zdWZmaXggfCAtLXByb2dyYW0tc3VmZmkgfCAtLXByb2dyYW0tc3VmZiBcCisgIHwgLS1wcm9ncmFtLXN1ZiB8IC0tcHJvZ3JhbS1zdSB8IC0tcHJvZ3JhbS1zKQorICAgIGFjX3ByZXY9cHJvZ3JhbV9zdWZmaXggOzsKKyAgLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZml4PSogfCAtLXByb2dyYW0tc3VmZmk9KiBcCisgIHwgLS1wcm9ncmFtLXN1ZmY9KiB8IC0tcHJvZ3JhbS1zdWY9KiB8IC0tcHJvZ3JhbS1zdT0qIHwgLS1wcm9ncmFtLXM9KikKKyAgICBwcm9ncmFtX3N1ZmZpeD0kYWNfb3B0YXJnIDs7CisKKyAgLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWUgXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmFtIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYSBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS0gXAorICB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0gfCAtLXByb2dyYW0tdHJhbnNmb3IgXAorICB8IC0tcHJvZ3JhbS10cmFuc2ZvIHwgLS1wcm9ncmFtLXRyYW5zZiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zIHwgLS1wcm9ncmFtLXRyYW4gXAorICB8IC0tcHJvZ3ItdHJhIHwgLS1wcm9ncmFtLXRyIHwgLS1wcm9ncmFtLXQpCisgICAgYWNfcHJldj1wcm9ncmFtX3RyYW5zZm9ybV9uYW1lIDs7CisgIC1wcm9ncmFtLXRyYW5zZm9ybS1uYW1lPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uYW09KiB8IC0tcHJvZ3JhbS10cmFuc2Zvcm0tbmE9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm9ybS1uPSogfCAtLXByb2dyYW0tdHJhbnNmb3JtLT0qIFwKKyAgfCAtLXByb2dyYW0tdHJhbnNmb3JtPSogfCAtLXByb2dyYW0tdHJhbnNmb3I9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zZm89KiB8IC0tcHJvZ3JhbS10cmFuc2Y9KiBcCisgIHwgLS1wcm9ncmFtLXRyYW5zPSogfCAtLXByb2dyYW0tdHJhbj0qIFwKKyAgfCAtLXByb2dyLXRyYT0qIHwgLS1wcm9ncmFtLXRyPSogfCAtLXByb2dyYW0tdD0qKQorICAgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9JGFjX29wdGFyZyA7OworCisgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQorICAgIHNpbGVudD15ZXMgOzsKKworICAtc2JpbmRpciB8IC0tc2JpbmRpciB8IC0tc2JpbmRpIHwgLS1zYmluZCB8IC0tc2JpbiB8IC0tc2JpIHwgLS1zYikKKyAgICBhY19wcmV2PXNiaW5kaXIgOzsKKyAgLXNiaW5kaXI9KiB8IC0tc2JpbmRpcj0qIHwgLS1zYmluZGk9KiB8IC0tc2JpbmQ9KiB8IC0tc2Jpbj0qIFwKKyAgfCAtLXNiaT0qIHwgLS1zYj0qKQorICAgIHNiaW5kaXI9JGFjX29wdGFyZyA7OworCisgIC1zaGFyZWRzdGF0ZWRpciB8IC0tc2hhcmVkc3RhdGVkaXIgfCAtLXNoYXJlZHN0YXRlZGkgXAorICB8IC0tc2hhcmVkc3RhdGVkIHwgLS1zaGFyZWRzdGF0ZSB8IC0tc2hhcmVkc3RhdCB8IC0tc2hhcmVkc3RhIFwKKyAgfCAtLXNoYXJlZHN0IHwgLS1zaGFyZWRzIHwgLS1zaGFyZWQgfCAtLXNoYXJlIHwgLS1zaGFyIFwKKyAgfCAtLXNoYSB8IC0tc2gpCisgICAgYWNfcHJldj1zaGFyZWRzdGF0ZWRpciA7OworICAtc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaXI9KiB8IC0tc2hhcmVkc3RhdGVkaT0qIFwKKyAgfCAtLXNoYXJlZHN0YXRlZD0qIHwgLS1zaGFyZWRzdGF0ZT0qIHwgLS1zaGFyZWRzdGF0PSogfCAtLXNoYXJlZHN0YT0qIFwKKyAgfCAtLXNoYXJlZHN0PSogfCAtLXNoYXJlZHM9KiB8IC0tc2hhcmVkPSogfCAtLXNoYXJlPSogfCAtLXNoYXI9KiBcCisgIHwgLS1zaGE9KiB8IC0tc2g9KikKKyAgICBzaGFyZWRzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXNpdGUgfCAtLXNpdGUgfCAtLXNpdCkKKyAgICBhY19wcmV2PXNpdGUgOzsKKyAgLXNpdGU9KiB8IC0tc2l0ZT0qIHwgLS1zaXQ9KikKKyAgICBzaXRlPSRhY19vcHRhcmcgOzsKKworICAtc3JjZGlyIHwgLS1zcmNkaXIgfCAtLXNyY2RpIHwgLS1zcmNkIHwgLS1zcmMgfCAtLXNyKQorICAgIGFjX3ByZXY9c3JjZGlyIDs7CisgIC1zcmNkaXI9KiB8IC0tc3JjZGlyPSogfCAtLXNyY2RpPSogfCAtLXNyY2Q9KiB8IC0tc3JjPSogfCAtLXNyPSopCisgICAgc3JjZGlyPSRhY19vcHRhcmcgOzsKKworICAtc3lzY29uZmRpciB8IC0tc3lzY29uZmRpciB8IC0tc3lzY29uZmRpIHwgLS1zeXNjb25mZCB8IC0tc3lzY29uZiBcCisgIHwgLS1zeXNjb24gfCAtLXN5c2NvIHwgLS1zeXNjIHwgLS1zeXMgfCAtLXN5KQorICAgIGFjX3ByZXY9c3lzY29uZmRpciA7OworICAtc3lzY29uZmRpcj0qIHwgLS1zeXNjb25mZGlyPSogfCAtLXN5c2NvbmZkaT0qIHwgLS1zeXNjb25mZD0qIHwgLS1zeXNjb25mPSogXAorICB8IC0tc3lzY29uPSogfCAtLXN5c2NvPSogfCAtLXN5c2M9KiB8IC0tc3lzPSogfCAtLXN5PSopCisgICAgc3lzY29uZmRpcj0kYWNfb3B0YXJnIDs7CisKKyAgLXRhcmdldCB8IC0tdGFyZ2V0IHwgLS10YXJnZSB8IC0tdGFyZyB8IC0tdGFyIHwgLS10YSB8IC0tdCkKKyAgICBhY19wcmV2PXRhcmdldF9hbGlhcyA7OworICAtdGFyZ2V0PSogfCAtLXRhcmdldD0qIHwgLS10YXJnZT0qIHwgLS10YXJnPSogfCAtLXRhcj0qIHwgLS10YT0qIHwgLS10PSopCisgICAgdGFyZ2V0X2FsaWFzPSRhY19vcHRhcmcgOzsKKworICAtdiB8IC12ZXJib3NlIHwgLS12ZXJib3NlIHwgLS12ZXJib3MgfCAtLXZlcmJvIHwgLS12ZXJiKQorICAgIHZlcmJvc2U9eWVzIDs7CisKKyAgLXZlcnNpb24gfCAtLXZlcnNpb24gfCAtLXZlcnNpbyB8IC0tdmVyc2kgfCAtLXZlcnMgfCAtVikKKyAgICBhY19pbml0X3ZlcnNpb249OiA7OworCisgIC13aXRoLSogfCAtLXdpdGgtKikKKyAgICBhY19wYWNrYWdlPWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aC1cKFtePV0qXCknYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2V8IHNlZCAncy8tL18vZydgCisgICAgY2FzZSAkYWNfb3B0aW9uIGluCisgICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGVzYWMKKyAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKKworICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCisgICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCisgICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlIHwgc2VkICdzLy0vXy9nJ2AKKyAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPW5vIiA7OworCisgIC0teCkKKyAgICAjIE9ic29sZXRlOyB1c2UgLS13aXRoLXguCisgICAgd2l0aF94PXllcyA7OworCisgIC14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGVzIHwgLS14LWluY2x1ZGUgfCAtLXgtaW5jbHVkIHwgLS14LWluY2x1IFwKKyAgfCAtLXgtaW5jbCB8IC0teC1pbmMgfCAtLXgtaW4gfCAtLXgtaSkKKyAgICBhY19wcmV2PXhfaW5jbHVkZXMgOzsKKyAgLXgtaW5jbHVkZXM9KiB8IC0teC1pbmNsdWRlcz0qIHwgLS14LWluY2x1ZGU9KiB8IC0teC1pbmNsdWQ9KiB8IC0teC1pbmNsdT0qIFwKKyAgfCAtLXgtaW5jbD0qIHwgLS14LWluYz0qIHwgLS14LWluPSogfCAtLXgtaT0qKQorICAgIHhfaW5jbHVkZXM9JGFjX29wdGFyZyA7OworCisgIC14LWxpYnJhcmllcyB8IC0teC1saWJyYXJpZXMgfCAtLXgtbGlicmFyaWUgfCAtLXgtbGlicmFyaSBcCisgIHwgLS14LWxpYnJhciB8IC0teC1saWJyYSB8IC0teC1saWJyIHwgLS14LWxpYiB8IC0teC1saSB8IC0teC1sKQorICAgIGFjX3ByZXY9eF9saWJyYXJpZXMgOzsKKyAgLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWVzPSogfCAtLXgtbGlicmFyaWU9KiB8IC0teC1saWJyYXJpPSogXAorICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKKyAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CisKKyAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgOzsKKworICAqPSopCisgICAgYWNfZW52dmFyPWBleHByICJ4JGFjX29wdGlvbiIgOiAneFwoW149XSpcKT0nYAorICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KKyAgICBleHByICJ4JGFjX2VudnZhciIgOiAiLipbXl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgdmFyaWFibGUgbmFtZTogJGFjX2VudnZhciIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgCisgICAgZXZhbCAiJGFjX2VudnZhcj0nJGFjX29wdGFyZyciCisgICAgZXhwb3J0ICRhY19lbnZ2YXIgOzsKKworICAqKQorICAgICMgRklYTUU6IHNob3VsZCBiZSByZW1vdmVkIGluIGF1dG9jb25mIDMuMC4KKyAgICBlY2hvICIkYXNfbWU6IFdBUk5JTkc6IHlvdSBzaG91bGQgdXNlIC0tYnVpbGQsIC0taG9zdCwgLS10YXJnZXQiID4mMgorICAgIGV4cHIgIngkYWNfb3B0aW9uIiA6ICIuKlteLS5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBpbnZhbGlkIGhvc3QgdHlwZTogJGFjX29wdGlvbiIgPiYyCisgICAgOiAke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufQorICAgIDs7CisKKyAgZXNhYworZG9uZQorCitpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KKyAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAorICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKyMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgorZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKK2RvCisgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OworICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgZXNhYworZG9uZQorCisjIEJlIHN1cmUgdG8gaGF2ZSBhYnNvbHV0ZSBwYXRocy4KK2ZvciBhY192YXIgaW4gYmluZGlyIHNiaW5kaXIgbGliZXhlY2RpciBkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgXAorCSAgICAgIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpcgorZG8KKyAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGNhc2UgJGFjX3ZhbCBpbgorICAgIFtcXC8kXSogfCA/OltcXC9dKiApIDs7CisgICAgKikgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgVGhlcmUgbWlnaHQgYmUgcGVvcGxlIHdobyBkZXBlbmQgb24gdGhlIG9sZCBicm9rZW4gYmVoYXZpb3I6IGAkaG9zdCcKKyMgdXNlZCB0byBob2xkIHRoZSBhcmd1bWVudCBvZiAtLWhvc3QgZXRjLgorIyBGSVhNRTogVG8gcmVtb3ZlIHNvbWUgZGF5LgorYnVpbGQ9JGJ1aWxkX2FsaWFzCitob3N0PSRob3N0X2FsaWFzCit0YXJnZXQ9JHRhcmdldF9hbGlhcworCisjIEZJWE1FOiBUbyByZW1vdmUgc29tZSBkYXkuCitpZiB0ZXN0ICJ4JGhvc3RfYWxpYXMiICE9IHg7IHRoZW4KKyAgaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgPSB4OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW1heWJlCisgICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiBJZiB5b3Ugd2FudGVkIHRvIHNldCB0aGUgLS1idWlsZCB0eXBlLCBkb24ndCB1c2UgLS1ob3N0LgorICAgIElmIGEgY3Jvc3MgY29tcGlsZXIgaXMgZGV0ZWN0ZWQgdGhlbiBjcm9zcyBjb21waWxlIG1vZGUgd2lsbCBiZSB1c2VkLiIgPiYyCisgIGVsaWYgdGVzdCAieCRidWlsZF9hbGlhcyIgIT0gIngkaG9zdF9hbGlhcyI7IHRoZW4KKyAgICBjcm9zc19jb21waWxpbmc9eWVzCisgIGZpCitmaQorCithY190b29sX3ByZWZpeD0KK3Rlc3QgLW4gIiRob3N0X2FsaWFzIiAmJiBhY190b29sX3ByZWZpeD0kaG9zdF9hbGlhcy0KKwordGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYgZXhlYyA2Pi9kZXYvbnVsbAorCisKKyMgRmluZCB0aGUgc291cmNlIGZpbGVzLCBpZiBsb2NhdGlvbiB3YXMgbm90IHNwZWNpZmllZC4KK2lmIHRlc3QgLXogIiRzcmNkaXIiOyB0aGVuCisgIGFjX3NyY2Rpcl9kZWZhdWx0ZWQ9eWVzCisgICMgVHJ5IHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGlzIHNjcmlwdCwgdGhlbiBpdHMgcGFyZW50LgorICBhY19jb25mZGlyPWAoZGlybmFtZSAiJDAiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkMCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiQwIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgc3JjZGlyPSRhY19jb25mZGlyCisgIGlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgorICAgIHNyY2Rpcj0uLgorICBmaQorZWxzZQorICBhY19zcmNkaXJfZGVmYXVsdGVkPW5vCitmaQoraWYgdGVzdCAhIC1yICRzcmNkaXIvJGFjX3VuaXF1ZV9maWxlOyB0aGVuCisgIGlmIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllczsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkYWNfY29uZmRpciBvciAuLiIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZWxzZQorICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBmaQorZmkKKyhjZCAkc3JjZGlyICYmIHRlc3QgLXIgLi8kYWNfdW5pcXVlX2ZpbGUpIDI+L2Rldi9udWxsIHx8CisgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIgPiYyCisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK3NyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKK2FjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9CithY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCithY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQorYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcworYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9CithY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcworYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQorYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9CithY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKK2FjX2Vudl9DQ19zZXQ9JHtDQytzZXR9CithY19lbnZfQ0NfdmFsdWU9JENDCithY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQorYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQworYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQorYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCithY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9CithY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKK2FjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQorYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKK2FjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9CithY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCithY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQorYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUworYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQorYWNfZW52X0NQUF92YWx1ZT0kQ1BQCithY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9CithY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKK2FjX2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KK2FjX2Vudl9DWFhfdmFsdWU9JENYWAorYWNfY3ZfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQorYWNfY3ZfZW52X0NYWF92YWx1ZT0kQ1hYCithY19lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQorYWNfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUworYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KK2FjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKK2FjX2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KK2FjX2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAorYWNfY3ZfZW52X0NYWENQUF9zZXQ9JHtDWFhDUFArc2V0fQorYWNfY3ZfZW52X0NYWENQUF92YWx1ZT0kQ1hYQ1BQCithY19lbnZfRjc3X3NldD0ke0Y3NytzZXR9CithY19lbnZfRjc3X3ZhbHVlPSRGNzcKK2FjX2N2X2Vudl9GNzdfc2V0PSR7Rjc3K3NldH0KK2FjX2N2X2Vudl9GNzdfdmFsdWU9JEY3NworYWNfZW52X0ZGTEFHU19zZXQ9JHtGRkxBR1Mrc2V0fQorYWNfZW52X0ZGTEFHU192YWx1ZT0kRkZMQUdTCithY19jdl9lbnZfRkZMQUdTX3NldD0ke0ZGTEFHUytzZXR9CithY19jdl9lbnZfRkZMQUdTX3ZhbHVlPSRGRkxBR1MKKworIworIyBSZXBvcnQgdGhlIC0taGVscCBtZXNzYWdlLgorIworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAibG9uZyI7IHRoZW4KKyAgIyBPbWl0IHNvbWUgaW50ZXJuYWwgb3Igb2Jzb2xldGUgb3B0aW9ucyB0byBtYWtlIHRoZSBsaXN0IGxlc3MgaW1wb3NpbmcuCisgICMgVGhpcyBtZXNzYWdlIGlzIHRvbyBsb25nIHRvIGJlIGEgc3RyaW5nIGluIHRoZSBBL1VYIDMuMSBzaC4KKyAgY2F0IDw8X0FDRU9GCitcYGNvbmZpZ3VyZScgY29uZmlndXJlcyBsem8gMi4wMyB0byBhZGFwdCB0byBtYW55IGtpbmRzIG9mIHN5c3RlbXMuCisKK1VzYWdlOiAkMCBbT1BUSU9OXS4uLiBbVkFSPVZBTFVFXS4uLgorCitUbyBhc3NpZ24gZW52aXJvbm1lbnQgdmFyaWFibGVzIChlLmcuLCBDQywgQ0ZMQUdTLi4uKSwgc3BlY2lmeSB0aGVtIGFzCitWQVI9VkFMVUUuICBTZWUgYmVsb3cgZm9yIGRlc2NyaXB0aW9ucyBvZiBzb21lIG9mIHRoZSB1c2VmdWwgdmFyaWFibGVzLgorCitEZWZhdWx0cyBmb3IgdGhlIG9wdGlvbnMgYXJlIHNwZWNpZmllZCBpbiBicmFja2V0cy4KKworQ29uZmlndXJhdGlvbjoKKyAgLWgsIC0taGVscCAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgYW5kIGV4aXQKKyAgICAgIC0taGVscD1zaG9ydCAgICAgICAgZGlzcGxheSBvcHRpb25zIHNwZWNpZmljIHRvIHRoaXMgcGFja2FnZQorICAgICAgLS1oZWxwPXJlY3Vyc2l2ZSAgICBkaXNwbGF5IHRoZSBzaG9ydCBoZWxwIG9mIGFsbCB0aGUgaW5jbHVkZWQgcGFja2FnZXMKKyAgLVYsIC0tdmVyc2lvbiAgICAgICAgICAgZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0CisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nLi4uJyBtZXNzYWdlcworICAgICAgLS1jYWNoZS1maWxlPUZJTEUgICBjYWNoZSB0ZXN0IHJlc3VsdHMgaW4gRklMRSBbZGlzYWJsZWRdCisgIC1DLCAtLWNvbmZpZy1jYWNoZSAgICAgIGFsaWFzIGZvciBcYC0tY2FjaGUtZmlsZT1jb25maWcuY2FjaGUnCisgIC1uLCAtLW5vLWNyZWF0ZSAgICAgICAgIGRvIG5vdCBjcmVhdGUgb3V0cHV0IGZpbGVzCisgICAgICAtLXNyY2Rpcj1ESVIgICAgICAgIGZpbmQgdGhlIHNvdXJjZXMgaW4gRElSIFtjb25maWd1cmUgZGlyIG9yIFxgLi4nXQorCitfQUNFT0YKKworICBjYXQgPDxfQUNFT0YKK0luc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1wcmVmaXg9UFJFRklYICAgICAgICAgaW5zdGFsbCBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZmlsZXMgaW4gUFJFRklYCisJCQkgIFskYWNfZGVmYXVsdF9wcmVmaXhdCisgIC0tZXhlYy1wcmVmaXg9RVBSRUZJWCAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWRlcGVuZGVudCBmaWxlcyBpbiBFUFJFRklYCisJCQkgIFtQUkVGSVhdCisKK0J5IGRlZmF1bHQsIFxgbWFrZSBpbnN0YWxsJyB3aWxsIGluc3RhbGwgYWxsIHRoZSBmaWxlcyBpbgorXGAkYWNfZGVmYXVsdF9wcmVmaXgvYmluJywgXGAkYWNfZGVmYXVsdF9wcmVmaXgvbGliJyBldGMuICBZb3UgY2FuIHNwZWNpZnkKK2FuIGluc3RhbGxhdGlvbiBwcmVmaXggb3RoZXIgdGhhbiBcYCRhY19kZWZhdWx0X3ByZWZpeCcgdXNpbmcgXGAtLXByZWZpeCcsCitmb3IgaW5zdGFuY2UgXGAtLXByZWZpeD1cJEhPTUUnLgorCitGb3IgYmV0dGVyIGNvbnRyb2wsIHVzZSB0aGUgb3B0aW9ucyBiZWxvdy4KKworRmluZSB0dW5pbmcgb2YgdGhlIGluc3RhbGxhdGlvbiBkaXJlY3RvcmllczoKKyAgLS1iaW5kaXI9RElSICAgICAgICAgICB1c2VyIGV4ZWN1dGFibGVzIFtFUFJFRklYL2Jpbl0KKyAgLS1zYmluZGlyPURJUiAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICBwcm9ncmFtIGV4ZWN1dGFibGVzIFtFUFJFRklYL2xpYmV4ZWNdCisgIC0tZGF0YWRpcj1ESVIgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvc2hhcmVdCisgIC0tc3lzY29uZmRpcj1ESVIgICAgICAgcmVhZC1vbmx5IHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC9ldGNdCisgIC0tc2hhcmVkc3RhdGVkaXI9RElSICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICBtb2RpZmlhYmxlIHNpbmdsZS1tYWNoaW5lIGRhdGEgW1BSRUZJWC92YXJdCisgIC0tbGliZGlyPURJUiAgICAgICAgICAgb2JqZWN0IGNvZGUgbGlicmFyaWVzIFtFUFJFRklYL2xpYl0KKyAgLS1pbmNsdWRlZGlyPURJUiAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgQyBoZWFkZXIgZmlsZXMgZm9yIG5vbi1nY2MgWy91c3IvaW5jbHVkZV0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICBpbmZvIGRvY3VtZW50YXRpb24gW1BSRUZJWC9pbmZvXQorICAtLW1hbmRpcj1ESVIgICAgICAgICAgIG1hbiBkb2N1bWVudGF0aW9uIFtQUkVGSVgvbWFuXQorX0FDRU9GCisKKyAgY2F0IDw8XF9BQ0VPRgorCitQcm9ncmFtIG5hbWVzOgorICAtLXByb2dyYW0tcHJlZml4PVBSRUZJWCAgICAgICAgICAgIHByZXBlbmQgUFJFRklYIHRvIGluc3RhbGxlZCBwcm9ncmFtIG5hbWVzCisgIC0tcHJvZ3JhbS1zdWZmaXg9U1VGRklYICAgICAgICAgICAgYXBwZW5kIFNVRkZJWCB0byBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworICAtLXByb2dyYW0tdHJhbnNmb3JtLW5hbWU9UFJPR1JBTSAgIHJ1biBzZWQgUFJPR1JBTSBvbiBpbnN0YWxsZWQgcHJvZ3JhbSBuYW1lcworCitTeXN0ZW0gdHlwZXM6CisgIC0tYnVpbGQ9QlVJTEQgICAgIGNvbmZpZ3VyZSBmb3IgYnVpbGRpbmcgb24gQlVJTEQgW2d1ZXNzZWRdCisgIC0taG9zdD1IT1NUICAgICAgIGNyb3NzLWNvbXBpbGUgdG8gYnVpbGQgcHJvZ3JhbXMgdG8gcnVuIG9uIEhPU1QgW0JVSUxEXQorICAtLXRhcmdldD1UQVJHRVQgICBjb25maWd1cmUgZm9yIGJ1aWxkaW5nIGNvbXBpbGVycyBmb3IgVEFSR0VUIFtIT1NUXQorX0FDRU9GCitmaQorCitpZiB0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIjsgdGhlbgorICBjYXNlICRhY19pbml0X2hlbHAgaW4KKyAgICAgc2hvcnQgfCByZWN1cnNpdmUgKSBlY2hvICJDb25maWd1cmF0aW9uIG9mIGx6byAyLjAzOiI7OworICAgZXNhYworICBjYXQgPDxcX0FDRU9GCisKK09wdGlvbmFsIEZlYXR1cmVzOgorICAtLWRpc2FibGUtRkVBVFVSRSAgICAgICBkbyBub3QgaW5jbHVkZSBGRUFUVVJFIChzYW1lIGFzIC0tZW5hYmxlLUZFQVRVUkU9bm8pCisgIC0tZW5hYmxlLUZFQVRVUkVbPUFSR10gIGluY2x1ZGUgRkVBVFVSRSBbQVJHPXllc10KKyAgLS1lbmFibGUtbWFpbnRhaW5lci1tb2RlICBlbmFibGUgbWFrZSBydWxlcyBhbmQgZGVwZW5kZW5jaWVzIG5vdCB1c2VmdWwKKwkJCSAgKGFuZCBzb21ldGltZXMgY29uZnVzaW5nKSB0byB0aGUgY2FzdWFsIGluc3RhbGxlcgorICAtLWRpc2FibGUtbGFyZ2VmaWxlICAgICBvbWl0IHN1cHBvcnQgZm9yIGxhcmdlIGZpbGVzCisgIC0tZGlzYWJsZS1kZXBlbmRlbmN5LXRyYWNraW5nICBzcGVlZHMgdXAgb25lLXRpbWUgYnVpbGQKKyAgLS1lbmFibGUtZGVwZW5kZW5jeS10cmFja2luZyAgIGRvIG5vdCByZWplY3Qgc2xvdyBkZXBlbmRlbmN5IGV4dHJhY3RvcnMKKyAgLS1lbmFibGUtc3RhdGljWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KKyAgLS1lbmFibGUtc2hhcmVkWz1QS0dTXQorICAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZCBzaGFyZWQgbGlicmFyaWVzIFtkZWZhdWx0PW5vXQorICAtLWVuYWJsZS1mYXN0LWluc3RhbGxbPVBLR1NdCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbiBbZGVmYXVsdD15ZXNdCisgIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgIGF2b2lkIGxvY2tpbmcgKG1pZ2h0IGJyZWFrIHBhcmFsbGVsIGJ1aWxkcykKKyAgLS1kaXNhYmxlLWFzbSAgICAgICAgICAgZGlzYWJsZSBhc3NlbWJseSB2ZXJzaW9ucworCitPcHRpb25hbCBQYWNrYWdlczoKKyAgLS13aXRoLVBBQ0tBR0VbPUFSR10gICAgdXNlIFBBQ0tBR0UgW0FSRz15ZXNdCisgIC0td2l0aG91dC1QQUNLQUdFICAgICAgIGRvIG5vdCB1c2UgUEFDS0FHRSAoc2FtZSBhcyAtLXdpdGgtUEFDS0FHRT1ubykKKyAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGgtcGljICAgICAgICAgICAgICB0cnkgdG8gdXNlIG9ubHkgUElDL25vbi1QSUMgb2JqZWN0cyBbZGVmYXVsdD11c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYm90aF0KKyAgLS13aXRoLXRhZ3NbPVRBR1NdCisgICAgICAgICAgICAgICAgICAgICAgICAgIGluY2x1ZGUgYWRkaXRpb25hbCBjb25maWd1cmF0aW9ucyBbYXV0b21hdGljXQorCitTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKKyAgQ0MgICAgICAgICAgQyBjb21waWxlciBjb21tYW5kCisgIENGTEFHUyAgICAgIEMgY29tcGlsZXIgZmxhZ3MKKyAgTERGTEFHUyAgICAgbGlua2VyIGZsYWdzLCBlLmcuIC1MPGxpYiBkaXI+IGlmIHlvdSBoYXZlIGxpYnJhcmllcyBpbiBhCisgICAgICAgICAgICAgIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8bGliIGRpcj4KKyAgQ1BQRkxBR1MgICAgQy9DKysgcHJlcHJvY2Vzc29yIGZsYWdzLCBlLmcuIC1JPGluY2x1ZGUgZGlyPiBpZiB5b3UgaGF2ZQorICAgICAgICAgICAgICBoZWFkZXJzIGluIGEgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxpbmNsdWRlIGRpcj4KKyAgQ1BQICAgICAgICAgQyBwcmVwcm9jZXNzb3IKKyAgQ1hYICAgICAgICAgQysrIGNvbXBpbGVyIGNvbW1hbmQKKyAgQ1hYRkxBR1MgICAgQysrIGNvbXBpbGVyIGZsYWdzCisgIENYWENQUCAgICAgIEMrKyBwcmVwcm9jZXNzb3IKKyAgRjc3ICAgICAgICAgRm9ydHJhbiA3NyBjb21waWxlciBjb21tYW5kCisgIEZGTEFHUyAgICAgIEZvcnRyYW4gNzcgY29tcGlsZXIgZmxhZ3MKKworVXNlIHRoZXNlIHZhcmlhYmxlcyB0byBvdmVycmlkZSB0aGUgY2hvaWNlcyBtYWRlIGJ5IGBjb25maWd1cmUnIG9yIHRvIGhlbHAKK2l0IHRvIGZpbmQgbGlicmFyaWVzIGFuZCBwcm9ncmFtcyB3aXRoIG5vbnN0YW5kYXJkIG5hbWVzL2xvY2F0aW9ucy4KKworUmVwb3J0IGJ1Z3MgdG8gPG1hcmt1c0BvYmVyaHVtZXIuY29tPi4KK19BQ0VPRgorZmkKKworaWYgdGVzdCAiJGFjX2luaXRfaGVscCIgPSAicmVjdXJzaXZlIjsgdGhlbgorICAjIElmIHRoZXJlIGFyZSBzdWJkaXJzLCByZXBvcnQgdGhlaXIgc3BlY2lmaWMgLS1oZWxwLgorICBhY19wb3BkaXI9YHB3ZGAKKyAgZm9yIGFjX2RpciBpbiA6ICRhY19zdWJkaXJzX2FsbDsgZG8gdGVzdCAieCRhY19kaXIiID0geDogJiYgY29udGludWUKKyAgICB0ZXN0IC1kICRhY19kaXIgfHwgY29udGludWUKKyAgICBhY19idWlsZGRpcj0uCisKK2lmIHRlc3QgIiRhY19kaXIiICE9IC47IHRoZW4KKyAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gIiRhY19kaXIiIHwgc2VkICdzLF5cLltcXC9dLCwnYAorICAjIEEgIi4uLyIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXI9YGVjaG8gIiRhY19kaXJfc3VmZml4IiB8IHNlZCAncywvW15cXC9dKiwuLi8sZydgCitlbHNlCisgIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcj0KK2ZpCisKK2Nhc2UgJHNyY2RpciBpbgorICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCisgICAgYWNfc3JjZGlyPS4KKyAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgorICAgICAgIGFjX3RvcF9zcmNkaXI9LgorICAgIGVsc2UKKyAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCisgICAgZmkgOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7CisgICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7CisgICopICMgUmVsYXRpdmUgcGF0aC4KKyAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKK2VzYWMKKworIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCisjIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgorY2FzZSBgcHdkYCBpbgorLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisqKQorICBjYXNlICIkYWNfZGlyIiBpbgorICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OworICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisqKQorICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KKyAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OworICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworKikKKyAgY2FzZSAkYWNfc3JjZGlyIGluCisgIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OworKikKKyAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgorICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisgICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OworICBlc2FjOzsKK2VzYWMKKworICAgIGNkICRhY19kaXIKKyAgICAjIENoZWNrIGZvciBndWVzdGVkIGNvbmZpZ3VyZTsgb3RoZXJ3aXNlIGdldCBDeWdudXMgc3R5bGUgY29uZmlndXJlLgorICAgIGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251OyB0aGVuCisgICAgICBlY2hvCisgICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUuZ251ICAtLWhlbHA9cmVjdXJzaXZlCisgICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlOyB0aGVuCisgICAgICBlY2hvCisgICAgICAkU0hFTEwgJGFjX3NyY2Rpci9jb25maWd1cmUgIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgJGFjX3NyY2Rpci9jb25maWd1cmUuYWMgfHwKKwkgICB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmluOyB0aGVuCisgICAgICBlY2hvCisgICAgICAkYWNfY29uZmlndXJlIC0taGVscAorICAgIGVsc2UKKyAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKKyAgICBmaQorICAgIGNkICIkYWNfcG9wZGlyIgorICBkb25lCitmaQorCit0ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0IDAKK2lmICRhY19pbml0X3ZlcnNpb247IHRoZW4KKyAgY2F0IDw8XF9BQ0VPRgorbHpvIGNvbmZpZ3VyZSAyLjAzCitnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkKKworQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorVGhpcyBjb25maWd1cmUgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KKworQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lci4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuCitUaGlzIGNvbmZpZ3VyZSBzY3JpcHQgbWF5IGJlIGNvcGllZCwgZGlzdHJpYnV0ZWQgYW5kIG1vZGlmaWVkIHVuZGVyIHRoZQordGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlOyBzZWUgQ09QWUlORyBmb3IgbW9yZSBkZXRhaWxzLgorX0FDRU9GCisgIGV4aXQgMAorZmkKK2V4ZWMgNT5jb25maWcubG9nCitjYXQgPiY1IDw8X0FDRU9GCitUaGlzIGZpbGUgY29udGFpbnMgYW55IG1lc3NhZ2VzIHByb2R1Y2VkIGJ5IGNvbXBpbGVycyB3aGlsZQorcnVubmluZyBjb25maWd1cmUsIHRvIGFpZCBkZWJ1Z2dpbmcgaWYgY29uZmlndXJlIG1ha2VzIGEgbWlzdGFrZS4KKworSXQgd2FzIGNyZWF0ZWQgYnkgbHpvICRhc19tZSAyLjAzLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgICQgJDAgJEAKKworX0FDRU9GCit7CitjYXQgPDxfQVNVTkFNRQorIyMgLS0tLS0tLS0tICMjCisjIyBQbGF0Zm9ybS4gIyMKKyMjIC0tLS0tLS0tLSAjIworCitob3N0bmFtZSA9IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAordW5hbWUgLW0gPSBgKHVuYW1lIC1tKSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCit1bmFtZSAtciA9IGAodW5hbWUgLXIpIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK3VuYW1lIC1zID0gYCh1bmFtZSAtcykgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAordW5hbWUgLXYgPSBgKHVuYW1lIC12KSAyPi9kZXYvbnVsbCB8fCBlY2hvIHVua25vd25gCisKKy91c3IvYmluL3VuYW1lIC1wID0gYCgvdXNyL2Jpbi91bmFtZSAtcCkgMj4vZGV2L251bGwgfHwgZWNobyB1bmtub3duYAorL2Jpbi91bmFtZSAtWCAgICAgPSBgKC9iaW4vdW5hbWUgLVgpIDI+L2Rldi9udWxsICAgICB8fCBlY2hvIHVua25vd25gCisKKy9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKK2hvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKworX0FTVU5BTUUKKworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBlY2hvICJQQVRIOiAkYXNfZGlyIgorZG9uZQorCit9ID4mNQorCitjYXQgPiY1IDw8X0FDRU9GCisKKworIyMgLS0tLS0tLS0tLS0gIyMKKyMjIENvcmUgdGVzdHMuICMjCisjIyAtLS0tLS0tLS0tLSAjIworCitfQUNFT0YKKworCisjIEtlZXAgYSB0cmFjZSBvZiB0aGUgY29tbWFuZCBsaW5lLgorIyBTdHJpcCBvdXQgLS1uby1jcmVhdGUgYW5kIC0tbm8tcmVjdXJzaW9uIHNvIHRoZXkgZG8gbm90IHBpbGUgdXAuCisjIFN0cmlwIG91dCAtLXNpbGVudCBiZWNhdXNlIHdlIGRvbid0IHdhbnQgdG8gcmVjb3JkIGl0IGZvciBmdXR1cmUgcnVucy4KKyMgQWxzbyBxdW90ZSBhbnkgYXJncyBjb250YWluaW5nIHNoZWxsIG1ldGEtY2hhcmFjdGVycy4KKyMgTWFrZSB0d28gcGFzc2VzIHRvIGFsbG93IGZvciBwcm9wZXIgZHVwbGljYXRlLWFyZ3VtZW50IHN1cHByZXNzaW9uLgorYWNfY29uZmlndXJlX2FyZ3M9CithY19jb25maWd1cmVfYXJnczA9CithY19jb25maWd1cmVfYXJnczE9CithY19zZXA9CithY19tdXN0X2tlZXBfbmV4dD1mYWxzZQorZm9yIGFjX3Bhc3MgaW4gMSAyCitkbworICBmb3IgYWNfYXJnCisgIGRvCisgICAgY2FzZSAkYWNfYXJnIGluCisgICAgLW5vLWNyZWF0ZSB8IC0tbm8tYyogfCAtbiB8IC1uby1yZWN1cnNpb24gfCAtLW5vLXIqKSBjb250aW51ZSA7OworICAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCisgICAgfCAtc2lsZW50IHwgLS1zaWxlbnQgfCAtLXNpbGVuIHwgLS1zaWxlIHwgLS1zaWwpCisgICAgICBjb250aW51ZSA7OworICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgICAgYWNfYXJnPWBlY2hvICIkYWNfYXJnIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgIGVzYWMKKyAgICBjYXNlICRhY19wYXNzIGluCisgICAgMSkgYWNfY29uZmlndXJlX2FyZ3MwPSIkYWNfY29uZmlndXJlX2FyZ3MwICckYWNfYXJnJyIgOzsKKyAgICAyKQorICAgICAgYWNfY29uZmlndXJlX2FyZ3MxPSIkYWNfY29uZmlndXJlX2FyZ3MxICckYWNfYXJnJyIKKyAgICAgIGlmIHRlc3QgJGFjX211c3Rfa2VlcF9uZXh0ID0gdHJ1ZTsgdGhlbgorCWFjX211c3Rfa2VlcF9uZXh0PWZhbHNlICMgR290IHZhbHVlLCBiYWNrIHRvIG5vcm1hbC4KKyAgICAgIGVsc2UKKwljYXNlICRhY19hcmcgaW4KKwkgICo9KiB8IC0tY29uZmlnLWNhY2hlIHwgLUMgfCAtZGlzYWJsZS0qIHwgLS1kaXNhYmxlLSogXAorCSAgfCAtZW5hYmxlLSogfCAtLWVuYWJsZS0qIHwgLWdhcyB8IC0tZyogfCAtbmZwIHwgLS1uZiogXAorCSAgfCAtcSB8IC1xdWlldCB8IC0tcSogfCAtc2lsZW50IHwgLS1zaWwqIHwgLXYgfCAtdmVyYiogXAorCSAgfCAtd2l0aC0qIHwgLS13aXRoLSogfCAtd2l0aG91dC0qIHwgLS13aXRob3V0LSogfCAtLXgpCisJICAgIGNhc2UgIiRhY19jb25maWd1cmVfYXJnczAgIiBpbgorCSAgICAgICIkYWNfY29uZmlndXJlX2FyZ3MxIioiICckYWNfYXJnJyAiKiApIGNvbnRpbnVlIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKKyAgICAgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KKyAgICAgIGFjX3NlcD0iICIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCitkb25lCiskYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KKyRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQorCisjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCisjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQorIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCisjIFdBUk5JTkc6IEJlIHN1cmUgbm90IHRvIHVzZSBzaW5nbGUgcXVvdGVzIGluIHRoZXJlLCBhcyBzb21lIHNoZWxscywKKyMgc3VjaCBhcyBvdXIgRFUgNS4wIGZyaWVuZCwgd2lsbCB0aGVuIGBjbG9zZScgdGhlIHRyYXAuCit0cmFwICdleGl0X3N0YXR1cz0kPworICAjIFNhdmUgaW50byBjb25maWcubG9nIHNvbWUgaW5mb3JtYXRpb24gdGhhdCBtaWdodCBoZWxwIGluIGRlYnVnZ2luZy4KKyAgeworICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIENhY2hlIHZhcmlhYmxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAoreworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgIHNlZCAtbiBcCisJInMvJyInIicvJyInIidcXFxcJyInIicnIiciJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nIiciJ1xcMiciJyInL3AiCisgICAgICA7OworICAgICopCisgICAgICBzZWQgLW4gXAorCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgOzsKKyAgICBlc2FjOworfQorICAgIGVjaG8KKworICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBPdXRwdXQgdmFyaWFibGVzLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgIGVjaG8KKyAgICBmb3IgYWNfdmFyIGluICRhY19zdWJzdF92YXJzCisgICAgZG8KKyAgICAgIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAorICAgICAgZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICBkb25lIHwgc29ydAorICAgIGVjaG8KKworICAgIGlmIHRlc3QgLW4gIiRhY19zdWJzdF9maWxlcyI7IHRoZW4KKyAgICAgIGNhdCA8PFxfQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0gIyMKKyMjIE91dHB1dCBmaWxlcy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0gIyMKK19BU0JPWAorICAgICAgZWNobworICAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfZmlsZXMKKyAgICAgIGRvCisJZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisJZWNobyAiJGFjX3Zhcj0nIiciJyRhY192YWwnIiciJyIKKyAgICAgIGRvbmUgfCBzb3J0CisgICAgICBlY2hvCisgICAgZmkKKworICAgIGlmIHRlc3QgLXMgY29uZmRlZnMuaDsgdGhlbgorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0gIyMKKyMjIGNvbmZkZWZzLmguICMjCisjIyAtLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgICBlY2hvCisgICAgICBzZWQgIi9eJC9kIiBjb25mZGVmcy5oIHwgc29ydAorICAgICAgZWNobworICAgIGZpCisgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgorICAgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCisgICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgfSA+JjUKKyAgcm0gLWYgY29yZSAqLmNvcmUgJiYKKyAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgICBleGl0ICRleGl0X3N0YXR1cworICAgICAnIDAKK2ZvciBhY19zaWduYWwgaW4gMSAyIDEzIDE1OyBkbworICB0cmFwICdhY19zaWduYWw9JyRhY19zaWduYWwnOyB7IChleGl0IDEpOyBleGl0IDE7IH0nICRhY19zaWduYWwKK2RvbmUKK2FjX3NpZ25hbD0wCisKKyMgY29uZmRlZnMuaCBhdm9pZHMgT1MgY29tbWFuZCBsaW5lIGxlbmd0aCBsaW1pdHMgdGhhdCBERUZTIGNhbiBleGNlZWQuCitybSAtcmYgY29uZnRlc3QqIGNvbmZkZWZzLmgKKyMgQUlYIGNwcCBsb3NlcyBvbiBhbiBlbXB0eSBmaWxlLCBzbyBtYWtlIHN1cmUgaXQgY29udGFpbnMgYXQgbGVhc3QgYSBuZXdsaW5lLgorZWNobyA+Y29uZmRlZnMuaAorCisjIFByZWRlZmluZWQgcHJlcHJvY2Vzc29yIHZhcmlhYmxlcy4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX05BTUUgIiRQQUNLQUdFX05BTUUiCitfQUNFT0YKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAiJFBBQ0tBR0VfVEFSTkFNRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICIkUEFDS0FHRV9WRVJTSU9OIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX1NUUklORyAiJFBBQ0tBR0VfU1RSSU5HIgorX0FDRU9GCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFX0JVR1JFUE9SVCAiJFBBQ0tBR0VfQlVHUkVQT1JUIgorX0FDRU9GCisKKworIyBMZXQgdGhlIHNpdGUgZmlsZSBzZWxlY3QgYW4gYWx0ZXJuYXRlIGNhY2hlIGZpbGUgaWYgaXQgd2FudHMgdG8uCisjIFByZWZlciBleHBsaWNpdGx5IHNlbGVjdGVkIGZpbGUgdG8gYXV0b21hdGljYWxseSBzZWxlY3RlZCBvbmVzLgoraWYgdGVzdCAteiAiJENPTkZJR19TSVRFIjsgdGhlbgorICBpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgICBDT05GSUdfU0lURT0iJHByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZWxzZQorICAgIENPTkZJR19TSVRFPSIkYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUgJGFjX2RlZmF1bHRfcHJlZml4L2V0Yy9jb25maWcuc2l0ZSIKKyAgZmkKK2ZpCitmb3IgYWNfc2l0ZV9maWxlIGluICRDT05GSUdfU0lURTsgZG8KKyAgaWYgdGVzdCAtciAiJGFjX3NpdGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBsb2FkaW5nIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUiID4mNjt9CisgICAgc2VkICdzL14vfCAvJyAiJGFjX3NpdGVfZmlsZSIgPiY1CisgICAgLiAiJGFjX3NpdGVfZmlsZSIKKyAgZmkKK2RvbmUKKworaWYgdGVzdCAtciAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsCisgICMgZmlsZXMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LgorICBpZiB0ZXN0IC1mICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICBjYXNlICRjYWNoZV9maWxlIGluCisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gJGNhY2hlX2ZpbGU7OworICAgICAgKikgICAgICAgICAgICAgICAgICAgICAgLiAuLyRjYWNoZV9maWxlOzsKKyAgICBlc2FjCisgIGZpCitlbHNlCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgID4kY2FjaGVfZmlsZQorZmkKKworIyBDaGVjayB0aGF0IHRoZSBwcmVjaW91cyB2YXJpYWJsZXMgc2F2ZWQgaW4gdGhlIGNhY2hlIGhhdmUga2VwdCB0aGUgc2FtZQorIyB2YWx1ZS4KK2FjX2NhY2hlX2NvcnJ1cHRlZD1mYWxzZQorZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8CisJICAgICAgIHNlZCAtbiAncy9eYWNfZW52X1woW2EtekEtWl8wLTldKlwpX3NldD0uKi9cMS9wJ2A7IGRvCisgIGV2YWwgYWNfb2xkX3NldD1cJGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfbmV3X3NldD1cJGFjX2Vudl8ke2FjX3Zhcn1fc2V0CisgIGV2YWwgYWNfb2xkX3ZhbD0iXCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlIgorICBldmFsIGFjX25ld192YWw9IlwkYWNfZW52XyR7YWNfdmFyfV92YWx1ZSIKKyAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgorICAgIHNldCwpCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OworICAgICxzZXQpCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIGFjX2NhY2hlX2NvcnJ1cHRlZD06IDs7CisgICAgLCk7OworICAgICopCisgICAgICBpZiB0ZXN0ICJ4JGFjX29sZF92YWwiICE9ICJ4JGFjX25ld192YWwiOyB0aGVuCisJeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFxgJGFjX3ZhcicgaGFzIGNoYW5nZWQgc2luY2UgdGhlIHByZXZpb3VzIHJ1bjoiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiYyO30KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjUKK2VjaG8gIiRhc19tZTogICBmb3JtZXIgdmFsdWU6ICAkYWNfb2xkX3ZhbCIgPiYyO30KKwl7IGVjaG8gIiRhc19tZTokTElORU5POiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjUKK2VjaG8gIiRhc19tZTogICBjdXJyZW50IHZhbHVlOiAkYWNfbmV3X3ZhbCIgPiYyO30KKwlhY19jYWNoZV9jb3JydXB0ZWQ9OgorICAgICAgZmk7OworICBlc2FjCisgICMgUGFzcyBwcmVjaW91cyB2YXJpYWJsZXMgdG8gY29uZmlnLnN0YXR1cy4KKyAgaWYgdGVzdCAiJGFjX25ld19zZXQiID0gc2V0OyB0aGVuCisgICAgY2FzZSAkYWNfbmV3X3ZhbCBpbgorICAgICoiICIqfCoiCSIqfCpbXFtcXVx+XCNcJFxeXCZcKlwoXClce1x9XFxcfFw7XDxcPlw/XCJcJ10qKQorICAgICAgYWNfYXJnPSRhY192YXI9YGVjaG8gIiRhY19uZXdfdmFsIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYCA7OworICAgICopIGFjX2FyZz0kYWNfdmFyPSRhY19uZXdfdmFsIDs7CisgICAgZXNhYworICAgIGNhc2UgIiAkYWNfY29uZmlndXJlX2FyZ3MgIiBpbgorICAgICAgKiIgJyRhY19hcmcnICIqKSA7OyAjIEF2b2lkIGR1cHMuICBVc2Ugb2YgcXVvdGVzIGVuc3VyZXMgYWNjdXJhY3kuCisgICAgICAqKSBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzICckYWNfYXJnJyIgOzsKKyAgICBlc2FjCisgIGZpCitkb25lCitpZiAkYWNfY2FjaGVfY29ycnVwdGVkOyB0aGVuCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjI7fQorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IHJ1biBcYG1ha2UgZGlzdGNsZWFuJyBhbmQvb3IgXGBybSAkY2FjaGVfZmlsZScgYW5kIHN0YXJ0IG92ZXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3sgZWNobyAiJGFzX21lOiRMSU5FTk86IENvbmZpZ3VyaW5nIExaTyAkUEFDS0FHRV9WRVJTSU9OIiA+JjUKK2VjaG8gIiRhc19tZTogQ29uZmlndXJpbmcgTFpPICRQQUNLQUdFX1ZFUlNJT04iID4mNjt9CisKK2FjX2F1eF9kaXI9Citmb3IgYWNfZGlyIGluIGF1dG9jb25mICRzcmNkaXIvYXV0b2NvbmY7IGRvCisgIGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLXNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC1zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9pbnN0YWxsLnNoOyB0aGVuCisgICAgYWNfYXV4X2Rpcj0kYWNfZGlyCisgICAgYWNfaW5zdGFsbF9zaD0iJGFjX2F1eF9kaXIvaW5zdGFsbC5zaCAtYyIKKyAgICBicmVhaworICBlbGlmIHRlc3QgLWYgJGFjX2Rpci9zaHRvb2w7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBhdXRvY29uZiAkc3JjZGlyL2F1dG9jb25mIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGluc3RhbGwtc2ggb3IgaW5zdGFsbC5zaCBpbiBhdXRvY29uZiAkc3JjZGlyL2F1dG9jb25mIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KKworCisjIE1ha2Ugc3VyZSB3ZSBjYW4gcnVuIGNvbmZpZy5zdWIuCiskYWNfY29uZmlnX3N1YiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gJGFjX2NvbmZpZ19zdWIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgYnVpbGQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2J1aWxkK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwordGVzdCAteiAiJGFjX2N2X2J1aWxkX2FsaWFzIiAmJgorICBhY19jdl9idWlsZF9hbGlhcz1gJGFjX2NvbmZpZ19ndWVzc2AKK3Rlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorYWNfY3ZfYnVpbGQ9YCRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhc2AgfHwKKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXMgZmFpbGVkIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfYnVpbGQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2J1aWxkIiA+JjYKK2J1aWxkPSRhY19jdl9idWlsZAorYnVpbGRfY3B1PWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCitidWlsZF92ZW5kb3I9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2J1aWxkX29zPWBlY2hvICRhY19jdl9idWlsZCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3N0IHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9ob3N0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK3Rlc3QgLXogIiRhY19jdl9ob3N0X2FsaWFzIiAmJgorICBhY19jdl9ob3N0X2FsaWFzPSRhY19jdl9idWlsZF9hbGlhcworYWNfY3ZfaG9zdD1gJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXNgIHx8CisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhcyBmYWlsZWQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ob3N0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9ob3N0IiA+JjYKK2hvc3Q9JGFjX2N2X2hvc3QKK2hvc3RfY3B1PWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKK2hvc3RfdmVuZG9yPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK2hvc3Rfb3M9YGVjaG8gJGFjX2N2X2hvc3QgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMy8nYAorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl90YXJnZXRfYWxpYXM9JHRhcmdldF9hbGlhcwordGVzdCAieCRhY19jdl90YXJnZXRfYWxpYXMiID0gIngiICYmCisgIGFjX2N2X3RhcmdldF9hbGlhcz0kYWNfY3ZfaG9zdF9hbGlhcworYWNfY3ZfdGFyZ2V0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzYCB8fAorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdGFyZ2V0IiA+JjYKK3RhcmdldD0kYWNfY3ZfdGFyZ2V0Cit0YXJnZXRfY3B1PWBlY2hvICRhY19jdl90YXJnZXQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMS8nYAordGFyZ2V0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDIvJ2AKK3RhcmdldF9vcz1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKworCisjIFRoZSBhbGlhc2VzIHNhdmUgdGhlIG5hbWVzIHRoZSB1c2VyIHN1cHBsaWVkLCB3aGlsZSAkaG9zdCBldGMuCisjIHdpbGwgZ2V0IGNhbm9uaWNhbGl6ZWQuCit0ZXN0IC1uICIkdGFyZ2V0X2FsaWFzIiAmJgorICB0ZXN0ICIkcHJvZ3JhbV9wcmVmaXgkcHJvZ3JhbV9zdWZmaXgkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIgPSBcCisgICAgTk9ORU5PTkVzLHgseCwgJiYKKyAgcHJvZ3JhbV9wcmVmaXg9JHt0YXJnZXRfYWxpYXN9LQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIG1haW50YWluZXItc3BlY2lmaWMgcG9ydGlvbnMgb2YgTWFrZWZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgbWFpbnRhaW5lci1zcGVjaWZpYyBwb3J0aW9ucyBvZiBNYWtlZmlsZXMuLi4gJEVDSE9fQyIgPiY2CisgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1haW50YWluZXItbW9kZSBvciAtLWRpc2FibGUtbWFpbnRhaW5lci1tb2RlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21haW50YWluZXJfbW9kZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbWFpbnRhaW5lcl9tb2RlIgorICBVU0VfTUFJTlRBSU5FUl9NT0RFPSRlbmFibGV2YWwKK2Vsc2UKKyAgVVNFX01BSU5UQUlORVJfTU9ERT1ubworZmk7CisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRVU0VfTUFJTlRBSU5FUl9NT0RFIiA+JjYKKworCitpZiB0ZXN0ICRVU0VfTUFJTlRBSU5FUl9NT0RFID0geWVzOyB0aGVuCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPQorICBNQUlOVEFJTkVSX01PREVfRkFMU0U9JyMnCitlbHNlCisgIE1BSU5UQUlORVJfTU9ERV9UUlVFPScjJworICBNQUlOVEFJTkVSX01PREVfRkFMU0U9CitmaQorCisgIE1BSU5UPSRNQUlOVEFJTkVSX01PREVfVFJVRQorCisKKworaWYgdGVzdCAteiAiJGFjX2Fic190b3Bfc3JjZGlyIjsgdGhlbgorICAgIGFjX2J1aWxkZGlyPS4KKworaWYgdGVzdCAuICE9IC47IHRoZW4KKyAgYWNfZGlyX3N1ZmZpeD0vYGVjaG8gLiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKKyAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KKyAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAorZWxzZQorICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9CitmaQorCitjYXNlICRzcmNkaXIgaW4KKyAgLikgICMgTm8gLS1zcmNkaXIgb3B0aW9uLiAgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgorICAgIGFjX3NyY2Rpcj0uCisgICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KKyAgICAgICBhY190b3Bfc3JjZGlyPS4KKyAgICBlbHNlCisgICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAorICAgIGZpIDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY19zcmNkaXI9JHNyY2RpciRhY19kaXJfc3VmZml4OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpciA7OworICAqKSAjIFJlbGF0aXZlIHBhdGguCisgICAgYWNfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyJGFjX2Rpcl9zdWZmaXgKKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXIkc3JjZGlyIDs7Citlc2FjCisKKyMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQorIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KK2Nhc2UgYHB3ZGAgaW4KKy4pIGFjX2Fic19idWlsZGRpcj0uOzsKKyopCisgIGNhc2UgLiBpbgorICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0uOzsKKyAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLy47OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyopCisgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY19zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworCitmaQoraWYgdGVzdCAtciAuQ29uZi5zZXR0aW5nczE7IHRoZW4KKyAgICAuIC4vLkNvbmYuc2V0dGluZ3MxCitmaQorCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1nY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9Z2NjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCitDQz0kYWNfY3ZfcHJvZ19DQworaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JENDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX0NDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJnY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGdjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImdjYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK2FjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCitpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIENDPSRhY19jdF9DQworZWxzZQorICBDQz0iJGFjX2N2X3Byb2dfQ0MiCitmaQorCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWNjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCisgIGFjX2N0X0NDPSRDQworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBjYzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImNjIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKK2lmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgQ0M9JGFjX2N0X0NDCitlbHNlCisgIENDPSIkYWNfY3ZfcHJvZ19DQyIKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiY2MiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGNjOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKKyAgYWNfcHJvZ19yZWplY3RlZD1ubworYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBpZiB0ZXN0ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA9ICIvdXNyL3VjYi9jYyI7IHRoZW4KKyAgICAgICBhY19wcm9nX3JlamVjdGVkPXllcworICAgICAgIGNvbnRpbnVlCisgICAgIGZpCisgICAgYWNfY3ZfcHJvZ19DQz0iY2MiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworaWYgdGVzdCAkYWNfcHJvZ19yZWplY3RlZCA9IHllczsgdGhlbgorICAjIFdlIGZvdW5kIGEgYm9nb24gaW4gdGhlIHBhdGgsIHNvIG1ha2Ugc3VyZSB3ZSBuZXZlciB1c2UgaXQuCisgIHNldCBkdW1teSAkYWNfY3ZfcHJvZ19DQworICBzaGlmdAorICBpZiB0ZXN0ICQjICE9IDA7IHRoZW4KKyAgICAjIFdlIGNob3NlIGEgZGlmZmVyZW50IGNvbXBpbGVyIGZyb20gdGhlIGJvZ3VzIG9uZS4KKyAgICAjIEhvd2V2ZXIsIGl0IGhhcyB0aGUgc2FtZSBiYXNlbmFtZSwgc28gdGhlIGJvZ29uIHdpbGwgYmUgY2hvc2VuCisgICAgIyBmaXJzdCBpZiB3ZSBzZXQgQ0MgdG8ganVzdCB0aGUgYmFzZW5hbWU7IHVzZSB0aGUgZnVsbCBmaWxlIG5hbWUuCisgICAgc2hpZnQKKyAgICBhY19jdl9wcm9nX0NDPSIkYXNfZGlyLyRhY193b3JkJHsxKycgJ30kQCIKKyAgZmkKK2ZpCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGNsCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgorICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK0NDPSRhY19jdl9wcm9nX0NDCitpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1CitlY2hvICIke0VDSE9fVH0kQ0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgICAgdGVzdCAtbiAiJENDIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENDIjsgdGhlbgorICBhY19jdF9DQz0kQ0MKKyAgZm9yIGFjX3Byb2cgaW4gY2wKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCithY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQworaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkYWNfY3RfQ0MiICYmIGJyZWFrCitkb25lCisKKyAgQ0M9JGFjX2N0X0NDCitmaQorCitmaQorCisKK3Rlc3QgLXogIiRDQyIgJiYgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogbm8gYWNjZXB0YWJsZSBDIGNvbXBpbGVyIGZvdW5kIGluIFwkUEFUSAorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgorZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCisgICAgICJjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK2FjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKK3sgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorYWNfY2xlYW5fZmlsZXNfc2F2ZT0kYWNfY2xlYW5fZmlsZXMKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5leGUgYi5vdXQiCisjIFRyeSB0byBjcmVhdGUgYW4gZXhlY3V0YWJsZSB3aXRob3V0IC1vIGZpcnN0LCBkaXNyZWdhcmQgYS5vdXQuCisjIEl0IHdpbGwgaGVscCB1cyBkaWFnbm9zZSBicm9rZW4gY29tcGlsZXJzLCBhbmQgZmluZGluZyBvdXQgYW4gaW50dWl0aW9uCisjIG9mIGV4ZWV4dC4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUuLi4gJEVDSE9fQyIgPiY2CithY19saW5rX2RlZmF1bHQ9YGVjaG8gIiRhY19saW5rIiB8IHNlZCAncy8gLW8gKmNvbmZ0ZXN0W14gXSovLydgCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rX2RlZmF1bHRcIiIpID4mNQorICAoZXZhbCAkYWNfbGlua19kZWZhdWx0KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICMgRmluZCB0aGUgb3V0cHV0LCBzdGFydGluZyBmcm9tIHRoZSBtb3N0IGxpa2VseS4gIFRoaXMgc2NoZW1lIGlzCisjIG5vdCByb2J1c3QgdG8ganVuayBpbiBgLicsIGhlbmNlIGdvIHRvIHdpbGRjYXJkcyAoYS4qKSBvbmx5IGFzIGEgbGFzdAorIyByZXNvcnQuCisKKyMgQmUgY2FyZWZ1bCB0byBpbml0aWFsaXplIHRoaXMgdmFyaWFibGUsIHNpbmNlIGl0IHVzZWQgdG8gYmUgY2FjaGVkLgorIyBPdGhlcndpc2UgYW4gb2xkIGNhY2hlIHZhbHVlIG9mIGBubycgbGVkIHRvIGBFWEVFWFQgPSBubycgaW4gYSBNYWtlZmlsZS4KK2FjX2N2X2V4ZWV4dD0KKyMgYi5vdXQgaXMgY3JlYXRlZCBieSBpOTYwIGNvbXBpbGVycy4KK2ZvciBhY19maWxlIGluIGFfb3V0LmV4ZSBhLmV4ZSBjb25mdGVzdC5leGUgYS5vdXQgY29uZnRlc3QgYS4qIGNvbmZ0ZXN0LiogYi5vdXQKK2RvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQorICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCisJOzsKKyAgICBjb25mdGVzdC4kYWNfZXh0ICkKKwkjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorCTs7CisgICAgW2FiXS5vdXQgKQorCSMgV2UgZm91bmQgdGhlIGRlZmF1bHQgZXhlY3V0YWJsZSwgYnV0IGV4ZWV4dD0nJyBpcyBtb3N0CisJIyBjZXJ0YWlubHkgcmlnaHQuCisJYnJlYWs7OworICAgICouKiApCisJYWNfY3ZfZXhlZXh0PWBleHByICIkYWNfZmlsZSIgOiAnW14uXSpcKFwuLipcKSdgCisJIyBGSVhNRTogSSBiZWxpZXZlIHdlIGV4cG9ydCBhY19jdl9leGVleHQgZm9yIExpYnRvb2wsCisJIyBidXQgaXQgd291bGQgYmUgY29vbCB0byBmaW5kIG91dCBpZiBpdCdzIHRydWUuICBEb2VzIGFueWJvZHkKKwkjIG1haW50YWluIExpYnRvb2w/IC0tYWtpbS4KKwlleHBvcnQgYWNfY3ZfZXhlZXh0CisJYnJlYWs7OworICAgICogKQorCWJyZWFrOzsKKyAgZXNhYworZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQorZmkKKworYWNfZXhlZXh0PSRhY19jdl9leGVleHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19maWxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19maWxlIiA+JjYKKworIyBDaGVjayB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MuLi4gJEVDSE9fQyIgPiY2CisjIEZJWE1FOiBUaGVzZSBjcm9zcyBjb21waWxlciBoYWNrcyBzaG91bGQgYmUgcmVtb3ZlZCBmb3IgQXV0b2NvbmYgMy4wCisjIElmIG5vdCBjcm9zcyBjb21waWxpbmcsIGNoZWNrIHRoYXQgd2UgY2FuIHJ1biBhIHNpbXBsZSBwcm9ncmFtLgoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgIT0geWVzOyB0aGVuCisgIGlmIHsgYWNfdHJ5PScuLyRhY19maWxlJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICAgY3Jvc3NfY29tcGlsaW5nPW5vCisgIGVsc2UKKyAgICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IG1heWJlOyB0aGVuCisJY3Jvc3NfY29tcGlsaW5nPXllcworICAgIGVsc2UKKwl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCitJZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gQyBjb21waWxlZCBwcm9ncmFtcy4KK0lmIHlvdSBtZWFudCB0byBjcm9zcyBjb21waWxlLCB1c2UgXGAtLWhvc3QnLgorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBmaQorICBmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorCitybSAtZiBhLm91dCBhLmV4ZSBjb25mdGVzdCRhY19jdl9leGVleHQgYi5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCisjIENoZWNrIHRoZSBjb21waWxlciBwcm9kdWNlcyBleGVjdXRhYmxlcyB3ZSBjYW4gcnVuLiAgSWYgbm90LCBlaXRoZXIKKyMgdGhlIGNvbXBpbGVyIGlzIGJyb2tlbiwgb3Igd2UgY3Jvc3MgY29tcGlsZS4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gJEVDSE9fQyIgPiY2CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY3Jvc3NfY29tcGlsaW5nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjcm9zc19jb21waWxpbmciID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBJZiBib3RoIGBjb25mdGVzdC5leGUnIGFuZCBgY29uZnRlc3QnIGFyZSBgcHJlc2VudCcgKHdlbGwsIG9ic2VydmFibGUpCisjIGNhdGNoIGBjb25mdGVzdC5leGUnLiAgRm9yIGluc3RhbmNlIHdpdGggQ3lnd2luLCBgbHMgY29uZnRlc3QnIHdpbGwKKyMgd29yayBwcm9wZXJseSAoaS5lLiwgcmVmZXIgdG8gYGNvbmZ0ZXN0LmV4ZScpLCB3aGlsZSBpdCB3b24ndCB3aXRoCisjIGBybScuCitmb3IgYWNfZmlsZSBpbiBjb25mdGVzdC5leGUgY29uZnRlc3QgY29uZnRlc3QuKjsgZG8KKyAgdGVzdCAtZiAiJGFjX2ZpbGUiIHx8IGNvbnRpbnVlCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubyB8ICoub2JqICkgOzsKKyAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKKwkgIGV4cG9ydCBhY19jdl9leGVleHQKKwkgIGJyZWFrOzsKKyAgICAqICkgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2CisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQKK0VYRUVYVD0kYWNfY3ZfZXhlZXh0CithY19leGVleHQ9JEVYRUVYVAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X29iamV4dCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QubyBjb25mdGVzdC5vYmoKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICBmb3IgYWNfZmlsZSBpbiBgKGxzIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqOyBscyBjb25mdGVzdC4qKSAyPi9kZXYvbnVsbGA7IGRvCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyApIDs7CisgICAgKikgYWNfY3Zfb2JqZXh0PWBleHByICIkYWNfZmlsZSIgOiAnLipcLlwoLipcKSdgCisgICAgICAgYnJlYWs7OworICBlc2FjCitkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzOiBjYW5ub3QgY29tcGlsZQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK3JtIC1mIGNvbmZ0ZXN0LiRhY19jdl9vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29iamV4dCIgPiY2CitPQkpFWFQ9JGFjX2N2X29iamV4dAorYWNfb2JqZXh0PSRPQkpFWFQKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2NfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKyNpZm5kZWYgX19HTlVDX18KKyAgICAgICBjaG9rZSBtZQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9jX2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjYKK0dDQz1gdGVzdCAkYWNfY29tcGlsZXJfZ251ID0geWVzICYmIGVjaG8geWVzYAorYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQorYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworQ0ZMQUdTPSItZyIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9wcm9nX2NjX2c9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3Byb2dfY2NfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX2ciID4mNgoraWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgorICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCitlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIENGTEFHUz0iLWcgLU8yIgorICBlbHNlCisgICAgQ0ZMQUdTPSItZyIKKyAgZmkKK2Vsc2UKKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBDRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENGTEFHUz0KKyAgZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jdl9wcm9nX2NjX3N0ZGM9bm8KK2FjX3NhdmVfQ0M9JENDCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisvKiBNb3N0IG9mIHRoZSBmb2xsb3dpbmcgdGVzdHMgYXJlIHN0b2xlbiBmcm9tIFJDUyA1LjcncyBzcmMvY29uZi5zaC4gICovCitzdHJ1Y3QgYnVmIHsgaW50IHg7IH07CitGSUxFICogKCpyY3NvcGVuKSAoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpOworc3RhdGljIGNoYXIgKmUgKHAsIGkpCisgICAgIGNoYXIgKipwOworICAgICBpbnQgaTsKK3sKKyAgcmV0dXJuIHBbaV07Cit9CitzdGF0aWMgY2hhciAqZiAoY2hhciAqICgqZykgKGNoYXIgKiosIGludCksIGNoYXIgKipwLCAuLi4pCit7CisgIGNoYXIgKnM7CisgIHZhX2xpc3QgdjsKKyAgdmFfc3RhcnQgKHYscCk7CisgIHMgPSBnIChwLCB2YV9hcmcgKHYsaW50KSk7CisgIHZhX2VuZCAodik7CisgIHJldHVybiBzOworfQorCisvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcworICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgorICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCisgICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAorICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgorICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCisgICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZDEuICAqLworaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKKworaW50IHRlc3QgKGludCBpLCBkb3VibGUgeCk7CitzdHJ1Y3QgczEge2ludCAoKmYpIChpbnQgYSk7fTsKK3N0cnVjdCBzMiB7aW50ICgqZikgKGRvdWJsZSBhKTt9OworaW50IHBhaXJuYW1lcyAoaW50LCBjaGFyICoqLCBGSUxFICooKikoc3RydWN0IGJ1ZiAqLCBzdHJ1Y3Qgc3RhdCAqLCBpbnQpLCBpbnQsIGludCk7CitpbnQgYXJnYzsKK2NoYXIgKiphcmd2OworaW50CittYWluICgpCit7CityZXR1cm4gZiAoZSwgYXJndiwgMCkgIT0gYXJndlswXSAgfHwgIGYgKGUsIGFyZ3YsIDEpICE9IGFyZ3ZbMV07CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKyMgRG9uJ3QgdHJ5IGdjYyAtYW5zaTsgdGhhdCB0dXJucyBvZmYgdXNlZnVsIGV4dGVuc2lvbnMgYW5kCisjIGJyZWFrcyBzb21lIHN5c3RlbXMnIGhlYWRlciBmaWxlcy4KKyMgQUlYCQkJLXFsYW5nbHZsPWFuc2kKKyMgVWx0cml4IGFuZCBPU0YvMQktc3RkMQorIyBIUC1VWCAxMC4yMCBhbmQgbGF0ZXIJLUFlCisjIEhQLVVYIG9sZGVyIHZlcnNpb25zCS1BYSAtRF9IUFVYX1NPVVJDRQorIyBTVlI0CQkJLVhjIC1EX19FWFRFTlNJT05TX18KK2ZvciBhY19hcmcgaW4gIiIgLXFsYW5nbHZsPWFuc2kgLXN0ZDEgLUFlICItQWEgLURfSFBVWF9TT1VSQ0UiICItWGMgLURfX0VYVEVOU0lPTlNfXyIKK2RvCisgIENDPSIkYWNfc2F2ZV9DQyAkYWNfYXJnIgorICBybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9wcm9nX2NjX3N0ZGM9JGFjX2FyZworYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0Citkb25lCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK0NDPSRhY19zYXZlX0NDCisKK2ZpCisKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19zdGRjIiBpbgorICB4fHhubykKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIG5lZWRlZCIgPiY1CitlY2hvICIke0VDSE9fVH1ub25lIG5lZWRlZCIgPiY2IDs7CisgICopCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2Nfc3RkYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjYKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX3N0ZGMiIDs7Citlc2FjCisKKyMgU29tZSBwZW9wbGUgdXNlIGEgQysrIGNvbXBpbGVyIHRvIGNvbXBpbGUgQy4gIFNpbmNlIHdlIHVzZSBgZXhpdCcsCisjIGluIEMrKyB3ZSBuZWVkIHRvIGRlY2xhcmUgaXQuICBJbiBjYXNlIHNvbWVvbmUgdXNlcyB0aGUgc2FtZSBjb21waWxlcgorIyBmb3IgYm90aCBjb21waWxpbmcgQyBhbmQgQysrIHdlIG5lZWQgdG8gaGF2ZSB0aGUgQysrIGNvbXBpbGVyIGRlY2lkZQorIyB0aGUgZGVjbGFyYXRpb24gb2YgZXhpdCwgc2luY2UgaXQncyB0aGUgbW9zdCBkZW1hbmRpbmcgZW52aXJvbm1lbnQuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgY2hva2UgbWUKKyNlbmRpZgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAorICAgJycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCisgICAndm9pZCBleGl0IChpbnQpOycKK2RvCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2RlY2xhcmF0aW9uCisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfZGVjbGFyYXRpb24KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorcm0gLWYgY29uZnRlc3QqCitpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCisgIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCisgIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCisgIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCitmaQorCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgorIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KK2lmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCisgIENQUD0KK2ZpCitpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgorICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKKyAgICBmb3IgQ1BQIGluICIkQ0MgLUUiICIkQ0MgLUUgLXRyYWRpdGlvbmFsLWNwcCIgIi9saWIvY3BwIgorICAgIGRvCisgICAgICBhY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICBicmVhaworZmkKKworICAgIGRvbmUKKyAgICBhY19jdl9wcm9nX0NQUD0kQ1BQCisKK2ZpCisgIENQUD0kYWNfY3ZfcHJvZ19DUFAKK2Vsc2UKKyAgYWNfY3ZfcHJvZ19DUFA9JENQUAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDUFAiID4mNQorZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2CithY19wcmVwcm9jX29rPWZhbHNlCitmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgOgorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKKworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICA6CitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSBDIHByZXByb2Nlc3NvciBuZWVkcyBzcGVjaWFsIGZsYWdzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBwcmVwcm9jZXNzb3IgbmVlZHMgc3BlY2lhbCBmbGFncy4uLiAkRUNIT19DIiA+JjYKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpbmNsdWRlICJ5b3VyIEMgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAxIgorI2VsaWYgKDB4ZmZmZnUgPT0gMHhmZmZmZmZmZnVsKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMiIKKyNlbGlmICgzMjc2NyA+PSBVTE9OR19NQVgpIHx8ICg2NTUzNXUgPj0gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAieW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMyIKKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKKworbWZ4X3NhdmVfQ1BQRkxBR1M9JENQUEZMQUdTCittZnhfdG1wPUVSUk9SCitmb3IgbWZ4X2FyZyBpbiAiIiAtbm8tY3BwLXByZWNvbXAKK2RvCisgIENQUEZMQUdTPSIkbWZ4X2FyZyAkbWZ4X3NhdmVfQ1BQRkxBR1MiCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIG1meF90bXA9JG1meF9hcmcKK2JyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorZG9uZQorQ1BQRkxBR1M9JG1meF9zYXZlX0NQUEZMQUdTCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQKK2Nhc2UgeCRtZnhfdG1wIGluCisgIHgpCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworICB4RVJST1IpCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogRVJST1IiID4mNQorZWNobyAiJHtFQ0hPX1R9RVJST1IiID4mNgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHlvdXIgQyBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogeW91ciBDIHByZXByb2Nlc3NvciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIDs7CisgICopCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG1meF90bXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JG1meF90bXAiID4mNgorICAgIENQUEZMQUdTPSIkbWZ4X3RtcCAkQ1BQRkxBR1MiCisgICAgOzsKK2VzYWMKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9jX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKy8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KKyNpZm5kZWYgX19jcGx1c3BsdXMKKyAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKKyAgY29uc3QgY2hhcnNldCB4OworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOworICBjaGFyICoqcDsKKyAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OworICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKKyAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgorICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgorICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50CisgICAgIGV4cHJlc3Npb24gKi8KKyAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOworICBjY3AgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrY2NwOworICBwID0gKGNoYXIqKikgY2NwOworICBjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKKyAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KKyAgICBjaGFyICp0OworICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7CisKKyAgICAqdCsrID0gMDsKKyAgfQorICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLworICAgIGludCB4W10gPSB7MjUsIDE3fTsKKyAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOworICAgICsrZm9vOworICB9CisgIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLworICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOworICAgIGlwdHIgcCA9IDA7CisgICAgKytwOworICB9CisgIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZworICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KKyAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OworICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKKyAgfQorICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLworICAgIGNvbnN0IGludCBmb28gPSAxMDsKKyAgfQorI2VuZGlmCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfY19jb25zdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfY19jb25zdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY19jb25zdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY19jb25zdCIgPiY2CitpZiB0ZXN0ICRhY19jdl9jX2NvbnN0ID0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgY29uc3QKK19BQ0VPRgorCitmaQorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfY19iaWdlbmRpYW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBTZWUgaWYgc3lzL3BhcmFtLmggZGVmaW5lcyB0aGUgQllURV9PUkRFUiBtYWNyby4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCitpbnQKK21haW4gKCkKK3sKKyNpZiAhQllURV9PUkRFUiB8fCAhQklHX0VORElBTiB8fCAhTElUVExFX0VORElBTgorIGJvZ3VzIGVuZGlhbiBtYWNyb3MKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworaW50CittYWluICgpCit7CisjaWYgQllURV9PUkRFUiAhPSBCSUdfRU5ESUFOCisgbm90IGJpZyBlbmRpYW4KKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9jX2JpZ2VuZGlhbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworIyBJdCBkb2VzIG5vdDsgY29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgdHJ5IHRvIGd1ZXNzIHRoZSBlbmRpYW5uZXNzIGJ5IGdyZXBwaW5nIHZhbHVlcyBpbnRvIGFuIG9iamVjdCBmaWxlCisgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCitzaG9ydCBhc2NpaV9tbVtdID0geyAweDQyNDksIDB4NDc2NSwgMHg2RTQ0LCAweDY5NjEsIDB4NkU1MywgMHg3OTUzLCAwIH07CitzaG9ydCBhc2NpaV9paVtdID0geyAweDY5NEMsIDB4NTQ1NCwgMHg2NTZDLCAweDZFNDUsIDB4Njk0NCwgMHg2RTYxLCAwIH07Cit2b2lkIF9hc2NpaSAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBhc2NpaV9tbTsgcyA9IChjaGFyICopIGFzY2lpX2lpOyB9CitzaG9ydCBlYmNkaWNfaWlbXSA9IHsgMHg4OUQzLCAweEUzRTMsIDB4ODU5MywgMHg5NUM1LCAweDg5QzQsIDB4OTU4MSwgMCB9Oworc2hvcnQgZWJjZGljX21tW10gPSB7IDB4QzJDOSwgMHhDNzg1LCAweDk1QzQsIDB4ODk4MSwgMHg5NUUyLCAweEE4RTIsIDAgfTsKK3ZvaWQgX2ViY2RpYyAoKSB7IGNoYXIgKnMgPSAoY2hhciAqKSBlYmNkaWNfbW07IHMgPSAoY2hhciAqKSBlYmNkaWNfaWk7IH0KK2ludAorbWFpbiAoKQoreworIF9hc2NpaSAoKTsgX2ViY2RpYyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgaWYgZ3JlcCBCSUdlbkRpYW5TeVMgY29uZnRlc3QuJGFjX29iamV4dCA+L2Rldi9udWxsIDsgdGhlbgorICBhY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisgIGlmIHRlc3QgIiRhY19jdl9jX2JpZ2VuZGlhbiIgPSB1bmtub3duOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KKyAgZWxzZQorICAgICMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworICAgIGFjX2N2X2NfYmlnZW5kaWFuPXVua25vd24KKyAgZmkKK2ZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworaW50CittYWluICgpCit7CisgIC8qIEFyZSB3ZSBsaXR0bGUgb3IgYmlnIGVuZGlhbj8gIEZyb20gSGFyYmlzb24mU3RlZWxlLiAgKi8KKyAgdW5pb24KKyAgeworICAgIGxvbmcgbDsKKyAgICBjaGFyIGNbc2l6ZW9mIChsb25nKV07CisgIH0gdTsKKyAgdS5sID0gMTsKKyAgZXhpdCAodS5jW3NpemVvZiAobG9uZykgLSAxXSA9PSAxKTsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9jX2JpZ2VuZGlhbj15ZXMKK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2CitjYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbgorICB5ZXMpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIExaT19BQklfQklHX0VORElBTiAxCitfQUNFT0YKKyA7OworICBubykKKworY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKKyNkZWZpbmUgTFpPX0FCSV9MSVRUTEVfRU5ESUFOIDEKK19BQ0VPRgorIDs7CisgICopCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5rbm93biBlbmRpYW5uZXNzCitwcmVzZXR0aW5nIGFjX2N2X2NfYmlnZW5kaWFuPW5vIChvciB5ZXMpIHdpbGwgaGVscCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKK3ByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxhcmdlZmlsZSBvciAtLWRpc2FibGUtbGFyZ2VmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xhcmdlZmlsZStzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbGFyZ2VmaWxlIgorCitmaTsKK2lmIHRlc3QgIiRlbmFibGVfbGFyZ2VmaWxlIiAhPSBubzsgdGhlbgorCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3BlY2lhbCBDIGNvbXBpbGVyIG9wdGlvbnMgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzcGVjaWFsIEMgY29tcGlsZXIgb3B0aW9ucyBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfbGFyZ2VmaWxlX0NDK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9bm8KKyAgICAgaWYgdGVzdCAiJEdDQyIgIT0geWVzOyB0aGVuCisgICAgICAgYWNfc2F2ZV9DQz0kQ0MKKyAgICAgICB3aGlsZSA6OyBkbworICAgICAJICMgSVJJWCA2LjIgYW5kIGxhdGVyIGRvIG5vdCBzdXBwb3J0IGxhcmdlIGZpbGVzIGJ5IGRlZmF1bHQsCisgICAgIAkgIyBzbyB1c2UgdGhlIEMgY29tcGlsZXIncyAtbjMyIG9wdGlvbiBpZiB0aGF0IGhlbHBzLgorCSBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisgICAgIAkgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisgICAgIAkgQ0M9IiRDQyAtbjMyIgorICAgICAJIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3N5c19sYXJnZWZpbGVfQ0M9JyAtbjMyJzsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0CisJIGJyZWFrCisgICAgICAgZG9uZQorICAgICAgIENDPSRhY19zYXZlX0NDCisgICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19sYXJnZWZpbGVfQ0MiID4mNgorICBpZiB0ZXN0ICIkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQyIgIT0gbm87IHRoZW4KKyAgICBDQz0kQ0MkYWNfY3Zfc3lzX2xhcmdlZmlsZV9DQworICBmaQorCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0ZJTEVfT0ZGU0VUX0JJVFMgdmFsdWUgbmVlZGVkIGZvciBsYXJnZSBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfRklMRV9PRkZTRVRfQklUUyB2YWx1ZSBuZWVkZWQgZm9yIGxhcmdlIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz1ubworICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNkZWZpbmUgX0ZJTEVfT0ZGU0VUX0JJVFMgNjQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAvKiBDaGVjayB0aGF0IG9mZl90IGNhbiByZXByZXNlbnQgMioqNjMgLSAxIGNvcnJlY3RseS4KKyAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCisgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycworICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKKwkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQorCQkgICAgICA/IDEgOiAtMV07CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cz02NDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgYnJlYWsKK2RvbmUKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N5c19maWxlX29mZnNldF9iaXRzIiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zeXNfZmlsZV9vZmZzZXRfYml0cyIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBfRklMRV9PRkZTRVRfQklUUyAkYWNfY3Zfc3lzX2ZpbGVfb2Zmc2V0X2JpdHMKK19BQ0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QqCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgX0xBUkdFX0ZJTEVTIHZhbHVlIG5lZWRlZCBmb3IgbGFyZ2UgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3N5c19sYXJnZV9maWxlcytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICB3aGlsZSA6OyBkbworICBhY19jdl9zeXNfbGFyZ2VfZmlsZXM9bm8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjZGVmaW5lIF9MQVJHRV9GSUxFUyAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgLyogQ2hlY2sgdGhhdCBvZmZfdCBjYW4gcmVwcmVzZW50IDIqKjYzIC0gMSBjb3JyZWN0bHkuCisgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIzMzcyMDM2ODU0Nzc1ODA3LAorICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRpbmcgYXMgQyBjb21waWxlcnMKKyAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3NTgwNy4gICovCisjZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAoKG9mZl90KSAxIDw8IDYyKSkKKyAgaW50IG9mZl90X2lzX2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCisJCSAgICAgICAmJiBMQVJHRV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKKwkJICAgICAgPyAxIDogLTFdOworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzPTE7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGJyZWFrCitkb25lCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N5c19sYXJnZV9maWxlcyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc3lzX2xhcmdlX2ZpbGVzIiA+JjYKK2lmIHRlc3QgIiRhY19jdl9zeXNfbGFyZ2VfZmlsZXMiICE9IG5vOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgX0xBUkdFX0ZJTEVTICRhY19jdl9zeXNfbGFyZ2VfZmlsZXMKK19BQ0VPRgorCitmaQorcm0gLWYgY29uZnRlc3QqCitmaQorCisKK2FtX19hcGlfdmVyc2lvbj0iMS45IgorIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCitpZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgorY2FzZSAkYXNfZGlyLyBpbgorICAuLyB8IC4vLyB8IC9jQy8qIHwgXAorICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKKyAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCisgIC91c3IvdWNiLyogKSA7OworICAqKQorICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCisgICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290CisgICAgIyBieSBkZWZhdWx0LgorICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KKyAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisJICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KKwkgICAgOgorCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgorCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgorCSAgICA6CisJICBlbHNlCisJICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgYnJlYWsgMworCSAgZmkKKwlmaQorICAgICAgZG9uZQorICAgIGRvbmUKKyAgICA7OworZXNhYworZG9uZQorCisKK2ZpCisgIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCisgIGVsc2UKKyAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCisgICAgIyBwYXRoIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLgorICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKKyAgZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CitlY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2CisKKyMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KKyMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCit0ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCisKK3Rlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGJ1aWxkIGVudmlyb25tZW50IGlzIHNhbmUuLi4gJEVDSE9fQyIgPiY2CisjIEp1c3QgaW4gY2FzZQorc2xlZXAgMQorZWNobyB0aW1lc3RhbXAgPiBjb25mdGVzdC5maWxlCisjIERvIGBzZXQnIGluIGEgc3Vic2hlbGwgc28gd2UgZG9uJ3QgY2xvYmJlciB0aGUgY3VycmVudCBzaGVsbCdzCisjIGFyZ3VtZW50cy4gIE11c3QgdHJ5IC1MIGZpcnN0IGluIGNhc2UgY29uZmlndXJlIGlzIGFjdHVhbGx5IGEKKyMgc3ltbGluazsgc29tZSBzeXN0ZW1zIHBsYXkgd2VpcmQgZ2FtZXMgd2l0aCB0aGUgbW9kIHRpbWUgb2Ygc3ltbGlua3MKKyMgKGVnIEZyZWVCU0QgcmV0dXJucyB0aGUgbW9kIHRpbWUgb2YgdGhlIHN5bWxpbmsncyBjb250YWluaW5nCisjIGRpcmVjdG9yeSkuCitpZiAoCisgICBzZXQgWCBgbHMgLUx0ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUgMj4gL2Rldi9udWxsYAorICAgaWYgdGVzdCAiJCoiID0gIlgiOyB0aGVuCisgICAgICAjIC1MIGRpZG4ndCB3b3JrLgorICAgICAgc2V0IFggYGxzIC10ICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGVgCisgICBmaQorICAgcm0gLWYgY29uZnRlc3QuZmlsZQorICAgaWYgdGVzdCAiJCoiICE9ICJYICRzcmNkaXIvY29uZmlndXJlIGNvbmZ0ZXN0LmZpbGUiIFwKKyAgICAgICYmIHRlc3QgIiQqIiAhPSAiWCBjb25mdGVzdC5maWxlICRzcmNkaXIvY29uZmlndXJlIjsgdGhlbgorCisgICAgICAjIElmIG5laXRoZXIgbWF0Y2hlZCwgdGhlbiB3ZSBoYXZlIGEgYnJva2VuIGxzLiAgVGhpcyBjYW4gaGFwcGVuCisgICAgICAjIGlmLCBmb3IgaW5zdGFuY2UsIENPTkZJR19TSEVMTCBpcyBiYXNoIGFuZCBpdCBpbmhlcml0cyBhCisgICAgICAjIGJyb2tlbiBscyBhbGlhcyBmcm9tIHRoZSBlbnZpcm9ubWVudC4gIFRoaXMgaGFzIGFjdHVhbGx5CisgICAgICAjIGhhcHBlbmVkLiAgU3VjaCBhIHN5c3RlbSBjb3VsZCBub3QgYmUgY29uc2lkZXJlZCAic2FuZSIuCisgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBscyAtdCBhcHBlYXJzIHRvIGZhaWwuICBNYWtlIHN1cmUgdGhlcmUgaXMgbm90IGEgYnJva2VuCithbGlhcyBpbiB5b3VyIGVudmlyb25tZW50IiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGxzIC10IGFwcGVhcnMgdG8gZmFpbC4gIE1ha2Ugc3VyZSB0aGVyZSBpcyBub3QgYSBicm9rZW4KK2FsaWFzIGluIHlvdXIgZW52aXJvbm1lbnQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgIGZpCisKKyAgIHRlc3QgIiQyIiA9IGNvbmZ0ZXN0LmZpbGUKKyAgICkKK3RoZW4KKyAgICMgT2suCisgICA6CitlbHNlCisgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBuZXdseSBjcmVhdGVkIGZpbGUgaXMgb2xkZXIgdGhhbiBkaXN0cmlidXRlZCBmaWxlcyEKK0NoZWNrIHlvdXIgc3lzdGVtIGNsb2NrIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5ld2x5IGNyZWF0ZWQgZmlsZSBpcyBvbGRlciB0aGFuIGRpc3RyaWJ1dGVkIGZpbGVzIQorQ2hlY2sgeW91ciBzeXN0ZW0gY2xvY2siID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK3Rlc3QgIiRwcm9ncmFtX3ByZWZpeCIgIT0gTk9ORSAmJgorICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSJzLF4sJHByb2dyYW1fcHJlZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgVXNlIGEgZG91YmxlICQgc28gbWFrZSBpZ25vcmVzIGl0LgordGVzdCAiJHByb2dyYW1fc3VmZml4IiAhPSBOT05FICYmCisgIHByb2dyYW1fdHJhbnNmb3JtX25hbWU9InMsXCQsJHByb2dyYW1fc3VmZml4LDskcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSIKKyMgRG91YmxlIGFueSBcIG9yICQuICBlY2hvIG1pZ2h0IGludGVycHJldCBiYWNrc2xhc2hlcy4KKyMgQnkgZGVmYXVsdCB3YXMgYHMseCx4JywgcmVtb3ZlIGl0IGlmIHVzZWxlc3MuCitjYXQgPDxcX0FDRU9GID5jb25mdGVzdC5zZWQKK3MvW1xcJF0vJiYvZztzLztzLHgseCwkLy8KK19BQ0VPRgorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZT1gZWNobyAkcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSB8IHNlZCAtZiBjb25mdGVzdC5zZWRgCitybSBjb25mdGVzdC5zZWQKKworIyBleHBhbmQgJGFjX2F1eF9kaXIgdG8gYW4gYWJzb2x1dGUgcGF0aAorYW1fYXV4X2Rpcj1gY2QgJGFjX2F1eF9kaXIgJiYgcHdkYAorCit0ZXN0IHgiJHtNSVNTSU5HK3NldH0iID0geHNldCB8fCBNSVNTSU5HPSJcJHtTSEVMTH0gJGFtX2F1eF9kaXIvbWlzc2luZyIKKyMgVXNlIGV2YWwgdG8gZXhwYW5kICRTSEVMTAoraWYgZXZhbCAiJE1JU1NJTkcgLS1ydW4gdHJ1ZSI7IHRoZW4KKyAgYW1fbWlzc2luZ19ydW49IiRNSVNTSU5HIC0tcnVuICIKK2Vsc2UKKyAgYW1fbWlzc2luZ19ydW49CisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgbWlzc2luZycgc2NyaXB0IGlzIHRvbyBvbGQgb3IgbWlzc2luZyIgPiYyO30KK2ZpCisKK2lmIG1rZGlyIC1wIC0tdmVyc2lvbiAuID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICEgLWQgLi8tLXZlcnNpb247IHRoZW4KKyAgIyBXZSB1c2VkIHRvIGtlZXBpbmcgdGhlIGAuJyBhcyBmaXJzdCBhcmd1bWVudCwgaW4gb3JkZXIgdG8KKyAgIyBhbGxvdyAkKG1rZGlyX3ApIHRvIGJlIHVzZWQgd2l0aG91dCBhcmd1bWVudC4gIEFzIGluCisgICMgICAkKG1rZGlyX3ApICQoc29tZWRpcikKKyAgIyB3aGVyZSAkKHNvbWVkaXIpIGlzIGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gIEhvd2V2ZXIgdGhpcyBpcyB3cm9uZworICAjIGZvciB0d28gcmVhc29uczoKKyAgIyAgMS4gaWYgdGhlIHBhY2thZ2UgaXMgaW5zdGFsbGVkIGJ5IGEgdXNlciB3aG8gY2Fubm90IHdyaXRlIGAuJworICAjICAgICBtYWtlIGluc3RhbGwgd2lsbCBmYWlsLAorICAjICAyLiB0aGUgYWJvdmUgY29tbWVudCBzaG91bGQgbW9zdCBjZXJ0YWlubHkgcmVhZAorICAjICAgICAkKG1rZGlyX3ApICQoREVTVERJUikkKHNvbWVkaXIpCisgICMgICAgIHNvIGl0IGRvZXMgbm90IHdvcmsgd2hlbiAkKHNvbWVkaXIpIGlzIHVuZGVmaW5lZCBhbmQKKyAgIyAgICAgJChERVNURElSKSBpcyBub3QuCisgICMgIFRvIHN1cHBvcnQgdGhlIGxhdHRlciBjYXNlLCB3ZSBoYXZlIHRvIHdyaXRlCisgICMgICAgIHRlc3QgLXogIiQoc29tZWRpcikiIHx8ICQobWtkaXJfcCkgJChERVNURElSKSQoc29tZWRpciksCisgICMgIHNvIHRoZSBgLicgdHJpY2sgaXMgcG9pbnRsZXNzLgorICBta2Rpcl9wPSdta2RpciAtcCAtLScKK2Vsc2UKKyAgIyBPbiBOZXh0U3RlcCBhbmQgT3BlblN0ZXAsIHRoZSBgbWtkaXInIGNvbW1hbmQgZG9lcyBub3QKKyAgIyByZWNvZ25pemUgYW55IG9wdGlvbi4gIEl0IHdpbGwgaW50ZXJwcmV0IGFsbCBvcHRpb25zIGFzCisgICMgZGlyZWN0b3JpZXMgdG8gY3JlYXRlLCBhbmQgdGhlbiBhYm9ydCBiZWNhdXNlIGAuJyBhbHJlYWR5CisgICMgZXhpc3RzLgorICBmb3IgZCBpbiAuLy1wIC4vLS12ZXJzaW9uOworICBkbworICAgIHRlc3QgLWQgJGQgJiYgcm1kaXIgJGQKKyAgZG9uZQorICAjICQobWtpbnN0YWxsZGlycykgaXMgZGVmaW5lZCBieSBBdXRvbWFrZSBpZiBta2luc3RhbGxkaXJzIGV4aXN0cy4KKyAgaWYgdGVzdCAtZiAiJGFjX2F1eF9kaXIvbWtpbnN0YWxsZGlycyI7IHRoZW4KKyAgICBta2Rpcl9wPSckKG1raW5zdGFsbGRpcnMpJworICBlbHNlCisgICAgbWtkaXJfcD0nJChpbnN0YWxsX3NoKSAtZCcKKyAgZmkKK2ZpCisKK2ZvciBhY19wcm9nIGluIGdhd2sgbWF3ayBuYXdrIGF3aworZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVdLK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIGFjX2N2X3Byb2dfQVdLPSIkQVdLIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorQVdLPSRhY19jdl9wcm9nX0FXSworaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFXSyIgPiY1CitlY2hvICIke0VDSE9fVH0kQVdLIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICB0ZXN0IC1uICIkQVdLIiAmJiBicmVhaworZG9uZQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAke01BS0UtbWFrZX0gc2V0cyBcJChNQUtFKSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gJEVDSE9fQyIgPiY2CitzZXQgZHVtbXkgJHtNQUtFLW1ha2V9OyBhY19tYWtlPWBlY2hvICIkMiIgfCBzZWQgJ3ksOi4vKy0sX19fcF8sJ2AKK2lmIGV2YWwgInRlc3QgXCJcJHthY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0Lm1ha2UgPDxcX0FDRU9GCithbGw6CisJQGVjaG8gJ2FjX21ha2V0ZW1wPSIkKE1BS0UpIicKK19BQ0VPRgorIyBHTlUgbWFrZSBzb21ldGltZXMgcHJpbnRzICJtYWtlWzFdOiBFbnRlcmluZy4uLiIsIHdoaWNoIHdvdWxkIGNvbmZ1c2UgdXMuCitldmFsIGAke01BS0UtbWFrZX0gLWYgY29uZnRlc3QubWFrZSAyPi9kZXYvbnVsbCB8IGdyZXAgdGVtcD1gCitpZiB0ZXN0IC1uICIkYWNfbWFrZXRlbXAiOyB0aGVuCisgIGV2YWwgYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0PXllcworZWxzZQorICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0Lm1ha2UKK2ZpCitpZiBldmFsICJ0ZXN0IFwiYGVjaG8gJyRhY19jdl9wcm9nX21ha2VfJyR7YWNfbWFrZX1fc2V0YFwiID0geWVzIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgU0VUX01BS0U9CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworcm0gLXJmIC50c3QgMj4vZGV2L251bGwKK21rZGlyIC50c3QgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLnRzdDsgdGhlbgorICBhbV9fbGVhZGluZ19kb3Q9LgorZWxzZQorICBhbV9fbGVhZGluZ19kb3Q9XworZmkKK3JtZGlyIC50c3QgMj4vZGV2L251bGwKKworREVQRElSPSIke2FtX19sZWFkaW5nX2RvdH1kZXBzIgorCisgICAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlcGZpbGVzIgorCisKK2FtX21ha2U9JHtNQUtFLW1ha2V9CitjYXQgPiBjb25maW5jIDw8ICdFTkQnCithbV9fZG9pdDoKKwlAZWNobyBkb25lCisuUEhPTlk6IGFtX19kb2l0CitFTkQKKyMgSWYgd2UgZG9uJ3QgZmluZCBhbiBpbmNsdWRlIGRpcmVjdGl2ZSwganVzdCBjb21tZW50IG91dCB0aGUgY29kZS4KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3R5bGUgb2YgaW5jbHVkZSB1c2VkIGJ5ICRhbV9tYWtlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0eWxlIG9mIGluY2x1ZGUgdXNlZCBieSAkYW1fbWFrZS4uLiAkRUNIT19DIiA+JjYKK2FtX19pbmNsdWRlPSIjIgorYW1fX3F1b3RlPQorX2FtX3Jlc3VsdD1ub25lCisjIEZpcnN0IHRyeSBHTlUgbWFrZSBzdHlsZSBpbmNsdWRlLgorZWNobyAiaW5jbHVkZSBjb25maW5jIiA+IGNvbmZtZgorIyBXZSBncmVwIG91dCBgRW50ZXJpbmcgZGlyZWN0b3J5JyBhbmQgYExlYXZpbmcgZGlyZWN0b3J5JworIyBtZXNzYWdlcyB3aGljaCBjYW4gb2NjdXIgaWYgYHcnIGVuZHMgdXAgaW4gTUFLRUZMQUdTLgorIyBJbiBwYXJ0aWN1bGFyIHdlIGRvbid0IGxvb2sgYXQgYF5tYWtlOicgYmVjYXVzZSBHTlUgbWFrZSBtaWdodAorIyBiZSBpbnZva2VkIHVuZGVyIHNvbWUgb3RoZXIgbmFtZSAodXN1YWxseSAiZ21ha2UiKSwgaW4gd2hpY2gKKyMgY2FzZSBpdCBwcmludHMgaXRzIG5ldyBuYW1lIGluc3RlYWQgb2YgYG1ha2UnLgoraWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGwgfCBncmVwIC12ICdpbmcgZGlyZWN0b3J5J2AiID0gImRvbmUiOyB0aGVuCisgICBhbV9faW5jbHVkZT1pbmNsdWRlCisgICBhbV9fcXVvdGU9CisgICBfYW1fcmVzdWx0PUdOVQorZmkKKyMgTm93IHRyeSBCU0QgbWFrZSBzdHlsZSBpbmNsdWRlLgoraWYgdGVzdCAiJGFtX19pbmNsdWRlIiA9ICIjIjsgdGhlbgorICAgZWNobyAnLmluY2x1ZGUgImNvbmZpbmMiJyA+IGNvbmZtZgorICAgaWYgdGVzdCAiYCRhbV9tYWtlIC1zIC1mIGNvbmZtZiAyPiAvZGV2L251bGxgIiA9ICJkb25lIjsgdGhlbgorICAgICAgYW1fX2luY2x1ZGU9LmluY2x1ZGUKKyAgICAgIGFtX19xdW90ZT0iXCIiCisgICAgICBfYW1fcmVzdWx0PUJTRAorICAgZmkKK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJF9hbV9yZXN1bHQiID4mNQorZWNobyAiJHtFQ0hPX1R9JF9hbV9yZXN1bHQiID4mNgorcm0gLWYgY29uZmluYyBjb25mbWYKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgb3IgLS1kaXNhYmxlLWRlcGVuZGVuY3ktdHJhY2tpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIKKworZmk7CitpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm87IHRoZW4KKyAgYW1fZGVwY29tcD0iJGFjX2F1eF9kaXIvZGVwY29tcCIKKyAgQU1ERVBCQUNLU0xBU0g9J1wnCitmaQorCisKK2lmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciICE9IHhubzsgdGhlbgorICBBTURFUF9UUlVFPQorICBBTURFUF9GQUxTRT0nIycKK2Vsc2UKKyAgQU1ERVBfVFJVRT0nIycKKyAgQU1ERVBfRkFMU0U9CitmaQorCisKKworIyB0ZXN0IHRvIHNlZSBpZiBzcmNkaXIgYWxyZWFkeSBjb25maWd1cmVkCitpZiB0ZXN0ICJgY2QgJHNyY2RpciAmJiBwd2RgIiAhPSAiYHB3ZGAiICYmCisgICB0ZXN0IC1mICRzcmNkaXIvY29uZmlnLnN0YXR1czsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBzb3VyY2UgZGlyZWN0b3J5IGFscmVhZHkgY29uZmlndXJlZDsgcnVuIFwibWFrZSBkaXN0Y2xlYW5cIiB0aGVyZSBmaXJzdCIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworIyB0ZXN0IHdoZXRoZXIgd2UgaGF2ZSBjeWdwYXRoCitpZiB0ZXN0IC16ICIkQ1lHUEFUSF9XIjsgdGhlbgorICBpZiAoY3lncGF0aCAtLXZlcnNpb24pID4vZGV2L251bGwgMj4vZGV2L251bGw7IHRoZW4KKyAgICBDWUdQQVRIX1c9J2N5Z3BhdGggLXcnCisgIGVsc2UKKyAgICBDWUdQQVRIX1c9ZWNobworICBmaQorZmkKKworCisjIERlZmluZSB0aGUgaWRlbnRpdHkgb2YgdGhlIHBhY2thZ2UuCisgUEFDS0FHRT0nbHpvJworIFZFUlNJT049JzIuMDMnCisKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBQQUNLQUdFICIkUEFDS0FHRSIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVkVSU0lPTiAiJFZFUlNJT04iCitfQUNFT0YKKworIyBTb21lIHRvb2xzIEF1dG9tYWtlIG5lZWRzLgorCitBQ0xPQ0FMPSR7QUNMT0NBTC0iJHthbV9taXNzaW5nX3J1bn1hY2xvY2FsLSR7YW1fX2FwaV92ZXJzaW9ufSJ9CisKKworQVVUT0NPTkY9JHtBVVRPQ09ORi0iJHthbV9taXNzaW5nX3J1bn1hdXRvY29uZiJ9CisKKworQVVUT01BS0U9JHtBVVRPTUFLRS0iJHthbV9taXNzaW5nX3J1bn1hdXRvbWFrZS0ke2FtX19hcGlfdmVyc2lvbn0ifQorCisKK0FVVE9IRUFERVI9JHtBVVRPSEVBREVSLSIke2FtX21pc3NpbmdfcnVufWF1dG9oZWFkZXIifQorCisKK01BS0VJTkZPPSR7TUFLRUlORk8tIiR7YW1fbWlzc2luZ19ydW59bWFrZWluZm8ifQorCitpbnN0YWxsX3NoPSR7aW5zdGFsbF9zaC0iJGFtX2F1eF9kaXIvaW5zdGFsbC1zaCJ9CisKKyMgSW5zdGFsbGVkIGJpbmFyaWVzIGFyZSB1c3VhbGx5IHN0cmlwcGVkIHVzaW5nIGBzdHJpcCcgd2hlbiB0aGUgdXNlcgorIyBydW4gYG1ha2UgaW5zdGFsbC1zdHJpcCcuICBIb3dldmVyIGBzdHJpcCcgbWlnaHQgbm90IGJlIHRoZSByaWdodAorIyB0b29sIHRvIHVzZSBpbiBjcm9zcy1jb21waWxhdGlvbiBlbnZpcm9ubWVudHMsIHRoZXJlZm9yZSBBdXRvbWFrZQorIyB3aWxsIGhvbm9yIHRoZSBgU1RSSVAnIGVudmlyb25tZW50IHZhcmlhYmxlIHRvIG92ZXJydWxlIHRoaXMgcHJvZ3JhbS4KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IG5vOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19TVFJJUD0iJHthY190b29sX3ByZWZpeH1zdHJpcCIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK1NUUklQPSRhY19jdl9wcm9nX1NUUklQCitpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRTVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kU1RSSVAiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfU1RSSVAiOyB0aGVuCisgIGFjX2N0X1NUUklQPSRTVFJJUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBzdHJpcDsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IiRhY19jdF9TVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAiICYmIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9IjoiCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9TVFJJUCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3RfU1RSSVAiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIFNUUklQPSRhY19jdF9TVFJJUAorZWxzZQorICBTVFJJUD0iJGFjX2N2X3Byb2dfU1RSSVAiCitmaQorCitmaQorSU5TVEFMTF9TVFJJUF9QUk9HUkFNPSJcJHtTSEVMTH0gXCQoaW5zdGFsbF9zaCkgLWMgLXMiCisKKyMgV2UgbmVlZCBhd2sgZm9yIHRoZSAiY2hlY2siIHRhcmdldC4gIFRoZSBzeXN0ZW0gImF3ayIgaXMgYmFkIG9uCisjIHNvbWUgcGxhdGZvcm1zLgorIyBBbHdheXMgZGVmaW5lIEFNVEFSIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LgorCitBTVRBUj0ke0FNVEFSLSIke2FtX21pc3NpbmdfcnVufXRhciJ9CisKK2FtX190YXI9JyR7QU1UQVJ9IGNob2YgLSAiJCR0YXJkaXIiJzsgYW1fX3VudGFyPScke0FNVEFSfSB4ZiAtJworCisKKworCitkZXBjYz0iJENDIiAgIGFtX2NvbXBpbGVyX2xpc3Q9CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkZXBlbmRlbmN5IHN0eWxlIG9mICRkZXBjYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT1ub25lCisgIGlmIHRlc3QgIiRhbV9jb21waWxlcl9saXN0IiA9ICIiOyB0aGVuCisgICAgIGFtX2NvbXBpbGVyX2xpc3Q9YHNlZCAtbiAncy9eIypcKFthLXpBLVowLTldKlwpKSQvXDEvcCcgPCAuL2RlcGNvbXBgCisgIGZpCisgIGZvciBkZXBtb2RlIGluICRhbV9jb21waWxlcl9saXN0OyBkbworICAgICMgU2V0dXAgYSBzb3VyY2Ugd2l0aCBtYW55IGRlcGVuZGVuY2llcywgYmVjYXVzZSBzb21lIGNvbXBpbGVycworICAgICMgbGlrZSB0byB3cmFwIGxhcmdlIGRlcGVuZGVuY3kgbGlzdHMgb24gY29sdW1uIDgwICh3aXRoIFwpLCBhbmQKKyAgICAjIHdlIHNob3VsZCBub3QgY2hvb3NlIGEgZGVwY29tcCBtb2RlIHdoaWNoIGlzIGNvbmZ1c2VkIGJ5IHRoaXMuCisgICAgIworICAgICMgV2UgbmVlZCB0byByZWNyZWF0ZSB0aGVzZSBmaWxlcyBmb3IgZWFjaCB0ZXN0LCBhcyB0aGUgY29tcGlsZXIgbWF5CisgICAgIyBvdmVyd3JpdGUgc29tZSBvZiB0aGVtIHdoZW4gdGVzdGluZyB3aXRoIG9ic2N1cmUgY29tbWFuZCBsaW5lcy4KKyAgICAjIFRoaXMgaGFwcGVucyBhdCBsZWFzdCB3aXRoIHRoZSBBSVggQyBjb21waWxlci4KKyAgICA6ID4gc3ViL2NvbmZ0ZXN0LmMKKyAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNjsgZG8KKyAgICAgIGVjaG8gJyNpbmNsdWRlICJjb25mdHN0JyRpJy5oIicgPj4gc3ViL2NvbmZ0ZXN0LmMKKyAgICAgICMgVXNpbmcgYDogPiBzdWIvY29uZnRzdCRpLmgnIGNyZWF0ZXMgb25seSBzdWIvY29uZnRzdDEuaCB3aXRoCisgICAgICAjIFNvbGFyaXMgOCdzIHsvdXNyLH0vYmluL3NoLgorICAgICAgdG91Y2ggc3ViL2NvbmZ0c3QkaS5oCisgICAgZG9uZQorICAgIGVjaG8gIiR7YW1fX2luY2x1ZGV9ICR7YW1fX3F1b3RlfXN1Yi9jb25mdGVzdC5QbyR7YW1fX3F1b3RlfSIgPiBjb25mbWYKKworICAgIGNhc2UgJGRlcG1vZGUgaW4KKyAgICBub3NpZGVlZmZlY3QpCisgICAgICAjIGFmdGVyIHRoaXMgdGFnLCBtZWNoYW5pc21zIGFyZSBub3QgYnkgc2lkZS1lZmZlY3QsIHNvIHRoZXknbGwKKyAgICAgICMgb25seSBiZSB1c2VkIHdoZW4gZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2RlcGVuZGVuY3lfdHJhY2tpbmciID0geHllczsgdGhlbgorCWNvbnRpbnVlCisgICAgICBlbHNlCisJYnJlYWsKKyAgICAgIGZpCisgICAgICA7OworICAgIG5vbmUpIGJyZWFrIDs7CisgICAgZXNhYworICAgICMgV2UgY2hlY2sgd2l0aCBgLWMnIGFuZCBgLW8nIGZvciB0aGUgc2FrZSBvZiB0aGUgImRhc2htc3Rkb3V0IgorICAgICMgbW9kZS4gIEl0IHR1cm5zIG91dCB0aGF0IHRoZSBTdW5Qcm8gQysrIGNvbXBpbGVyIGRvZXMgbm90IHByb3Blcmx5CisgICAgIyBoYW5kbGUgYC1NIC1vJywgYW5kIHdlIG5lZWQgdG8gZGV0ZWN0IHRoaXMuCisgICAgaWYgZGVwbW9kZT0kZGVwbW9kZSBcCisgICAgICAgc291cmNlPXN1Yi9jb25mdGVzdC5jIG9iamVjdD1zdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gXAorICAgICAgIGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlBvIHRtcGRlcGZpbGU9c3ViL2NvbmZ0ZXN0LlRQbyBcCisgICAgICAgJFNIRUxMIC4vZGVwY29tcCAkZGVwY2MgLWMgLW8gc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5jIFwKKyAgICAgICAgID4vZGV2L251bGwgMj5jb25mdGVzdC5lcnIgJiYKKyAgICAgICBncmVwIHN1Yi9jb25mdHN0Ni5oIHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRlc3QuJHtPQkpFWFQtb30gc3ViL2NvbmZ0ZXN0LlBvID4gL2Rldi9udWxsIDI+JjEgJiYKKyAgICAgICAke01BS0UtbWFrZX0gLXMgLWYgY29uZm1mID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgICMgaWNjIGRvZXNuJ3QgY2hva2Ugb24gdW5rbm93biBvcHRpb25zLCBpdCB3aWxsIGp1c3QgaXNzdWUgd2FybmluZ3MKKyAgICAgICMgb3IgcmVtYXJrcyAoZXZlbiB3aXRoIC1XZXJyb3IpLiAgU28gd2UgZ3JlcCBzdGRlcnIgZm9yIGFueSBtZXNzYWdlCisgICAgICAjIHRoYXQgc2F5cyBhbiBvcHRpb24gd2FzIGlnbm9yZWQgb3Igbm90IHN1cHBvcnRlZC4KKyAgICAgICMgV2hlbiBnaXZlbiAtTVAsIGljYyA3LjAgYW5kIDcuMSBjb21wbGFpbiB0aHVzbHk6CisgICAgICAjICAgaWNjOiBDb21tYW5kIGxpbmUgd2FybmluZzogaWdub3Jpbmcgb3B0aW9uICctTSc7IG5vIGFyZ3VtZW50IHJlcXVpcmVkCisgICAgICAjIFRoZSBkaWFnbm9zaXMgY2hhbmdlZCBpbiBpY2MgOC4wOgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHJlbWFyazogb3B0aW9uICctTVAnIG5vdCBzdXBwb3J0ZWQKKyAgICAgIGlmIChncmVwICdpZ25vcmluZyBvcHRpb24nIGNvbmZ0ZXN0LmVyciB8fAorICAgICAgICAgIGdyZXAgJ25vdCBzdXBwb3J0ZWQnIGNvbmZ0ZXN0LmVycikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgICAgICAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9JGRlcG1vZGUKKyAgICAgICAgYnJlYWsKKyAgICAgIGZpCisgICAgZmkKKyAgZG9uZQorCisgIGNkIC4uCisgIHJtIC1yZiBjb25mdGVzdC5kaXIKK2Vsc2UKKyAgYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DQ19kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNgorQ0NERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NDX2RlcGVuZGVuY2llc19jb21waWxlcl90eXBlCisKKworCitpZgorICB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiAhPSB4bm8gXAorICAmJiB0ZXN0ICIkYW1fY3ZfQ0NfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID0gZ2NjMzsgdGhlbgorICBhbV9fZmFzdGRlcENDX1RSVUU9CisgIGFtX19mYXN0ZGVwQ0NfRkFMU0U9JyMnCitlbHNlCisgIGFtX19mYXN0ZGVwQ0NfVFJVRT0nIycKKyAgYW1fX2Zhc3RkZXBDQ19GQUxTRT0KK2ZpCisKKworCisgICAgICAgICAgYWNfY29uZmlnX2hlYWRlcnM9IiRhY19jb25maWdfaGVhZGVycyBjb25maWcuaDpjb25maWcuaGluIgorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zdGF0aWMgb3IgLS1kaXNhYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX3N0YXRpYyIKKyAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9zdGF0aWM9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9zdGF0aWM9bm8gOzsKKyAgICAqKQorICAgICBlbmFibGVfc3RhdGljPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3N0YXRpYz15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWMKK2Vsc2UKKyAgZW5hYmxlX3N0YXRpYz15ZXMKK2ZpOworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2hhcmVkIG9yIC0tZGlzYWJsZS1zaGFyZWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2hhcmVkK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9zaGFyZWQiCisgIHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc2hhcmVkPW5vCitmaTsKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIG9yIC0tZGlzYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9mYXN0X2luc3RhbGwiCisgIHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OworICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcworZmk7CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgorIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCisgICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIGZpCisgICAgZG9uZQorICBkb25lCitkb25lCitsdF9hY19tYXg9MAorbHRfYWNfY291bnQ9MAorIyBBZGQgL3Vzci94cGc0L2Jpbi9zZWQgYXMgaXQgaXMgdHlwaWNhbGx5IGZvdW5kIG9uIFNvbGFyaXMKKyMgYWxvbmcgd2l0aCAvYmluL3NlZCB0aGF0IHRydW5jYXRlcyBvdXRwdXQuCitmb3IgbHRfYWNfc2VkIGluICRsdF9hY19zZWRfbGlzdCAvdXNyL3hwZzQvYmluL3NlZDsgZG8KKyAgdGVzdCAhIC1mICRsdF9hY19zZWQgJiYgY29udGludWUKKyAgY2F0IC9kZXYvbnVsbCA+IGNvbmZ0ZXN0LmluCisgIGx0X2FjX2NvdW50PTAKKyAgZWNobyAkRUNIT19OICIwMTIzNDU2Nzg5JEVDSE9fQyIgPmNvbmZ0ZXN0LmluCisgICMgQ2hlY2sgZm9yIEdOVSBzZWQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgaWYgIiRsdF9hY19zZWQiIC0tdmVyc2lvbiAyPiYxIDwgL2Rldi9udWxsIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBicmVhaworICBmaQorICB3aGlsZSB0cnVlOyBkbworICAgIGNhdCBjb25mdGVzdC5pbiBjb25mdGVzdC5pbiA+Y29uZnRlc3QudG1wCisgICAgbXYgY29uZnRlc3QudG1wIGNvbmZ0ZXN0LmluCisgICAgY3AgY29uZnRlc3QuaW4gY29uZnRlc3QubmwKKyAgICBlY2hvID4+Y29uZnRlc3QubmwKKyAgICAkbHRfYWNfc2VkIC1lICdzL2EkLy8nIDwgY29uZnRlc3QubmwgPmNvbmZ0ZXN0Lm91dCB8fCBicmVhaworICAgIGNtcCAtcyBjb25mdGVzdC5vdXQgY29uZnRlc3QubmwgfHwgYnJlYWsKKyAgICAjIDEwMDAwIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgICBsdF9hY19jb3VudD1gZXhwciAkbHRfYWNfY291bnQgKyAxYAorICAgIGlmIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAkbHRfYWNfbWF4OyB0aGVuCisgICAgICBsdF9hY19tYXg9JGx0X2FjX2NvdW50CisgICAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCisgICAgZmkKKyAgZG9uZQorZG9uZQorCitmaQorCitTRUQ9JGx0X2N2X3BhdGhfU0VECitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRTRUQiID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8IChncmVwIC1FICcoYXxiKScpID4vZGV2L251bGwgMj4mMQorICAgIHRoZW4gYWNfY3ZfcHJvZ19lZ3JlcD0nZ3JlcCAtRScKKyAgICBlbHNlIGFjX2N2X3Byb2dfZWdyZXA9J2VncmVwJworICAgIGZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZWdyZXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZWdyZXAiID4mNgorIEVHUkVQPSRhY19jdl9wcm9nX2VncmVwCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgorICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpOworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjYKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCit0ZXN0IC16ICIkTEQiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X2xkX3JlbG9hZF9mbGFnK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X2N2X2xkX3JlbG9hZF9mbGFnPSctcicKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjYKK3JlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZworY2FzZSAkcmVsb2FkX2ZsYWcgaW4KKyIiIHwgIiAiKikgOzsKKyopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OworZXNhYworcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBCU0QtY29tcGF0aWJsZSBubS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9OTStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCisgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorICBsdF9jdl9wYXRoX05NPSIkTk0iCitlbHNlCisgIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKKyAgZmkKKyAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCisgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbworICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCisgICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCisJIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCisJIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKKwkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCisJIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCisJY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisJKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQorCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKKwkgIGJyZWFrCisJICA7OworCSopCisJICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkgICovZGV2L251bGwqKQorCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgorCSAgICBicmVhaworCSAgICA7OworCSAgKikKKwkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKKwkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKKwkgICAgOzsKKwkgIGVzYWMKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICBkb25lCisgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIGRvbmUKKyAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3BhdGhfTk0iID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3BhdGhfTk0iID4mNgorTk09IiRsdF9jdl9wYXRoX05NIgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitMTl9TPSRhc19sbl9zCitpZiB0ZXN0ICIkTE5fUyIgPSAibG4gLXMiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQorZWNobyAiJHtFQ0hPX1R9bm8sIHVzaW5nICRMTl9TIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcmVjb2duaXNlIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDQqIHwgYWl4NSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2Jlb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitic2RpWzQ1XSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVszLTldODYgKGNvbXBhY3QgKT9kZW1hbmQgcGFnZWQgc2hhcmVkIGxpYnJhcnknCisgICAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgICAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvLipgCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIGZpCisgIDs7CisKK2dudSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2hwdXgxMC4yMCogfCBocHV4MTEqKQorICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGLVswLTldWzAtOV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIFBBLVJJU0MgWzAtOV0uWzAtOV0nCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvcGEyMF82NC9saWJjLnNsCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxQQS1SSVNDWzAtOV0uWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXgzKikKKyAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworbnRvLXFueCopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc29sYXJpcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNWzAtOV1bMC05XSogVmVyc2lvbiBbMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworZXNhYworCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2CitmaWxlX21hZ2ljX2NtZD0kbHRfY3ZfZmlsZV9tYWdpY19jbWQKK2RlcGxpYnNfY2hlY2tfbWV0aG9kPSRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZAordGVzdCAteiAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiAmJiBkZXBsaWJzX2NoZWNrX21ldGhvZD11bmtub3duCisKKworCisKKyMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCitMVENDPSR7TFRDQy0iJENDIn0KKworIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgorTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9CisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitjb21waWxlcj0kQ0MKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayBvciAtLWRpc2FibGUtbGlidG9vbC1sb2NrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYnRvb2xfbG9jaytzZXR9IiA9IHNldDsgdGhlbgorICBlbmFibGV2YWw9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorCitmaTsKK3Rlc3QgIngkZW5hYmxlX2xpYnRvb2xfbG9jayIgIT0geG5vICYmIGVuYWJsZV9saWJ0b29sX2xvY2s9eWVzCisKKyMgU29tZSBmbGFncyBuZWVkIHRvIGJlIHByb3BhZ2F0ZWQgdG8gdGhlIGNvbXBpbGVyIG9yIGxpbmtlciBmb3IgZ29vZAorIyBsaWJ0b29sIHN1cHBvcnQuCitjYXNlICRob3N0IGluCitpYTY0LSotaHB1eCopCisgICMgRmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZy4KKyAgZWNobyAnaW50IGk7JyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICpFTEYtMzIqKQorICAgICAgSFBVWF9JQTY0X01PREU9IjMyIgorICAgICAgOzsKKyAgICAqRUxGLTY0KikKKyAgICAgIEhQVVhfSUE2NF9NT0RFPSI2NCIKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJyNsaW5lIDQ4MzEgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIGlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgKjMyLWJpdCopCisgICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorICAgICAgOzsKKyAgICAqTjMyKikKKyAgICAgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKyAgICAgIDs7CisgICAgKjY0LWJpdCopCisgICAgICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisgICAgICA7OworICAgIGVzYWMKKyAgIGVsc2UKKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgKjMyLWJpdCopCisgICAgICBMRD0iJHtMRC1sZH0gLTMyIgorICAgICAgOzsKKyAgICAqTjMyKikKKyAgICAgIExEPSIke0xELWxkfSAtbjMyIgorICAgICAgOzsKKyAgICAqNjQtYml0KikKKyAgICAgIExEPSIke0xELWxkfSAtNjQiCisgICAgICA7OworICAgIGVzYWMKKyAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSpsaW51eCp8cHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCp8czM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjMyLWJpdCopCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIHg4Nl82NC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKKyAgICAgICAgICA7OworICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgorICAgICAgICAgIDs7CisgICAgICAgIHMzOTB4LSpsaW51eCopCisgICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgorICAgICAgICAgIDs7CisgICAgICAgIHNwYXJjNjQtKmxpbnV4KikKKyAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAgIHg4Nl82NC0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorICAgICAgICAgIDs7CisgICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKyAgICAgICAgICA7OworICAgICAgICBzMzkwKi0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorICAgICAgICAgIDs7CisgICAgICAgIHNwYXJjKi0qbGludXgqKQorICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X2NjX25lZWRzX2JlbGYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNgorICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgorICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgorICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgorICBmaQorICA7Oworc3BhcmMqLSpzb2xhcmlzKikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikgICAgTEQ9IiR7TEQtbGR9IC02NCIgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKKworZXNhYworCituZWVkX2xvY2tzPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKKworCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmbG9hdC5oPgorCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgU3VuT1MgNC54IHN0cmluZy5oIGRvZXMgbm90IGRlY2xhcmUgbWVtKiwgY29udHJhcnkgdG8gQU5TSS4KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIDoKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb25mdGVzdCoKKworZmkKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyAvYmluL2NjIGluIElyaXgtNC4wLjUgZ2V0cyBub24tQU5TSSBjdHlwZSBtYWNyb3MgdW5sZXNzIHVzaW5nIC1hbnNpLgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICA6CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgKCgnICcgJiAweDBGRikgPT0gMHgwMjApCisjIGRlZmluZSBJU0xPV0VSKGMpICgnYScgPD0gKGMpICYmIChjKSA8PSAneicpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gJ0EnICsgKChjKSAtICdhJykgOiAoYykpCisjZWxzZQorIyBkZWZpbmUgSVNMT1dFUihjKSBcCisJCSAgICgoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ2knKSBcCisJCSAgICAgfHwgKCdqJyA8PSAoYykgJiYgKGMpIDw9ICdyJykgXAorCQkgICAgIHx8ICgncycgPD0gKGMpICYmIChjKSA8PSAneicpKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICgoYykgfCAweDQwKSA6IChjKSkKKyNlbmRpZgorCisjZGVmaW5lIFhPUihlLCBmKSAoKChlKSAmJiAhKGYpKSB8fCAoIShlKSAmJiAoZikpKQoraW50CittYWluICgpCit7CisgIGludCBpOworICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspCisgICAgaWYgKFhPUiAoaXNsb3dlciAoaSksIElTTE9XRVIgKGkpKQorCXx8IHRvdXBwZXIgKGkpICE9IFRPVVBQRVIgKGkpKQorICAgICAgZXhpdCgyKTsKKyAgZXhpdCAoMCk7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCithY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9zdGRjIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCisjZGVmaW5lIFNURENfSEVBREVSUyAxCitfQUNFT0YKKworZmkKKworIyBPbiBJUklYIDUuMywgc3lzL3R5cGVzIGFuZCBpbnR0eXBlcy5oIGFyZSBjb25mbGljdGluZy4KKworCisKKworCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3R5cGVzLmggc3lzL3N0YXQuaCBzdGRsaWIuaCBzdHJpbmcuaCBtZW1vcnkuaCBzdHJpbmdzLmggXAorCQkgIGludHR5cGVzLmggc3RkaW50LmggdW5pc3RkLmgKK2RvCithc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQorZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgoraWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKK2ZvciBhY19oZWFkZXIgaW4gZGxmY24uaAorZG8KK2FzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CitlbHNlCisgICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2CitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgorCisjIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPCRhY19oZWFkZXI+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIGFjX2hlYWRlcl9wcmVwcm9jPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisgIGFjX2hlYWRlcl9wcmVwcm9jPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KKyAgeWVzOm5vOiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisgICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCisgICAgOzsKKyAgbm86eWVzOiogKQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9CisgICAgKAorICAgICAgY2F0IDw8XF9BU0JPWAorIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIFJlcG9ydCB0aGlzIHRvIG1hcmt1c0BvYmVyaHVtZXIuY29tICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworX0FTQk9YCisgICAgKSB8CisgICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKKyAgICA7OworZXNhYworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2CitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1CitlY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2CisKK2ZpCitpZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCithY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluICRDQ0MgZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0NYWCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgorICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfQ1hYPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK0NYWD0kYWNfY3ZfcHJvZ19DWFgKK2lmIHRlc3QgLW4gIiRDWFgiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JENYWCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgICB0ZXN0IC1uICIkQ1hYIiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJENYWCI7IHRoZW4KKyAgYWNfY3RfQ1hYPSRDWFgKKyAgZm9yIGFjX3Byb2cgaW4gJENDQyBnKysgYysrIGdwcCBhQ0MgQ0MgY3h4IGNjKysgY2wgRkNDIEtDQyBSQ0MgeGxDX3IgeGxDCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9DWFg9IiRhY19jdF9DWFgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCithY19jdF9DWFg9JGFjX2N2X3Byb2dfYWNfY3RfQ1hYCitpZiB0ZXN0IC1uICIkYWNfY3RfQ1hYIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9DWFgiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIHRlc3QgLW4gIiRhY19jdF9DWFgiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkYWNfY3RfQ1hYIiB8fCBhY19jdF9DWFg9ImcrKyIKKworICBDWFg9JGFjX2N0X0NYWAorZmkKKworCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6JExJTkVOTzoiIFwKKyAgICAgImNoZWNraW5nIGZvciBDKysgY29tcGlsZXIgdmVyc2lvbiIgPiY1CithY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCit7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9Cit7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDKysgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2N4eF9jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2NvbXBpbGVyX2dudT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY29tcGlsZXJfZ251PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251CisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2CitHWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK2FjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9CithY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUworQ1hYRkxBR1M9Ii1nIgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19jeHhfZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfcHJvZ19jeHhfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jeHhfZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jeHhfZyIgPiY2CitpZiB0ZXN0ICIkYWNfdGVzdF9DWFhGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgQ1hYRkxBR1M9JGFjX3NhdmVfQ1hYRkxBR1MKK2VsaWYgdGVzdCAkYWNfY3ZfcHJvZ19jeHhfZyA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgIENYWEZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBDWFhGTEFHUz0iLWciCisgIGZpCitlbHNlCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgQ1hYRkxBR1M9Ii1PMiIKKyAgZWxzZQorICAgIENYWEZMQUdTPQorICBmaQorZmkKK2ZvciBhY19kZWNsYXJhdGlvbiBpbiBcCisgICAnJyBcCisgICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KSB0aHJvdyAoKTsgdXNpbmcgc3RkOjpleGl0OycgXAorICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KSB0aHJvdyAoKTsnIFwKKyAgICdleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsnIFwKKyAgICd2b2lkIGV4aXQgKGludCk7JworZG8KKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfZGVjbGFyYXRpb24KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworZXhpdCAoNDIpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2N4eF93ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2RlY2xhcmF0aW9uCitpbnQKK21haW4gKCkKK3sKK2V4aXQgKDQyKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorcm0gLWYgY29uZnRlc3QqCitpZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCisgIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCisgIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCisgIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCitmaQorCithY19leHQ9Y2MKK2FjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251CisKK2RlcGNjPSIkQ1hYIiAgYW1fY29tcGlsZXJfbGlzdD0KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGRlcGVuZGVuY3kgc3R5bGUgb2YgJGRlcGNjIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZGVwZW5kZW5jeSBzdHlsZSBvZiAkZGVwY2MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkQU1ERVBfVFJVRSIgJiYgdGVzdCAtZiAiJGFtX2RlcGNvbXAiOyB0aGVuCisgICMgV2UgbWFrZSBhIHN1YmRpciBhbmQgZG8gdGhlIHRlc3RzIHRoZXJlLiAgT3RoZXJ3aXNlIHdlIGNhbiBlbmQgdXAKKyAgIyBtYWtpbmcgYm9ndXMgZmlsZXMgdGhhdCB3ZSBkb24ndCBrbm93IGFib3V0IGFuZCBuZXZlciByZW1vdmUuICBGb3IKKyAgIyBpbnN0YW5jZSBpdCB3YXMgcmVwb3J0ZWQgdGhhdCBvbiBIUC1VWCB0aGUgZ2NjIHRlc3Qgd2lsbCBlbmQgdXAKKyAgIyBtYWtpbmcgYSBkdW1teSBmaWxlIG5hbWVkIGBEJyAtLSBiZWNhdXNlIGAtTUQnIG1lYW5zIGBwdXQgdGhlIG91dHB1dAorICAjIGluIEQnLgorICBta2RpciBjb25mdGVzdC5kaXIKKyAgIyBDb3B5IGRlcGNvbXAgdG8gc3ViZGlyIGJlY2F1c2Ugb3RoZXJ3aXNlIHdlIHdvbid0IGZpbmQgaXQgaWYgd2UncmUKKyAgIyB1c2luZyBhIHJlbGF0aXZlIGRpcmVjdG9yeS4KKyAgY3AgIiRhbV9kZXBjb21wIiBjb25mdGVzdC5kaXIKKyAgY2QgY29uZnRlc3QuZGlyCisgICMgV2Ugd2lsbCBidWlsZCBvYmplY3RzIGFuZCBkZXBlbmRlbmNpZXMgaW4gYSBzdWJkaXJlY3RvcnkgYmVjYXVzZQorICAjIGl0IGhlbHBzIHRvIGRldGVjdCBpbmFwcGxpY2FibGUgZGVwZW5kZW5jeSBtb2Rlcy4gIEZvciBpbnN0YW5jZQorICAjIGJvdGggVHJ1NjQncyBjYyBhbmQgSUNDIHN1cHBvcnQgLU1EIHRvIG91dHB1dCBkZXBlbmRlbmNpZXMgYXMgYQorICAjIHNpZGUgZWZmZWN0IG9mIGNvbXBpbGF0aW9uLCBidXQgSUNDIHdpbGwgcHV0IHRoZSBkZXBlbmRlbmNpZXMgaW4KKyAgIyB0aGUgY3VycmVudCBkaXJlY3Rvcnkgd2hpbGUgVHJ1NjQgd2lsbCBwdXQgdGhlbSBpbiB0aGUgb2JqZWN0CisgICMgZGlyZWN0b3J5LgorICBta2RpciBzdWIKKworICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorICBpZiB0ZXN0ICIkYW1fY29tcGlsZXJfbGlzdCIgPSAiIjsgdGhlbgorICAgICBhbV9jb21waWxlcl9saXN0PWBzZWQgLW4gJ3MvXiMqXChbYS16QS1aMC05XSpcKSkkL1wxL3AnIDwgLi9kZXBjb21wYAorICBmaQorICBmb3IgZGVwbW9kZSBpbiAkYW1fY29tcGlsZXJfbGlzdDsgZG8KKyAgICAjIFNldHVwIGEgc291cmNlIHdpdGggbWFueSBkZXBlbmRlbmNpZXMsIGJlY2F1c2Ugc29tZSBjb21waWxlcnMKKyAgICAjIGxpa2UgdG8gd3JhcCBsYXJnZSBkZXBlbmRlbmN5IGxpc3RzIG9uIGNvbHVtbiA4MCAod2l0aCBcKSwgYW5kCisgICAgIyB3ZSBzaG91bGQgbm90IGNob29zZSBhIGRlcGNvbXAgbW9kZSB3aGljaCBpcyBjb25mdXNlZCBieSB0aGlzLgorICAgICMKKyAgICAjIFdlIG5lZWQgdG8gcmVjcmVhdGUgdGhlc2UgZmlsZXMgZm9yIGVhY2ggdGVzdCwgYXMgdGhlIGNvbXBpbGVyIG1heQorICAgICMgb3ZlcndyaXRlIHNvbWUgb2YgdGhlbSB3aGVuIHRlc3Rpbmcgd2l0aCBvYnNjdXJlIGNvbW1hbmQgbGluZXMuCisgICAgIyBUaGlzIGhhcHBlbnMgYXQgbGVhc3Qgd2l0aCB0aGUgQUlYIEMgY29tcGlsZXIuCisgICAgOiA+IHN1Yi9jb25mdGVzdC5jCisgICAgZm9yIGkgaW4gMSAyIDMgNCA1IDY7IGRvCisgICAgICBlY2hvICcjaW5jbHVkZSAiY29uZnRzdCckaScuaCInID4+IHN1Yi9jb25mdGVzdC5jCisgICAgICAjIFVzaW5nIGA6ID4gc3ViL2NvbmZ0c3QkaS5oJyBjcmVhdGVzIG9ubHkgc3ViL2NvbmZ0c3QxLmggd2l0aAorICAgICAgIyBTb2xhcmlzIDgncyB7L3Vzcix9L2Jpbi9zaC4KKyAgICAgIHRvdWNoIHN1Yi9jb25mdHN0JGkuaAorICAgIGRvbmUKKyAgICBlY2hvICIke2FtX19pbmNsdWRlfSAke2FtX19xdW90ZX1zdWIvY29uZnRlc3QuUG8ke2FtX19xdW90ZX0iID4gY29uZm1mCisKKyAgICBjYXNlICRkZXBtb2RlIGluCisgICAgbm9zaWRlZWZmZWN0KQorICAgICAgIyBhZnRlciB0aGlzIHRhZywgbWVjaGFuaXNtcyBhcmUgbm90IGJ5IHNpZGUtZWZmZWN0LCBzbyB0aGV5J2xsCisgICAgICAjIG9ubHkgYmUgdXNlZCB3aGVuIGV4cGxpY2l0bHkgcmVxdWVzdGVkCisgICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9kZXBlbmRlbmN5X3RyYWNraW5nIiA9IHh5ZXM7IHRoZW4KKwljb250aW51ZQorICAgICAgZWxzZQorCWJyZWFrCisgICAgICBmaQorICAgICAgOzsKKyAgICBub25lKSBicmVhayA7OworICAgIGVzYWMKKyAgICAjIFdlIGNoZWNrIHdpdGggYC1jJyBhbmQgYC1vJyBmb3IgdGhlIHNha2Ugb2YgdGhlICJkYXNobXN0ZG91dCIKKyAgICAjIG1vZGUuICBJdCB0dXJucyBvdXQgdGhhdCB0aGUgU3VuUHJvIEMrKyBjb21waWxlciBkb2VzIG5vdCBwcm9wZXJseQorICAgICMgaGFuZGxlIGAtTSAtbycsIGFuZCB3ZSBuZWVkIHRvIGRldGVjdCB0aGlzLgorICAgIGlmIGRlcG1vZGU9JGRlcG1vZGUgXAorICAgICAgIHNvdXJjZT1zdWIvY29uZnRlc3QuYyBvYmplY3Q9c3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IFwKKyAgICAgICBkZXBmaWxlPXN1Yi9jb25mdGVzdC5QbyB0bXBkZXBmaWxlPXN1Yi9jb25mdGVzdC5UUG8gXAorICAgICAgICRTSEVMTCAuL2RlcGNvbXAgJGRlcGNjIC1jIC1vIHN1Yi9jb25mdGVzdC4ke09CSkVYVC1vfSBzdWIvY29uZnRlc3QuYyBcCisgICAgICAgICA+L2Rldi9udWxsIDI+Y29uZnRlc3QuZXJyICYmCisgICAgICAgZ3JlcCBzdWIvY29uZnRzdDYuaCBzdWIvY29uZnRlc3QuUG8gPiAvZGV2L251bGwgMj4mMSAmJgorICAgICAgIGdyZXAgc3ViL2NvbmZ0ZXN0LiR7T0JKRVhULW99IHN1Yi9jb25mdGVzdC5QbyA+IC9kZXYvbnVsbCAyPiYxICYmCisgICAgICAgJHtNQUtFLW1ha2V9IC1zIC1mIGNvbmZtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICAjIGljYyBkb2Vzbid0IGNob2tlIG9uIHVua25vd24gb3B0aW9ucywgaXQgd2lsbCBqdXN0IGlzc3VlIHdhcm5pbmdzCisgICAgICAjIG9yIHJlbWFya3MgKGV2ZW4gd2l0aCAtV2Vycm9yKS4gIFNvIHdlIGdyZXAgc3RkZXJyIGZvciBhbnkgbWVzc2FnZQorICAgICAgIyB0aGF0IHNheXMgYW4gb3B0aW9uIHdhcyBpZ25vcmVkIG9yIG5vdCBzdXBwb3J0ZWQuCisgICAgICAjIFdoZW4gZ2l2ZW4gLU1QLCBpY2MgNy4wIGFuZCA3LjEgY29tcGxhaW4gdGh1c2x5OgorICAgICAgIyAgIGljYzogQ29tbWFuZCBsaW5lIHdhcm5pbmc6IGlnbm9yaW5nIG9wdGlvbiAnLU0nOyBubyBhcmd1bWVudCByZXF1aXJlZAorICAgICAgIyBUaGUgZGlhZ25vc2lzIGNoYW5nZWQgaW4gaWNjIDguMDoKKyAgICAgICMgICBpY2M6IENvbW1hbmQgbGluZSByZW1hcms6IG9wdGlvbiAnLU1QJyBub3Qgc3VwcG9ydGVkCisgICAgICBpZiAoZ3JlcCAnaWdub3Jpbmcgb3B0aW9uJyBjb25mdGVzdC5lcnIgfHwKKyAgICAgICAgICBncmVwICdub3Qgc3VwcG9ydGVkJyBjb25mdGVzdC5lcnIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6OyBlbHNlCisgICAgICAgIGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZT0kZGVwbW9kZQorICAgICAgICBicmVhaworICAgICAgZmkKKyAgICBmaQorICBkb25lCisKKyAgY2QgLi4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRpcgorZWxzZQorICBhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGU9bm9uZQorZmkKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhbV9jdl9DWFhfZGVwZW5kZW5jaWVzX2NvbXBpbGVyX3R5cGUiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPiY2CitDWFhERVBNT0RFPWRlcG1vZGU9JGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZQorCisKKworaWYKKyAgdGVzdCAieCRlbmFibGVfZGVwZW5kZW5jeV90cmFja2luZyIgIT0geG5vIFwKKyAgJiYgdGVzdCAiJGFtX2N2X0NYWF9kZXBlbmRlbmNpZXNfY29tcGlsZXJfdHlwZSIgPSBnY2MzOyB0aGVuCisgIGFtX19mYXN0ZGVwQ1hYX1RSVUU9CisgIGFtX19mYXN0ZGVwQ1hYX0ZBTFNFPScjJworZWxzZQorICBhbV9fZmFzdGRlcENYWF9UUlVFPScjJworICBhbV9fZmFzdGRlcENYWF9GQUxTRT0KK2ZpCisKKworCisKK2lmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCisgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCisgIGFjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDKysgcHJlcHJvY2Vzc29yIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3Nvci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLXogIiRDWFhDUFAiOyB0aGVuCisgIGlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFhDUFArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgICAgICMgRG91YmxlIHF1b3RlcyBiZWNhdXNlIENYWENQUCBuZWVkcyB0byBiZSBleHBhbmRlZAorICAgIGZvciBDWFhDUFAgaW4gIiRDWFggLUUiICIvbGliL2NwcCIKKyAgICBkbworICAgICAgYWNfcHJlcHJvY19vaz1mYWxzZQorZm9yIGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKK2RvCisgICMgVXNlIGEgaGVhZGVyIGZpbGUgdGhhdCBjb21lcyB3aXRoIGdjYywgc28gY29uZmlndXJpbmcgZ2xpYmMKKyAgIyB3aXRoIGEgZnJlc2ggY3Jvc3MtY29tcGlsZXIgd29ya3MuCisgICMgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KKyAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKKyAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKwkJICAgICBTeW50YXggZXJyb3IKK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCisgICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKKyAgZWxzZQorICAgIGFjX2NwcF9lcnI9CisgIGZpCitlbHNlCisgIGFjX2NwcF9lcnI9eWVzCitmaQoraWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCisgIDoKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIEJyb2tlbjogZmFpbHMgb24gdmFsaWQgaW5wdXQuCitjb250aW51ZQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbi1leGlzdGVudCBoZWFkZXJzCisgICMgY2FuIGJlIGRldGVjdGVkIGFuZCBob3cuCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICAjIEJyb2tlbjogc3VjY2VzcyBvbiBpbnZhbGlkIGlucHV0LgorY29udGludWUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAjIFBhc3NlcyBib3RoIHRlc3RzLgorYWNfcHJlcHJvY19vaz06CiticmVhaworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CisKK2RvbmUKKyMgQmVjYXVzZSBvZiBgYnJlYWsnLCBfQUNfUFJFUFJPQ19JRkVMU0UncyBjbGVhbmluZyBjb2RlIHdhcyBza2lwcGVkLgorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK2lmICRhY19wcmVwcm9jX29rOyB0aGVuCisgIGJyZWFrCitmaQorCisgICAgZG9uZQorICAgIGFjX2N2X3Byb2dfQ1hYQ1BQPSRDWFhDUFAKKworZmkKKyAgQ1hYQ1BQPSRhY19jdl9wcm9nX0NYWENQUAorZWxzZQorICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWENQUCIgPiY1CitlY2hvICIke0VDSE9fVH0kQ1hYQ1BQIiA+JjYKK2FjX3ByZXByb2Nfb2s9ZmFsc2UKK2ZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCitkbworICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCisgICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgorICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCisgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCisgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisJCSAgICAgU3ludGF4IGVycm9yCitfQUNFT0YKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgorICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCisgIGVsc2UKKyAgICBhY19jcHBfZXJyPQorICBmaQorZWxzZQorICBhY19jcHBfZXJyPXllcworZmkKK2lmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgorICA6CitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgorY29udGludWUKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCisgICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgorX0FDRU9GCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1CisgIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKKyAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KK2NvbnRpbnVlCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KK2FjX3ByZXByb2Nfb2s9OgorYnJlYWsKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorCitkb25lCisjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0CitpZiAkYWNfcHJlcHJvY19vazsgdGhlbgorICA6CitlbHNlCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMrKyBwcmVwcm9jZXNzb3IgXCIkQ1hYQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjaworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKK2FjX2V4dD1jYworYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKKworZmkKKworCithY19leHQ9ZgorYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQoraWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICBmb3IgYWNfcHJvZyBpbiBnNzcgZjc3IHhsZiBmcnQgcGdmNzcgZm9ydDc3IGZsMzIgYWY3NyBmOTAgeGxmOTAgcGdmOTAgZXBjZjkwIGY5NSBmb3J0IHhsZjk1IGlmYyBlZmMgcGdmOTUgbGY5NSBnZm9ydHJhbgorICBkbworICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0Y3NytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgorICBhY19jdl9wcm9nX0Y3Nz0iJEY3NyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfRjc3PSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK0Y3Nz0kYWNfY3ZfcHJvZ19GNzcKK2lmIHRlc3QgLW4gIiRGNzciOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRGNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JEY3NyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgICB0ZXN0IC1uICIkRjc3IiAmJiBicmVhaworICBkb25lCitmaQoraWYgdGVzdCAteiAiJEY3NyI7IHRoZW4KKyAgYWNfY3RfRjc3PSRGNzcKKyAgZm9yIGFjX3Byb2cgaW4gZzc3IGY3NyB4bGYgZnJ0IHBnZjc3IGZvcnQ3NyBmbDMyIGFmNzcgZjkwIHhsZjkwIHBnZjkwIGVwY2Y5MCBmOTUgZm9ydCB4bGY5NSBpZmMgZWZjIHBnZjk1IGxmOTUgZ2ZvcnRyYW4KK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0Y3NytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRjc3IjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0Y3Nz0iJGFjX2N0X0Y3NyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfcHJvZyIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK2FjX2N0X0Y3Nz0kYWNfY3ZfcHJvZ19hY19jdF9GNzcKK2lmIHRlc3QgLW4gIiRhY19jdF9GNzciOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9GNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0Y3NyIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgdGVzdCAtbiAiJGFjX2N0X0Y3NyIgJiYgYnJlYWsKK2RvbmUKKworICBGNzc9JGFjX2N0X0Y3NworZmkKKworCisjIFByb3ZpZGUgc29tZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY29tcGlsZXIuCitlY2hvICIkYXNfbWU6NjE4ODoiIFwKKyAgICAgImNoZWNraW5nIGZvciBGb3J0cmFuIDc3IGNvbXBpbGVyIHZlcnNpb24iID4mNQorYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoreyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoreyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KK3sgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CitybSAtZiBhLm91dAorCisjIElmIHdlIGRvbid0IHVzZSBgLkYnIGFzIGV4dGVuc2lvbiwgdGhlIHByZXByb2Nlc3NvciBpcyBub3QgcnVuIG9uIHRoZQorIyBpbnB1dCBmaWxlLiAgKE5vdGUgdGhhdCB0aGlzIG9ubHkgbmVlZHMgdG8gd29yayBmb3IgR05VIGNvbXBpbGVycy4pCithY19zYXZlX2V4dD0kYWNfZXh0CithY19leHQ9RgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgRm9ydHJhbiA3NyBjb21waWxlci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZjc3X2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICAgIHByb2dyYW0gbWFpbgorI2lmbmRlZiBfX0dOVUNfXworICAgICAgIGNob2tlIG1lCisjZW5kaWYKKworICAgICAgZW5kCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY29tcGlsZXJfZ251PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jb21waWxlcl9nbnU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CithY19jdl9mNzdfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjYKK2FjX2V4dD0kYWNfc2F2ZV9leHQKK2FjX3Rlc3RfRkZMQUdTPSR7RkZMQUdTK3NldH0KK2FjX3NhdmVfRkZMQUdTPSRGRkxBR1MKK0ZGTEFHUz0KK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2Y3N19nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIEZGTEFHUz0tZworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICBwcm9ncmFtIG1haW4KKworICAgICAgZW5kCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfcHJvZ19mNzdfZz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfcHJvZ19mNzdfZz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2Y3N19nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2Y3N19nIiA+JjYKK2lmIHRlc3QgIiRhY190ZXN0X0ZGTEFHUyIgPSBzZXQ7IHRoZW4KKyAgRkZMQUdTPSRhY19zYXZlX0ZGTEFHUworZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2Y3N19nID0geWVzOyB0aGVuCisgIGlmIHRlc3QgIngkYWNfY3ZfZjc3X2NvbXBpbGVyX2dudSIgPSB4eWVzOyB0aGVuCisgICAgRkZMQUdTPSItZyAtTzIiCisgIGVsc2UKKyAgICBGRkxBR1M9Ii1nIgorICBmaQorZWxzZQorICBpZiB0ZXN0ICJ4JGFjX2N2X2Y3N19jb21waWxlcl9nbnUiID0geHllczsgdGhlbgorICAgIEZGTEFHUz0iLU8yIgorICBlbHNlCisgICAgRkZMQUdTPQorICBmaQorZmkKKworRzc3PWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKKworCisjIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCisKKyMgZmluZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X3N5c19tYXhfY21kX2xlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAgIGk9MAorICB0ZXN0c3RyaW5nPSJBQkNEIgorCisgIGNhc2UgJGJ1aWxkX29zIGluCisgIG1zZG9zZGpncHAqKQorICAgICMgT24gREpHUFAsIHRoaXMgdGVzdCBjYW4gYmxvdyB1cCBwcmV0dHkgYmFkbHkgZHVlIHRvIHByb2JsZW1zIGluIGxpYmMKKyAgICAjIChhbnkgc2luZ2xlIGFyZ3VtZW50IGV4Y2VlZGluZyAyMDAwIGJ5dGVzIGNhdXNlcyBhIGJ1ZmZlciBvdmVycnVuCisgICAgIyBkdXJpbmcgZ2xvYiBleHBhbnNpb24pLiAgRXZlbiBpZiBpdCB3ZXJlIGZpeGVkLCB0aGUgcmVzdWx0IG9mIHRoaXMKKyAgICAjIGNoZWNrIHdvdWxkIGJlIGxhcmdlciB0aGFuIGl0IHNob3VsZCBiZS4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTIyODg7ICAgICMgMTJLIGlzIGFib3V0IHJpZ2h0CisgICAgOzsKKworICBnbnUqKQorICAgICMgVW5kZXIgR05VIEh1cmQsIHRoaXMgdGVzdCBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSB0aGVyZSBpcworICAgICMgbm8gbGltaXQgdG8gdGhlIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLgorICAgICMgTGlidG9vbCB3aWxsIGludGVycHJldCAtMSBhcyBubyBsaW1pdCB3aGF0c29ldmVyCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOworICAgIDs7CisKKyAgY3lnd2luKiB8IG1pbmd3KikKKyAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcworICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCisgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKKyAgICAjIHlvdSBlbmQgdXAgd2l0aCBhICJmcm96ZW4iIGNvbXB1dGVyLCBldmVuIHRob3VnaCB3aXRoIHBhdGllbmNlCisgICAgIyB0aGUgdGVzdCBldmVudHVhbGx5IHN1Y2NlZWRzICh3aXRoIGEgbWF4IGxpbmUgbGVuZ3RoIG9mIDI1NmspLgorICAgICMgSW5zdGVhZCwgbGV0J3MganVzdCBwdW50OiB1c2UgdGhlIG1pbmltdW0gbGluZWxlbmd0aCByZXBvcnRlZCBieQorICAgICMgYWxsIG9mIHRoZSBzdXBwb3J0ZWQgcGxhdGZvcm1zOiA4MTkyIChvbiBOVC8ySy9YUCkuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBhbWlnYW9zKikKKyAgICAjIE9uIEFtaWdhT1Mgd2l0aCBwZGtzaCwgdGhpcyB0ZXN0IHRha2VzIGhvdXJzLCBsaXRlcmFsbHkuCisgICAgIyBTbyB3ZSBqdXN0IHB1bnQgYW5kIHVzZSBhIG1pbmltdW0gbGluZSBsZW5ndGggb2YgODE5Mi4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49ODE5MjsKKyAgICA7OworCisgIG5ldGJzZCogfCBmcmVlYnNkKiB8IG9wZW5ic2QqIHwgZGFyd2luKiB8IGRyYWdvbmZseSopCisgICAgIyBUaGlzIGhhcyBiZWVuIGFyb3VuZCBzaW5jZSAzODZCU0QsIGF0IGxlYXN0LiAgTGlrZWx5IGZ1cnRoZXIuCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjdGw7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsaWYgdGVzdCAteCAvdXNyL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC91c3Ivc2Jpbi9zeXNjdGwgLW4ga2Vybi5hcmdtYXhgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTY1NTM2CSMgdXNhYmxlIGRlZmF1bHQgZm9yIGFsbCBCU0RzCisgICAgZmkKKyAgICAjIEFuZCBhZGQgYSBzYWZldHkgem9uZQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICA7OworCisgIGludGVyaXgqKQorICAgICMgV2Uga25vdyB0aGUgdmFsdWUgMjYyMTQ0IGFuZCBoYXJkY29kZSBpdCB3aXRoIGEgc2FmZXR5IHpvbmUgKGxpa2UgQlNEKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xOTY2MDgKKyAgICA7OworCisgIG9zZiopCisgICAgIyBEci4gSGFucyBFa2tlaGFyZCBQbGVzc2VyIHJlcG9ydHMgc2VlaW5nIGEga2VybmVsIHBhbmljIHJ1bm5pbmcgY29uZmlndXJlCisgICAgIyBkdWUgdG8gdGhpcyB0ZXN0IHdoZW4gZXhlY19kaXNhYmxlX2FyZ19saW1pdCBpcyAxIG9uIFRydTY0LiBJdCBpcyBub3QKKyAgICAjIG5pY2UgdG8gY2F1c2Uga2VybmVsIHBhbmljcyBzbyBsZXRzIGF2b2lkIHRoZSBsb29wIGJlbG93LgorICAgICMgRmlyc3Qgc2V0IGEgcmVhc29uYWJsZSBkZWZhdWx0LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0xNjM4NAorICAgICMKKyAgICBpZiB0ZXN0IC14IC9zYmluL3N5c2NvbmZpZzsgdGhlbgorICAgICAgY2FzZSBgL3NiaW4vc3lzY29uZmlnIC1xIHByb2MgZXhlY19kaXNhYmxlX2FyZ19saW1pdGAgaW4KKyAgICAgICAgKjEqKSBsdF9jdl9zeXNfbWF4X2NtZF9sZW49LTEgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgIHNjbzMuMnY1KikKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTAyNDAwCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvNXY2KiB8IHN5c3Y0LjJ1dzIqKQorICAgIGthcmdtYXg9YGdyZXAgQVJHX01BWCAvZXRjL2NvbmYvY2YuZC9zdHVuZSAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0IC1uICIka2FyZ21heCI7IHRoZW4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsgCV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgICMgSWYgdGVzdCBpcyBub3QgYSBzaGVsbCBidWlsdC1pbiwgd2UnbGwgcHJvYmFibHkgZW5kIHVwIGNvbXB1dGluZyBhCisgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KKyAgICB3aGlsZSAodGVzdCAiWCJgJFNIRUxMICQwIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCisJICAgIG5ld19yZXN1bHQ9YGV4cHIgIlgkdGVzdHN0cmluZyIgOiAiLioiIDI+JjFgICYmCisJICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0kbmV3X3Jlc3VsdCAmJgorCSAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICBkbworICAgICAgaT1gZXhwciAkaSArIDFgCisgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICBkb25lCisgICAgdGVzdHN0cmluZz0KKyAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKKyAgICAjIGFtb3VudHMgb2YgYWRkaXRpb25hbCBhcmd1bWVudHMgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byB0aGUgbGlua2VyLgorICAgICMgSXQgYXBwZWFycyBhcyB0aG91Z2ggMS8yIGlzIGEgdXNhYmxlIHZhbHVlLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgOzsKKyAgZXNhYworCitmaQorCitpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vbmUiID4mNQorZWNobyAiJHtFQ0hPX1R9bm9uZSIgPiY2CitmaQorCisKKworCisjIENoZWNrIGZvciBjb21tYW5kIHRvIGdyYWIgdGhlIHJhdyBzeW1ib2wgbmFtZSBmb2xsb3dlZCBieSBDIHN5bWJvbCBmcm9tIG5tLgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW0JDREVHUlNUXScKKworIyBSZWdleHAgdG8gbWF0Y2ggc3ltYm9scyB0aGF0IGNhbiBiZSBhY2Nlc3NlZCBkaXJlY3RseSBmcm9tIEMuCitzeW1wYXQ9J1woW19BLVphLXpdW19BLVphLXowLTldKlwpJworCisjIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL14uIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMTsvcCciCisKKyMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIHN5bWJvbCBuYW1lIGFuZCBzeW1ib2wgYWRkcmVzcworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgorCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW0JDRFRdJworICA7OworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICBzeW1jb2RlPSdbQUJDREdJU1RXXScKKyAgOzsKK2hwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCisgIDs7CitsaW51eCopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJworICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFteIF0qXCkgJC8gIHtcXFwiXDFcXFwiLCAobHRfcHRyKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKKyAgZmkKKyAgOzsKK2lyaXgqIHwgbm9uc3RvcHV4KikKKyAgc3ltY29kZT0nW0JDREVHUlNUXScKKyAgOzsKK29zZiopCisgIHN5bWNvZGU9J1tCQ0RFR1FSU1RdJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tCRFJUXScKKyAgOzsKK3NjbzMuMnY1KikKKyAgc3ltY29kZT0nW0RUXScKKyAgOzsKK3N5c3Y0LjJ1dzIqKQorICBzeW1jb2RlPSdbRFRdJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW0FCRFRdJworICA7Oworc3lzdjQpCisgIHN5bWNvZGU9J1tERk5TVFVdJworICA7OworZXNhYworCisjIEhhbmRsZSBDUkxGIGluIG1pbmd3IHRvb2wgY2hhaW4KK29wdF9jcj0KK2Nhc2UgJGJ1aWxkX29zIGluCittaW5ndyopCisgIG9wdF9jcj1gZWNobyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB1c2UgaXRzIHN0YW5kYXJkIHN5bWJvbCBjb2Rlcy4KK2Nhc2UgYCROTSAtViAyPiYxYCBpbgorKkdOVSogfCAqJ3dpdGggQkZEJyopCisgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScgOzsKK2VzYWMKKworIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KK2ZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KKworICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgorICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgorCisgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsgCV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbIAldWyAJXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCitjaGFyIG5tX3Rlc3RfdmFyOwordm9pZCBubV90ZXN0X2Z1bmMoKXt9CisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgoraW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KK0VPRgorCisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgICMgTm93IHRyeSB0byBncmFiIHRoZSBzeW1ib2xzLgorICAgIG5saXN0PWNvbmZ0ZXN0Lm5tCisgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3RcIiIpID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcPiAkbmxpc3QpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgorICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KKyAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCisJbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCisgICAgICBlbHNlCisJcm0gLWYgIiRubGlzdCJUCisgICAgICBmaQorCisgICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCisgICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCisJaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworRU9GCisJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisjaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCisjIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKKyNlbHNlCisjIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKKyMgZGVmaW5lIGNvbnN0CisjZW5kaWYKKworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCitjb25zdCBzdHJ1Y3QgeworICBjb25zdCBjaGFyICpuYW1lOworICBsdF9wdHJfdCBhZGRyZXNzOworfQorbHRfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Cit7CitFT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKGx0X3B0cl90KSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQKKwkgIGNhdCA8PFxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKGx0X3B0cl90KSAwfQorfTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKKwkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKKwkgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0iJGx0X3NhdmVfTElCUyIKKwkgIENGTEFHUz0iJGx0X3NhdmVfQ0ZMQUdTIgorCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mNQorCWZpCisgICAgICBlbHNlCisJZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JjUKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgZWNobyAiY2Fubm90IHJ1biAkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgPiY1CisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGZpCisgIHJtIC1mIGNvbmZ0ZXN0KiBjb25mdHN0KgorCisgICMgRG8gbm90IHVzZSB0aGUgZ2xvYmFsX3N5bWJvbF9waXBlIHVubGVzcyBpdCB3b3Jrcy4KKyAgaWYgdGVzdCAiJHBpcGVfd29ya3MiID0geWVzOyB0aGVuCisgICAgYnJlYWsKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9CisgIGZpCitkb25lCisKK2ZpCisKK2lmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgorICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KK2ZpCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogZmFpbGVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfWZhaWxlZCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG9rIiA+JjUKK2VjaG8gIiR7RUNIT19UfW9rIiA+JjYKK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCitta2RpciAubGlicyAyPi9kZXYvbnVsbAoraWYgdGVzdCAtZCAubGliczsgdGhlbgorICBsdF9jdl9vYmpkaXI9LmxpYnMKK2Vsc2UKKyAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KKyAgbHRfY3Zfb2JqZGlyPV9saWJzCitmaQorcm1kaXIgLmxpYnMgMj4vZGV2L251bGwKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3Zfb2JqZGlyIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9vYmpkaXIiID4mNgorb2JqZGlyPSRsdF9jdl9vYmpkaXIKKworCisKKworCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcworIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK1hzZWQ9J3NlZCAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYCRcXFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCisjIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCitkZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKK25vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJworCisjIENvbnN0YW50czoKK3JtPSJybSAtZiIKKworIyBHbG9iYWwgdmFyaWFibGVzOgorZGVmYXVsdF9vZmlsZT1saWJ0b29sCitjYW5fYnVpbGRfc2hhcmVkPXllcworCisjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKKyMgd2hpY2ggbmVlZHMgJy5saWInKS4KK2xpYmV4dD1hCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKK29maWxlPSIkZGVmYXVsdF9vZmlsZSIKK3dpdGhfZ251X2xkPSIkbHRfY3ZfcHJvZ19nbnVfbGQiCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFyOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX0FSK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUj0iJEFSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJHthY190b29sX3ByZWZpeH1hciIKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorZG9uZQorCitmaQorZmkKK0FSPSRhY19jdl9wcm9nX0FSCitpZiB0ZXN0IC1uICIkQVIiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBUiIgPiY1CitlY2hvICIke0VDSE9fVH0kQVIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImFyIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhcjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9BUitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfQVI9IiRhY19jdF9BUiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImFyIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKKyAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfQVIiICYmIGFjX2N2X3Byb2dfYWNfY3RfQVI9ImZhbHNlIgorZmkKK2ZpCithY19jdF9BUj0kYWNfY3ZfcHJvZ19hY19jdF9BUgoraWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQVIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0FSIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBBUj0kYWNfY3RfQVIKK2Vsc2UKKyAgQVI9IiRhY19jdl9wcm9nX0FSIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9cmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXJhbmxpYjsgYWNfd29yZD0kMgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfcHJvZ19SQU5MSUIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19SQU5MSUI9IiRSQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworZmkKK2ZpCitSQU5MSUI9JGFjX2N2X3Byb2dfUkFOTElCCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRSQU5MSUIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfUkFOTElCIjsgdGhlbgorICBhY19jdF9SQU5MSUI9JFJBTkxJQgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInJhbmxpYiIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcmFubGliOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X1JBTkxJQj0iJGFjX2N0X1JBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSJyYW5saWIiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIiICYmIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSI6IgorZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfUkFOTElCIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9SQU5MSUIiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCisgIFJBTkxJQj0kYWNfY3RfUkFOTElCCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9c3RyaXA7IGFjX3dvcmQ9JDIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3Byb2dfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgorICBhY19jdl9wcm9nX1NUUklQPSIkU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBhY19jdl9wcm9nX1NUUklQPSIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIgorICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCitkb25lCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFNUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRTVFJJUCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X1NUUklQK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0ic3RyaXAiCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKK2RvbmUKKworICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9TVFJJUCIgJiYgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iOiIKK2ZpCitmaQorYWNfY3RfU1RSSVA9JGFjX2N2X3Byb2dfYWNfY3RfU1RSSVAKK2lmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X1NUUklQIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdF9TVFJJUCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisKKyAgU1RSSVA9JGFjX2N0X1NUUklQCitlbHNlCisgIFNUUklQPSIkYWNfY3ZfcHJvZ19TVFJJUCIKK2ZpCisKKworb2xkX0NDPSIkQ0MiCitvbGRfQ0ZMQUdTPSIkQ0ZMQUdTIgorCisjIFNldCBzYW5lIGRlZmF1bHRzIGZvciB2YXJpb3VzIHZhcmlhYmxlcwordGVzdCAteiAiJEFSIiAmJiBBUj1hcgordGVzdCAteiAiJEFSX0ZMQUdTIiAmJiBBUl9GTEFHUz1jcnUKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK3Rlc3QgLXogIiRDQyIgJiYgQ0M9Y2MKK3Rlc3QgLXogIiRMVENDIiAmJiBMVENDPSRDQwordGVzdCAteiAiJExUQ0ZMQUdTIiAmJiBMVENGTEFHUz0kQ0ZMQUdTCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCit0ZXN0IC16ICIkTEQiICYmIExEPWxkCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCit0ZXN0IC16ICIkTUFHSUNfQ01EIiAmJiBNQUdJQ19DTUQ9ZmlsZQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK3Rlc3QgLXogIiRTVFJJUCIgJiYgU1RSSVA9OgordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworIyBEZXRlcm1pbmUgY29tbWFuZHMgdG8gY3JlYXRlIG9sZC1zdHlsZSBzdGF0aWMgYXJjaGl2ZXMuCitvbGRfYXJjaGl2ZV9jbWRzPSckQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9CisKK2lmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgb3BlbmJzZCopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiAtdCBcJG9sZGxpYiIKKyAgICA7OworICAqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCisgICAgOzsKKyAgZXNhYworICBvbGRfYXJjaGl2ZV9jbWRzPSIkb2xkX2FyY2hpdmVfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKK2ZpCisKK2ZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworIyBPbmx5IHBlcmZvcm0gdGhlIGNoZWNrIGZvciBmaWxlLCBpZiB0aGUgY2hlY2sgbWV0aG9kIHJlcXVpcmVzIGl0CitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhc2UgJE1BR0lDX0NNRCBpbgorW1xcLypdIHwgID86W1xcL10qKQorICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisqKQorICBsdF9zYXZlX01BR0lDX0NNRD0iJE1BR0lDX0NNRCIKKyAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGFjX2R1bW15PSIvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIIgorICBmb3IgYWNfZGlyIGluICRhY19kdW1teTsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgJGFjX2Rpci8ke2FjX3Rvb2xfcHJlZml4fWZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAorKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgorKioqIFRoZSByZXN1bHQgaXMgdGhhdCBsaWJ0b29sIG1heSBmYWlsIHRvIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyaWVzCisqKiogYXMgc3VjaC4gIFRoaXMgd2lsbCBhZmZlY3QgdGhlIGNyZWF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzIHRoYXQKKyoqKiBkZXBlbmQgb24gc2hhcmVkIGxpYnJhcmllcywgYnV0IHByb2dyYW1zIGxpbmtlZCB3aXRoIHN1Y2ggbGlidG9vbAorKioqIGxpYnJhcmllcyB3aWxsIHdvcmsgcmVnYXJkbGVzcyBvZiB0aGlzIHByb2JsZW0uICBOZXZlcnRoZWxlc3MsIHlvdQorKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bworKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKKworRU9GCisJICBmaSA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgIGRvbmUKKyAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgIE1BR0lDX0NNRD0iJGx0X3NhdmVfTUFHSUNfQ01EIgorICA7OworZXNhYworZmkKKworTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCitpZiB0ZXN0IC1uICIkTUFHSUNfQ01EIjsgdGhlbgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRNQUdJQ19DTUQiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1CitlY2hvICIke0VDSE9fVH1ubyIgPiY2CitmaQorCitpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZmlsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTUFHSUNfQ01EIGluCitbXFwvKl0gfCAgPzpbXFwvXSopCisgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyopCisgIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgYWNfZHVtbXk9Ii91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyL2ZpbGU7IHRoZW4KKyAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyL2ZpbGUiCisgICAgICBpZiB0ZXN0IC1uICIkZmlsZV9tYWdpY190ZXN0X2ZpbGUiOyB0aGVuCisJY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KKwkiZmlsZV9tYWdpYyAiKikKKwkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiZmlsZV9tYWdpYyBcKC4qXCkiYAorCSAgTUFHSUNfQ01EPSIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiCisJICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcJGZpbGVfbWFnaWNfdGVzdF9maWxlIDI+IC9kZXYvbnVsbCB8CisJICAgICRFR1JFUCAiJGZpbGVfbWFnaWNfcmVnZXgiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKwkgICAgY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK0VPRgorCSAgZmkgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgYnJlYWsKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorICBNQUdJQ19DTUQ9IiRsdF9zYXZlX01BR0lDX0NNRCIKKyAgOzsKK2VzYWMKK2ZpCisKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1CitlY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjYKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQorZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorZmkKKworICBlbHNlCisgICAgTUFHSUNfQ01EPToKKyAgZmkKK2ZpCisKKyAgZmkKKyAgOzsKK2VzYWMKKworZW5hYmxlX2Rsb3Blbj1ubworZW5hYmxlX3dpbjMyX2RsbD1ubworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIG9yIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCisgIGVuYWJsZXZhbD0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisKK2ZpOwordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyBvciAtLXdpdGhvdXQtcGljIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfcGljIgorICBwaWNfbW9kZT0iJHdpdGh2YWwiCitlbHNlCisgIHBpY19tb2RlPWRlZmF1bHQKK2ZpOwordGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0CisKKyMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0Cit0YWduYW1lPQorbHRfc2F2ZV9DQz0iJENDIgorYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1jCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHQ9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7XG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKCl7cmV0dXJuKDApO31cbicKKworCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskcm0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCisKKworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPScgLWZuby1idWlsdGluJworCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz1ubworICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo3MjQ5OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjcyNTM6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkcm0gY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjYKKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgorZWxzZQorICAgIDoKK2ZpCisKK2ZpCisKK2x0X3Byb2dfY29tcGlsZXJfd2w9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0KK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKKworICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgqKQorICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYW1pZ2FvcyopCisgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJworICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisKKyAgICBtc2Rvc2RqZ3BwKikKKyAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCisgICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWM9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAorICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqfGlhNjQqKQorCSMgK1ogdGhlIGRlZmF1bHQKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGVsc2UKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcW5vY29tbW9uJworICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIDs7CisgICAgICAgZXNhYworICAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWM9JytaJworCTs7CisgICAgICBlc2FjCisgICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIGxpbnV4KikKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBpY2MqIHwgZWNjKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKyAgICAgICAgIyBBbGwgQWxwaGEgY29kZSBpcyBQSUMuCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgZjc3KiB8IGY5MCogfCBmOTUqKQorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1Rb3B0aW9uIGxkICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctS2NvbmZvcm1fcGljJworCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctcGljJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9waWMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljIiA+JjYKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzPW5vCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpYyAtRFBJQyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6NzUxNzogJGx0X2NvbXBpbGVcIiIgPiY1KQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTo3NTIxOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3M9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2CisKK2lmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCisgICAgICIiIHwgIiAiKikgOzsKKyAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWM9IiAkbHRfcHJvZ19jb21waWxlcl9waWMiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkPW5vCitmaQorCitmaQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrcz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkcm0gY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2CisKK2lmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0KK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjc2MjE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZTo3NjI1OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0CisgICB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKKyAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRybSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgIHJtZGlyIGNvbmZ0ZXN0CisgICAkcm0gY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjYKKworCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgorICBoYXJkX2xpbmtzPXllcworICAkcm0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyAgcnVucGF0aF92YXI9CisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQorICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGFyY2hpdmVfY21kcz0KKyAgYXJjaGl2ZV9leHBzeW1fY21kcz0KKyAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KKyAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX21pbnVzX0w9bm8KKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBsaW5rX2FsbF9kZXBsaWJzPXVua25vd24KKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIG1vZHVsZV9jbWRzPQorICBtb2R1bGVfZXhwc3ltX2NtZHM9CisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubworICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKKyAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKKyAgaW5jbHVkZV9leHBzeW1zPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltcz0iX0dMT0JBTF9PRkZTRVRfVEFCTEVfIgorICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKKyAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCisgICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAorICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KKyAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisgICMgSnVzdCBiZWluZyBwYXJhbm9pZCBhYm91dCBlbnN1cmluZyB0aGF0IGNjX2Jhc2VuYW1lIGlzIHNldC4KKyAgZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworICBjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCisgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICBmaQorICAgIDs7CisgIGludGVyaXgqKQorICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCisgICAgd2l0aF9nbnVfbGQ9eWVzCisgICAgOzsKKyAgb3BlbmJzZCopCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICA7OworICBlc2FjCisKKyAgbGRfc2hsaWJzPXllcworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgorICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICBlbHNlCisgIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnM9bm8KKwljYXQgPDxFT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi45LjEsIGlzIHJlcG9ydGVkCisqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KKyoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQorKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAorKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKworRU9GCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKworICAgICAgIyBTYW11ZWwgQS4gRmFsdm8gSUkgPGtjNXRqYUBkb2xwaGluLm9wZW5wcm9qZWN0cy5uZXQ+IHJlcG9ydHMKKyAgICAgICMgdGhhdCB0aGUgc2VtYW50aWNzIG9mIGR5bmFtaWMgbGlicmFyaWVzIG9uIEFtaWdhT1MsIGF0IGxlYXN0IHVwCisgICAgICAjIHRvIHZlcnNpb24gNCwgaXMgdG8gc2hhcmUgZGF0YSBhbW9uZyBtdWx0aXBsZSBwcm9ncmFtcyBsaW5rZWQKKyAgICAgICMgd2l0aCB0aGUgc2FtZSBkeW5hbWljIGxpYnJhcnkuICBTaW5jZSB0aGlzIGRvZXNuJ3QgbWF0Y2ggdGhlCisgICAgICAjIGJlaGF2aW9yIG9mIHNoYXJlZCBsaWJyYXJpZXMgb24gb3RoZXIgcGxhdGZvcm1zLCB3ZSBjYW4ndCB1c2UKKyAgICAgICMgdGhlbS4KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKworICAgIGJlb3MqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kcz0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKKyAgICAgICMgYXMgdGhlcmUgaXMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdIC9zLy4qIFwoW14gXSpcKS9cMSBEQVRBLydcJycgfCAkU0VEIC1lICdcJycvXltBSVRXXSAvcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKworICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJYXJjaGl2ZV9leHBzeW1fY21kcz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGludGVyaXgzKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KKyAgICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKKyAgICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKKyAgICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwl0bXBfYWRkZmxhZz0KKwljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KKwlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJICA7OworCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCciJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKwlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICRDQyAtc2hhcmVkJyIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKKwlmaQorICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFRoZSByZWxlYXNlcyAyLjguKiBvZiB0aGUgR05VIGxpbmtlciBjYW5ub3QgcmVsaWFibHkKKyoqKiBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTb2xhcmlzIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuOS4xIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZWxpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqKQorICAgICAgY2FzZSBgJExEIC12IDI+JjFgIGluCisgICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMVswLTVdLiopCisJbGRfc2hsaWJzPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworCSAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIGVsc2UKKwkgICAgbGRfc2hsaWJzPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlicz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlicyIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KKwkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKKwkjIGJyb2tlbiBjb2xsZWN0Mi4KKwloYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4NCogfCBhaXg1KikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZmkKKwlhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisKKwkjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKKwkjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKwkjIG5lZWQgdG8gZG8gcnVudGltZSBsaW5raW5nLgorCWNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeDUqKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisgIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKyAgCSAgICBicmVhaworICAJICBmaQorCSAgZG9uZQorCSAgOzsKKwllc2FjCisKKwlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKKyAgICAgIGZpCisKKyAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQorICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KKyAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KKworICAgICAgYXJjaGl2ZV9jbWRzPScnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JworICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgCSAgaGFyZGNvZGVfZGlyZWN0PXllcworCSAgZWxzZQorICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisgIAkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAorICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCisgIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisgIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworICAJICBoYXJkY29kZV9taW51c19MPXllcworICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICBmaQorCSAgOzsKKwllc2FjCisJc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKwlmaQorICAgICAgZWxzZQorCSMgbm90IHVzaW5nIGdjYworCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgIAkjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorICAJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9Jy1iZXJvaycKKyAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCWFyY2hpdmVfZXhwc3ltX2NtZHM9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYDsgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKKwkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwkgIG5vX3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJGNvbnZlbmllbmNlJworCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlicz1ubworICAgICAgOzsKKworICAgIGJzZGlbNDVdKikKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisgICAgICBsaWJleHQ9bGliCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmRsbCBmaWxlcywgbm90IC5zbyBmaWxlcy4KKyAgICAgIHNocmV4dF9jbWRzPSIuZGxsIgorICAgICAgIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHM9J2xpYiAvT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKyAgICAgIGZpeF9zcmNmaWxlX3BhdGg9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgOzsKKyAgICAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCisgICAgICAgICAgICAgMTAuWzAxMl0pCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9dW5zdXBwb3J0ZWQKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgICAgICBsaW5rX2FsbF9kZXBsaWJzPXllcworICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgorICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgIG1vZHVsZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGVsc2UKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIHhsYyopCisgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgbW9kdWxlX2NtZHM9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJworICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgICA7OworCisgICAgZGd1eCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBmcmVlYnNkMSopCisgICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgZnJlZWJzZCogfCBrZnJlZWJzZCotZ251IHwgZHJhZ29uZmx5KikKKyAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworCisgICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWhhcmRjb2RlX2RpcmVjdD15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0w9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZWxzZQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3Q9eWVzCisJICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICBvcGVuYnNkKikKKyAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKKyAgICAgIGVsc2UKKyAgICAgICBjYXNlICRob3N0X29zIGluCisJIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCisJICAgYXJjaGl2ZV9jbWRzPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKwkgICA7OworCSAqKQorCSAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKKyAgICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgOzsKKworICAgIG9zZjMqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKKyAgICAgIDs7CisKKyAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJworCisJIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyAteiB0ZXh0JworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwl3bGFyYz0nJHt3bH0nCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBlbHNlCisJd2xhcmM9JycKKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKKyAgICAgICopCisgCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgbGlua2VyIG9wdGlvbnMgc28gd2UKKyAJIyBjYW5ub3QganVzdCBwYXNzIHRoZSBjb252aWVuY2UgbGlicmFyeSBuYW1lcyB0aHJvdWdoCisgCSMgd2l0aG91dCAkd2wsIGlmZiB3ZSBkbyBub3QgbGluayB3aXRoICRMRC4KKyAJIyBMdWNraWx5LCBnY2Mgc3VwcG9ydHMgdGhlIHNhbWUgc3ludGF4IHdlIG5lZWQgZm9yIFN1biBTdHVkaW8uCisgCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisgCWNhc2UgJHdsYXJjIGluCisgCScnKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OworIAkqKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7CisgCWVzYWMgOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KKwkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCisJIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3Q9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0KQorICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKwlzbmkpCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdD15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICByZWxvYWRfY21kcz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3Q9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kcz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwloYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnM9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosdGV4dCcKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kcz0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQorICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKyAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAorICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgICAjIGFzIC16IGRlZnMuCisgICAgICBub191bmRlZmluZWRfZmxhZz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBhcmNoaXZlX2NtZHM9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgbGRfc2hsaWJzPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CitlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzIiA+JjYKK3Rlc3QgIiRsZF9zaGxpYnMiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGFyY2hpdmVfY21kcyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2CisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWMKKyAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKKyAgICAgICAgbGlua2VyX2ZsYWdzPS12CisgICAgICAgIHZlcnN0cmluZz0KKyAgICAgICAgb3V0cHV0X29iamRpcj0uCisgICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKKyAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9CisgICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKKyAgKGV2YWwgJGFyY2hpdmVfY21kcyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisgICAgICAgIHRoZW4KKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjPXllcworICAgICAgICBmaQorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgICAgZWxzZQorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgIGZpCisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjIiA+JjYKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICA7OworZXNhYworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNgorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnOycgPi9kZXYvbnVsbCA7IHRoZW4KKyAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCisgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCisgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCisgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICBmaQorZWxzZQorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCitmaQorbmVlZF9saWJfcHJlZml4PXVua25vd24KK2hhcmRjb2RlX2ludG9fbGlicz1ubworCisjIHdoZW4geW91IHNldCBuZWVkX3ZlcnNpb24gdG8gbm8sIG1ha2Ugc3VyZSBpdCBkb2VzIG5vdCBjYXVzZSAtc2V0X3ZlcnNpb24KKyMgZmxhZ3MgdG8gYmUgbGVmdCB3aXRob3V0IGFyZ3VtZW50cworbmVlZF92ZXJzaW9uPXVua25vd24KKworY2FzZSAkaG9zdF9vcyBpbgorYWl4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUuYScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisKKyAgIyBBSVggMyBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyB3ZSBhcHBlbmQgYSBtYWpvciB2ZXJzaW9uIHRvIHRoZSBuYW1lLgorICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICA7OworCithaXg0KiB8IGFpeDUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCisgICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJworCSAgIGVjaG8gJyB5ZXMgJworCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KKwk6CisgICAgICBlbHNlCisJY2FuX2J1aWxkX3NoYXJlZD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKKyAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCisgICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KKyAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKyAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbworICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKKyAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIGVsc2UKKyAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCisgICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJworICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBmaQorICAgIHNobGlicGF0aF92YXI9TElCUEFUSAorICBmaQorICA7OworCithbWlnYW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKKyAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KKyAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbNDVdKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKKyAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93CisgICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcworICA7OworCitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIHZlcnNpb25fdHlwZT13aW5kb3dzCisgIHNocmV4dF9jbWRzPSIuZGxsIgorICBuZWVkX3ZlcnNpb249bm8KKyAgbmVlZF9saWJfcHJlZml4PW5vCisKKyAgY2FzZSAkR0NDLCRob3N0X29zIGluCisgIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KKyAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgorICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgorICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkcm0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKKyAgICAgIDs7CisgICAgbWluZ3cqKQorICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5CisgICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKKyAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQorICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCisgICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKKyAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgICAgICBlbHNlCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIGZpCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworCisgICopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgOzsKKyAgZXNhYworICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KKyAgc2hsaWJwYXRoX3Zhcj1QQVRICisgIDs7CisKK2RhcndpbiogfCByaGFwc29keSopCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgorICB2ZXJzaW9uX3R5cGU9ZGFyd2luCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAorICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKKyAgIyBBcHBsZSdzIGdjYyBwcmludHMgJ2djYyAtcHJpbnQtc2VhcmNoLWRpcnMnIGRvZXNuJ3Qgb3BlcmF0ZSB0aGUgc2FtZS4KKyAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCB0ciAiXG4iICIkUEFUSF9TRVBBUkFUT1IiIHwgc2VkIC1lICdzL2xpYnJhcmllczovQGxpYnJhcmllczovJyB8IHRyICJAIiAiXG4iIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgc2VkIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyIgLWUgInMsJFBBVEhfU0VQQVJBVE9SLCAsZyIgLWUgInMsLiosJiAvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliLGciYAorICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliJworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKKyAgOzsKKworZGd1eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworZnJlZWJzZDEqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCitrZnJlZWJzZCotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBkeW5hbWljX2xpbmtlcj0nR05VIGxkLnNvJworICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKKyAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCisgIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCisgICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAorICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkKikgIyBmcm9tIDQuNiBvbgorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZXNhYworICA7OworCitnbnUqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCisgICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KKyAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGNhc2UgJGhvc3RfY3B1IGluCisgIGlhNjQqKQorICAgIHNocmV4dF9jbWRzPScuc28nCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgorICAgIGVsc2UKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKKyAgICBmaQorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAgaHBwYSo2NCopCisgICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKKyAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgICA7OworICAgKikKKyAgICBzaHJleHRfY21kcz0nLnNsJworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIDs7CisgIGVzYWMKKyAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICA7OworCitpbnRlcml4MyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICBjYXNlICRob3N0X29zIGluCisgICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OworICAgICopCisJaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorCQl2ZXJzaW9uX3R5cGU9bGludXgKKwllbHNlCisJCXZlcnNpb25fdHlwZT1pcml4CisJZmkgOzsKKyAgZXNhYworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBpcml4NSogfCBub25zdG9wdXgqKQorICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KKyAgICA7OworICAqKQorICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKKyAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQorICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OworICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCisgICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKKyAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKKyAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7CisgICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCisjIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCitsaW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQorICBkeW5hbWljX2xpbmtlcj1ubworICA7OworCisjIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCitsaW51eCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBmaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nCisgIGxpYnN1ZmY9CisgIGNhc2UgIiRob3N0X2NwdSIgaW4KKyAgeDg2XzY0KnxzMzkweCp8cG93ZXJwYzY0KikKKyAgICBlY2hvICcjbGluZSA5MDg4ICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICo2NC1iaXQqKQorICAgICAgICBsaWJzdWZmPTY0CisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1yZiBjb25mdGVzdCoKKyAgICA7OworICBlc2FjCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLztzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9ICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCitrbmV0YnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK250by1xbngqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgoraGFyZGNvZGVfYWN0aW9uPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHx8IFwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwgXAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWMiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKKyAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQorICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CisgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKKyAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKKyAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbj1pbW1lZGlhdGUKKyAgZmkKK2Vsc2UKKyAgIyBXZSBjYW5ub3QgaGFyZGNvZGUgYW55dGhpbmcsIG9yIGVsc2Ugd2UgY2FuIG9ubHkgaGFyZGNvZGUgZXhpc3RpbmcKKyAgIyBkaXJlY3Rvcmllcy4KKyAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uIiA+JjYKKworaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKK3N0cmlwbGliPQorb2xkX3N0cmlwbGliPQorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCBncmVwICJHTlUgc3RyaXAiID4vZGV2L251bGw7IHRoZW4KKyAgdGVzdCAteiAiJG9sZF9zdHJpcGxpYiIgJiYgb2xkX3N0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC1kZWJ1ZyIKKyAgdGVzdCAteiAiJHN0cmlwbGliIiAmJiBzdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtdW5uZWVkZWQiCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1CitlY2hvICIke0VDSE9fVH15ZXMiID4mNgorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgIGRhcndpbiopCisgICAgICAgaWYgdGVzdCAtbiAiJFNUUklQIiA7IHRoZW4KKyAgICAgICAgIHN0cmlwbGliPSIkU1RSSVAgLXgiCisgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQorZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgICAgICBlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCisgICAgICAgOzsKKyAgICopCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgICA7OworICBlc2FjCitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKyAgZW5hYmxlX2Rsb3Blbj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCisgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgorZWxzZQorICBsdF9jdl9kbG9wZW49bm8KKyAgbHRfY3ZfZGxvcGVuX2xpYnM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBiZW9zKikKKyAgICBsdF9jdl9kbG9wZW49ImxvYWRfYWRkX29uIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworICAgIDs7CisKKyAgbWluZ3cqIHwgcHczMiopCisgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgIDs7CisKKyAgZGFyd2luKikKKyAgIyBpZiBsaWJkbCBpcyBpbnN0YWxsZWQgd2UgbmVlZCB0byBsaW5rIGFnYWluc3QgaXQKKyAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZGxfZGxvcGVuK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGwgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CitkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl9kbF9kbG9wZW49bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9kbF9kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgorZWxzZQorCisgICAgbHRfY3ZfZGxvcGVuPSJkeWxkIgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcworCitmaQorCisgICA7OworCisgICopCisgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKy8qIERlZmluZSBzaGxfbG9hZCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHNobF9sb2FkLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lIHNobF9sb2FkIGlubm9jdW91c19zaGxfbG9hZAorCisvKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCisgICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBzaGxfbG9hZCAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiBzaGxfbG9hZAorCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCit7CisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIHNobF9sb2FkICgpOworLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cworICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCisgICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCisjaWYgZGVmaW5lZCAoX19zdHViX3NobF9sb2FkKSB8fCBkZWZpbmVkIChfX3N0dWJfX19zaGxfbG9hZCkKK2Nob2tlIG1lCisjZWxzZQorY2hhciAoKmYpICgpID0gc2hsX2xvYWQ7CisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGYgIT0gc2hsX2xvYWQ7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2Z1bmNfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3NobF9sb2FkIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2Z1bmNfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsZF9zaGxfbG9hZCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsZCAgJExJQlMiCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBzaGxfbG9hZCAoKTsKK2ludAorbWFpbiAoKQoreworc2hsX2xvYWQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X2xpYl9kbGRfc2hsX2xvYWQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjYKK2lmIHRlc3QgJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQgPSB5ZXM7IHRoZW4KKyAgbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1kbGQiCitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfZnVuY19kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgZGxvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZGxvcGVuLgorICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCisjZGVmaW5lIGRsb3BlbiBpbm5vY3VvdXNfZGxvcGVuCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbiAoKTsgYmVsb3cuCisgICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQorICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCisKKyNpZmRlZiBfX1NURENfXworIyBpbmNsdWRlIDxsaW1pdHMuaD4KKyNlbHNlCisjIGluY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmCisKKyN1bmRlZiBkbG9wZW4KKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciBkbG9wZW4gKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIChfX3N0dWJfZGxvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19kbG9wZW4pCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9IGRsb3BlbjsKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworaW50CittYWluICgpCit7CityZXR1cm4gZiAhPSBkbG9wZW47CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2Z1bmNfZGxvcGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9mdW5jX2Rsb3Blbj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2Rsb3BlbiIgPiY2CitpZiB0ZXN0ICRhY19jdl9mdW5jX2Rsb3BlbiA9IHllczsgdGhlbgorICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbGRsICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsb3BlbiAoKTsKK2ludAorbWFpbiAoKQoreworZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9saWJfZGxfZGxvcGVuPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl9saWJfZGxfZGxvcGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2CitpZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHN2bGQgICRMSUJTIgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CitkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X2xpYl9zdmxkX2Rsb3Blbj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbGliX3N2bGRfZGxvcGVuPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCisgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9saWJfZGxkX2RsZF9saW5rK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sZGxkICAkTElCUyIKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKKy8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCitjaGFyIGRsZF9saW5rICgpOworaW50CittYWluICgpCit7CitkbGRfbGluayAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfbGliX2RsZF9kbGRfbGluaz15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfbGliX2RsZF9kbGRfbGluaz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNgoraWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayA9IHllczsgdGhlbgorICBsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWRsZCIKK2ZpCisKKworZmkKKworCitmaQorCisKK2ZpCisKKworZmkKKworCitmaQorCisgICAgOzsKKyAgZXNhYworCisgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuIiAhPSB4bm87IHRoZW4KKyAgICBlbmFibGVfZGxvcGVuPXllcworICBlbHNlCisgICAgZW5hYmxlX2Rsb3Blbj1ubworICBmaQorCisgIGNhc2UgJGx0X2N2X2Rsb3BlbiBpbgorICBkbG9wZW4pCisgICAgc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RsZmNuX2giID0geHllcyAmJiBDUFBGTEFHUz0iJENQUEZMQUdTIC1ESEFWRV9ETEZDTl9IIgorCisgICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bCBldmFsIExERkxBR1M9XCJcJExERkxBR1MgJGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY1wiCisKKyAgICBzYXZlX0xJQlM9IiRMSUJTIgorICAgIExJQlM9IiRsdF9jdl9kbG9wZW5fbGlicyAkTElCUyIKKworICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9kbG9wZW5fc2VsZitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICAJICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CisgIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgOTk3OCAiY29uZmlndXJlIgorI2luY2x1ZGUgImNvbmZkZWZzLmgiCisKKyNpZiBIQVZFX0RMRkNOX0gKKyNpbmNsdWRlIDxkbGZjbi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZkZWYgUlRMRF9HTE9CQUwKKyMgIGRlZmluZSBMVF9ETEdMT0JBTAkJUlRMRF9HTE9CQUwKKyNlbHNlCisjICBpZmRlZiBETF9HTE9CQUwKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQlETF9HTE9CQUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExUX0RMR0xPQkFMCQkwCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFdlIG1heSBoYXZlIHRvIGRlZmluZSBMVF9ETExBWllfT1JfTk9XIGluIHRoZSBjb21tYW5kIGxpbmUgaWYgd2UKKyAgIGZpbmQgb3V0IGl0IGRvZXMgbm90IHdvcmsgaW4gc29tZSBwbGF0Zm9ybS4gKi8KKyNpZm5kZWYgTFRfRExMQVpZX09SX05PVworIyAgaWZkZWYgUlRMRF9MQVpZCisjICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlSVExEX0xBWlkKKyMgIGVsc2UKKyMgICAgaWZkZWYgRExfTEFaWQorIyAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCQlETF9MQVpZCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBSVExEX05PVworIyAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJUlRMRF9OT1cKKyMgICAgICBlbHNlCisjICAgICAgICBpZmRlZiBETF9OT1cKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJRExfTk9XCisjICAgICAgICBlbHNlCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCTAKKyMgICAgICAgIGVuZGlmCisjICAgICAgZW5kaWYKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKyNlbmRpZgorCit2b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgbWFpbiAoKQoreworICB2b2lkICpzZWxmID0gZGxvcGVuICgwLCBMVF9ETEdMT0JBTHxMVF9ETExBWllfT1JfTk9XKTsKKyAgaW50IHN0YXR1cyA9ICRsdF9kbHVua25vd247CisKKyAgaWYgKHNlbGYpCisgICAgeworICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7CisgICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgICBleGl0IChzdGF0dXMpOworfQorRU9GCisgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzIDs7CisgICAgICB4JGx0X2RsbmVlZF91c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmPW5vIDs7CisgICAgZXNhYworICBlbHNlIDoKKyAgICAjIGNvbXBpbGF0aW9uIGZhaWxlZAorICAgIGx0X2N2X2Rsb3Blbl9zZWxmPW5vCisgIGZpCitmaQorcm0gLWZyIGNvbmZ0ZXN0KgorCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfZGxvcGVuX3NlbGYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjYKKworICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgorICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCisgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgorI2xpbmUgMTAwNzggImNvbmZpZ3VyZSIKKyNpbmNsdWRlICJjb25mZGVmcy5oIgorCisjaWYgSEFWRV9ETEZDTl9ICisjaW5jbHVkZSA8ZGxmY24uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFJUTERfR0xPQkFMCisjICBkZWZpbmUgTFRfRExHTE9CQUwJCVJUTERfR0xPQkFMCisjZWxzZQorIyAgaWZkZWYgRExfR0xPQkFMCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJRExfR0xPQkFMCisjICBlbHNlCisjICAgIGRlZmluZSBMVF9ETEdMT0JBTAkJMAorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXZSBtYXkgaGF2ZSB0byBkZWZpbmUgTFRfRExMQVpZX09SX05PVyBpbiB0aGUgY29tbWFuZCBsaW5lIGlmIHdlCisgICBmaW5kIG91dCBpdCBkb2VzIG5vdCB3b3JrIGluIHNvbWUgcGxhdGZvcm0uICovCisjaWZuZGVmIExUX0RMTEFaWV9PUl9OT1cKKyMgIGlmZGVmIFJUTERfTEFaWQorIyAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJUlRMRF9MQVpZCisjICBlbHNlCisjICAgIGlmZGVmIERMX0xBWlkKKyMgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkJRExfTEFaWQorIyAgICBlbHNlCisjICAgICAgaWZkZWYgUlRMRF9OT1cKKyMgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCVJUTERfTk9XCisjICAgICAgZWxzZQorIyAgICAgICAgaWZkZWYgRExfTk9XCisjICAgICAgICAgIGRlZmluZSBMVF9ETExBWllfT1JfTk9XCURMX05PVworIyAgICAgICAgZWxzZQorIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwkwCisjICAgICAgICBlbmRpZgorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisjZW5kaWYKKwordm9pZCBmbm9yZCgpIHsgaW50IGk9NDI7fQoraW50IG1haW4gKCkKK3sKKyAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CisgIGludCBzdGF0dXMgPSAkbHRfZGx1bmtub3duOworCisgIGlmIChzZWxmKQorICAgIHsKKyAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOworICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIC8qIGRsY2xvc2UgKHNlbGYpOyAqLworICAgIH0KKyAgZWxzZQorICAgIHB1dHMgKGRsZXJyb3IgKCkpOworCisgICAgZXhpdCAoc3RhdHVzKTsKK30KK0VPRgorICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAgICguL2NvbmZ0ZXN0OyBleGl0OyApID4mNSAyPi9kZXYvbnVsbAorICAgIGx0X3N0YXR1cz0kPworICAgIGNhc2UgeCRsdF9zdGF0dXMgaW4KKyAgICAgIHgkbHRfZGxub191c2NvcmUpIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz15ZXMgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcyA7OworICAgICAgeCRsdF9kbHVua25vd258eCopIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYz1ubyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICBsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWM9bm8KKyAgZmkKK2ZpCitybSAtZnIgY29uZnRlc3QqCisKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2CisgICAgZmkKKworICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKKyAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorICAgIExJQlM9IiRzYXZlX0xJQlMiCisgICAgOzsKKyAgZXNhYworCisgIGNhc2UgJGx0X2N2X2Rsb3Blbl9zZWxmIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmPSRsdF9jdl9kbG9wZW5fc2VsZiA7OworICAqKSBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93biA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIGluCisgIHllc3xubykgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz0kbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93biA7OworICBlc2FjCitmaQorCisKKyMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKK3Rlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgIGZpCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKyAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBmaQorICAgIDs7Citlc2FjCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1CitlY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KK3Rlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNgorCisjIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCisgICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICBmaQorICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCisgICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQorICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCisgIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKKyAgICBTRUQgU0hFTEwgU1RSSVAgXAorICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCisgICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCisgICAgY29tcGlsZXIgXAorICAgIENDIFwKKyAgICBMRCBcCisgICAgbHRfcHJvZ19jb21waWxlcl93bCBcCisgICAgbHRfcHJvZ19jb21waWxlcl9waWMgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKKyAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWMgXAorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKKyAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIFwKKyAgICBvbGRfYXJjaGl2ZV9jbWRzIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKKyAgICBwcmVkZXBfb2JqZWN0cyBcCisgICAgcG9zdGRlcF9vYmplY3RzIFwKKyAgICBwcmVkZXBzIFwKKyAgICBwb3N0ZGVwcyBcCisgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKKyAgICBhcmNoaXZlX2NtZHMgXAorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgXAorICAgIHBvc3R1bmluc3RhbGxfY21kcyBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnIFwKKyAgICBub191bmRlZmluZWRfZmxhZyBcCisgICAgZXhwb3J0X3N5bWJvbHNfY21kcyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCBcCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCisgICAgaGFyZGNvZGVfYXV0b21hdGljIFwKKyAgICBtb2R1bGVfY21kcyBcCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzIFwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyBcCisgICAgZXhjbHVkZV9leHBzeW1zIFwKKyAgICBpbmNsdWRlX2V4cHN5bXM7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICBvbGRfYXJjaGl2ZV9jbWRzIHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgfCBcCisgICAgYXJjaGl2ZV9jbWRzIHwgXAorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHMgfCBcCisgICAgbW9kdWxlX2NtZHMgfCBcCisgICAgbW9kdWxlX2V4cHN5bV9jbWRzIHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIHwgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHMgfCBcCisgICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAorICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQorICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgY2FzZSAkbHRfZWNobyBpbgorICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKKyAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCisgICAgOzsKKyAgZXNhYworCitjZmdmaWxlPSIke29maWxlfVQiCisgIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICRybSAtZiAiJGNmZ2ZpbGUiCisgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRvZmlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGNyZWF0aW5nICRvZmlsZSIgPiY2O30KKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKKyMhICRTSEVMTAorCisjIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCisjIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMQorIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMKKyMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6CisjIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2CisjCisjIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisjIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91CisjIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQorIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgorIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisKKyMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KK1NFRD0kbHRfU0VECisKKyMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKKyMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgorYXZhaWxhYmxlX3RhZ3M9CisKKyMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCisKKyMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKKworIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgorU0hFTEw9JGx0X1NIRUxMCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCitidWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYworYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorZWNobz0kbHRfZWNobworCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfTFRDQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfTFRDRkxBR1MKKworIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyCisKKyMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kbHRfU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSIkYWNfb2JqZXh0IgorCisjIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KK2xpYmV4dD0iJGxpYmV4dCIKKworIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KK3NocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCisKKyMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgorZXhlZXh0PSIkZXhlZXh0IgorCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYworCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KK3RocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjCisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcworcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCittb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHMKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBzPSRsdF9wcmVkZXBzCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwcworCisjIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCisjIGEgc2hhcmVkIGxpYnJhcnkuCitjb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAorCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKworIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCisKKyMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgorZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KK2ZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAorCisjIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCitnbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCitnbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCitoYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgorCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCisjIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKKyMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0CisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KKyMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5CisjIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisKKyMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCitmaXhfc3JjZmlsZV9wYXRoPSIkZml4X3NyY2ZpbGVfcGF0aCIKKworIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHMKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kcworCisjIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitleHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKKworIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgorZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXMKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltcworCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX19FT0ZfXworCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKKworIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK0VPRgorICAgIDs7CisgIGVzYWMKKworICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKKyAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgorICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQorICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPworICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCisKK2Vsc2UKKyAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQorICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKKyAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgorICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKKyAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KKyAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCisgIGZpCitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworQ0M9IiRsdF9zYXZlX0NDIgorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGFncyBvciAtLXdpdGhvdXQtdGFncyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfdGFncytzZXR9IiA9IHNldDsgdGhlbgorICB3aXRodmFsPSIkd2l0aF90YWdzIgorICB0YWduYW1lcz0iJHdpdGh2YWwiCitmaTsKKworaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgorICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IG91dHB1dCBmaWxlIFxgJG9maWxlJyBkb2VzIG5vdCBleGlzdCIgPiYyO30KKyAgZmkKKworICBpZiB0ZXN0IC16ICIkTFRDQyI7IHRoZW4KKyAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0M9J2AiCisgICAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCisgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgbG9vayBsaWtlIGEgbGlidG9vbCBzY3JpcHQiID4mMjt9CisgICAgZWxzZQorICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgXGBMVENDPSRMVENDJywgZXh0cmFjdGVkIGZyb20gXGAkb2ZpbGUnIiA+JjI7fQorICAgIGZpCisgIGZpCisgIGlmIHRlc3QgLXogIiRMVENGTEFHUyI7IHRoZW4KKyAgICBldmFsICJgJFNIRUxMICR7b2ZpbGV9IC0tY29uZmlnIHwgZ3JlcCAnXkxUQ0ZMQUdTPSdgIgorICBmaQorCisgICMgRXh0cmFjdCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgaW4gJG9maWxlLgorICAjIE5vdGUgdGhhdCB0aGlzIGFzc3VtZXMgdGhlIGVudGlyZSBsaXN0IGlzIG9uIG9uZSBsaW5lLgorICBhdmFpbGFibGVfdGFncz1gZ3JlcCAiXmF2YWlsYWJsZV90YWdzPSIgIiR7b2ZpbGV9IiB8ICRTRUQgLWUgJ3MvYXZhaWxhYmxlX3RhZ3M9XCguKiRcKS9cMS8nIC1lICdzL1wiLy9nJ2AKKworICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgZm9yIHRhZ25hbWUgaW4gJHRhZ25hbWVzOyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICMgQ2hlY2sgd2hldGhlciB0YWduYW1lIGNvbnRhaW5zIG9ubHkgdmFsaWQgY2hhcmFjdGVycworICAgIGNhc2UgYCRlY2hvICJYJHRhZ25hbWUiIHwgJFhzZWQgLWUgJ3M6Wy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL106OmcnYCBpbgorICAgICIiKSA7OworICAgICopICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCTs7CisgICAgZXNhYworCisgICAgaWYgZ3JlcCAiXiMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUkIiA8ICIke29maWxlfSIgPiAvZGV2L251bGwKKyAgICB0aGVuCisgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB0YWcgbmFtZSBcIiR0YWduYW1lXCIgYWxyZWFkeSBleGlzdHMiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgZmkKKworICAgICMgVXBkYXRlIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgorICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIjsgdGhlbgorICAgICAgZWNobyBhcHBlbmRpbmcgY29uZmlndXJhdGlvbiB0YWcgXCIkdGFnbmFtZVwiIHRvICRvZmlsZQorCisgICAgICBjYXNlICR0YWduYW1lIGluCisgICAgICBDWFgpCisJaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKKwkgICAgKCAodGVzdCAiWCRDWFgiID0gIlhnKysiICYmIGBnKysgLXYgPi9kZXYvbnVsbCAyPiYxYCApIHx8CisJICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorCSAgYWNfZXh0PWNjCithY19jcHA9JyRDWFhDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENYWCAtYyAkQ1hYRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENYWCAtbyBjb25mdGVzdCRhY19leGVleHQgJENYWEZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudQorCisKKworCithcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KK2FsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0KK2Fsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KK2FyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPQorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0KK2hhcmRjb2RlX2RpcmVjdF9DWFg9bm8KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPQoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFg9CitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KK2hhcmRjb2RlX21pbnVzX0xfQ1hYPW5vCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAoraGFyZGNvZGVfYXV0b21hdGljX0NYWD1ubworbW9kdWxlX2NtZHNfQ1hYPQorbW9kdWxlX2V4cHN5bV9jbWRzX0NYWD0KK2xpbmtfYWxsX2RlcGxpYnNfQ1hYPXVua25vd24KK29sZF9hcmNoaXZlX2NtZHNfQ1hYPSRvbGRfYXJjaGl2ZV9jbWRzCitub191bmRlZmluZWRfZmxhZ19DWFg9Cit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9CitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD1ubworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorcHJlZGVwX29iamVjdHNfQ1hYPQorcG9zdGRlcF9vYmplY3RzX0NYWD0KK3ByZWRlcHNfQ1hYPQorcG9zdGRlcHNfQ1hYPQorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWD0KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dF9DWFg9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7XG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9XG4nCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0kQ0MKK2x0X3NhdmVfTEQ9JExECitsdF9zYXZlX0dDQz0kR0NDCitHQ0M9JEdYWAorbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKK2x0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAoraWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgorICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKK2Vsc2UKKyAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCitmaQoraWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCisgIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKK2Vsc2UKKyAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKK2ZpCit0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorQ0M9JHtDWFgtImMrKyJ9Citjb21waWxlcj0kQ0MKK2NvbXBpbGVyX0NYWD0kQ0MKK2ZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKKyMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKK2lmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQorZmkKKworaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgorICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKK2Vsc2UKKyAgd2l0aF9nbnVfbGQ9bm8KK2ZpOworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2CisgIGNhc2UgJGhvc3QgaW4KKyAgKi0qLW1pbmd3KikKKyAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OworICAqKQorICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKKyAgZXNhYworICBjYXNlICRhY19wcm9nIGluCisgICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCisgICAgW1xcL10qIHwgPzpbXFwvXSopCisgICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCisgICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKKyAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAorICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCisJYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNgorZWxzZQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjYKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmkKK2ZpCisKK0xEPSIkbHRfY3ZfcGF0aF9MRCIKK2lmIHRlc3QgLW4gIiRMRCI7IHRoZW4KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRMRCIgPiY2CitlbHNlCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKK2VjaG8gIiR7RUNIT19UfW5vIiA+JjYKK2ZpCit0ZXN0IC16ICIkTEQiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2Cit3aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKKworCisKKyAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgorICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKKwlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KKyAgICBmaQorICBlbHNlCisgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICB3bGFyYz0KKworICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCisgICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKKyAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgorICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCisgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICBmaQorCisgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJworCitlbHNlCisgIEdYWD1ubworICB3aXRoX2dudV9sZD1ubworICB3bGFyYz0KK2ZpCisKKyMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CitsZF9zaGxpYnNfQ1hYPXllcworY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgOzsKKyAgYWl4NCogfCBhaXg1KikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICAgIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPW5vCisgICAgICBleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgIGVsc2UKKyAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAjIEFJWCBzdHlsZSBsaW5raW5nLiBJZiAtYnJ0bCBpcyBzb21ld2hlcmUgaW4gTERGTEFHUywgd2UKKyAgICAgICMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzIzXXxhaXg0LlsyM10uKnxhaXg1KikKKwlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKwkgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICotYnJ0bCopCisJICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCisJICAgIGJyZWFrCisJICAgIDs7CisJICBlc2FjCisJZG9uZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgZmkKKworICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICBhcmNoaXZlX2NtZHNfQ1hYPScnCisgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKKyAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKKworICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKKwljb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwl0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisJZWxzZQorCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgaGFyZGNvZGVfZGlyZWN0X0NYWD11bnN1cHBvcnRlZAorCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAorCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZworCSAgaGFyZGNvZGVfbWludXNfTF9DWFg9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9CisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgIyBub3QgdXNpbmcgZ2NjCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwlzaGFyZWRfZmxhZz0nLUcnCisgICAgICBlbHNlCisJaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwllbHNlCisJICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJworCWZpCisgICAgICBmaQorICAgIGZpCisKKyAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKKyAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9eWVzCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKyAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nLWJlcm9rJworICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYDsgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisKKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICBlbHNlCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwlhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ii16IG5vZGVmcyIKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgIGVsc2UKKwkjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKwljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYDsgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCW5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm5vdG9rJworCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWJlcm9rJworCSMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJGNvbnZlbmllbmNlJworCWFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKwkjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICBmaQorICAgIGZpCisgICAgOzsKKworICBiZW9zKikKKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorICAgICAgIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworICAgICAgIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1ub3N0YXJ0ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworICAgIGVsc2UKKyAgICAgIGxkX3NobGlic19DWFg9bm8KKyAgICBmaQorICAgIDs7CisKKyAgY2hvcnVzKikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKworICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsIENYWCkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLUwkbGliZGlyJworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD11bnN1cHBvcnRlZAorICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFg9bm8KKyAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0NYWD15ZXMKKworICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKyAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKyAgICAgIGVsc2UKKwllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworICAgICAgZml+CisgICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgZWxzZQorICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIGZpCisgIDs7CisgICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMl0pCisgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgOzsKKyAgICAgICAqKSAjIERhcndpbiAxLjMgb24KKyAgICAgICAgIGlmIHRlc3QgLXogJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IDsgdGhlbgorICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgZWxzZQorICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgorICAgICAgICAgICAgIDEwLlswMTJdKQorICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAgMTAuKikKKyAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICBlc2FjCisgICAgICAgICBmaQorICAgICAgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJworICAgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllcyA7IHRoZW4KKyAgICAgIGx0X2ludF9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgIGlmICRDQyAtZHVtcHNwZWNzIDI+JjEgfCAkRUdSRVAgJ3NpbmdsZV9tb2R1bGUnID4vZGV2L251bGwgOyB0aGVuCisgICAgICAgbHRfaW50X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgorICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtZHluYW1pY2xpYiAtc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgZWxzZQorICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmcnCisgICAgICAgIGZpCisgICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICAgICAgaWYgdGVzdCAiWCRsdF9pbnRfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSBYeWVzIDsgdGhlbgorICAgICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliIC1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vICR7bGlifS1tYXN0ZXIubyAkbGlib2Jqc34kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJHtsaWJ9LW1hc3Rlci5vICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIGZpCisgICAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBlbHNlCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICB4bGMqKQorICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR2ZXJzdHJpbmcnCisgICAgICAgICAgbW9kdWxlX2NtZHNfQ1hYPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFg9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICAgIDs7CisKKyAgZGd1eCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGVjKysqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgZ2hjeCopCisJIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgZXNhYworICAgIDs7CisgIGZyZWVic2RbMTJdKikKKyAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIHJlcG9ydGVkIHRvIGJlIGZhaXJseSBicm9rZW4gYmVmb3JlIHN3aXRjaCB0byBFTEYKKyAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgOzsKKyAgZnJlZWJzZC1lbGYqKQorICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubworICAgIDs7CisgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKKyAgICAjIGNvbnZlbnRpb25zCisgICAgbGRfc2hsaWJzX0NYWD15ZXMKKyAgICA7OworICBnbnUqKQorICAgIDs7CisgIGhwdXg5KikKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAorCQkJCSMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgQ0MqKQorICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgICA7OworICAgIGFDQyopCisgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKKyAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKyAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisgICAgICAjCisgICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisgICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorICAgICAgIyBkZXBlbmRlbmNpZXMuCisgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiWy1dTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgbGRfc2hsaWJzX0NYWD1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgIGhwdXgxMCp8aHB1eDExKikKKyAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0NYWD0nK2IgJGxpYmRpcicKKyAgICAgICAgOzsKKyAgICAgICopCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgICAgOzsKKyAgICAqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJCSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJCSAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisgICAgICA7OworICAgIGVzYWMKKworICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICBhQ0MqKQorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisJICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgIGNhc2UgJGhvc3RfY3B1IGluCisJICAgIGhwcGEqNjQqKQorCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICA7OworCSAgICBpYTY0KikKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICA7OworCSAgICBlc2FjCisJICBmaQorCWVsc2UKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgaW50ZXJpeDMqKQorICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KKyAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCwkbGliZGlyJworICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCisgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKyAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKyAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgIDs7CisgIGlyaXg1KiB8IGlyaXg2KikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCSMgU0dJIEMrKworCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1hbGwgLW11bHRpZ290ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKworCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSMgaW4gdGhlIGFyY2hpdmUuCisJb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJOzsKKyAgICAgICopCisJaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgZWxzZQorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAtbyAkbGliJworCSAgZmkKKwlmaQorCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCTs7CisgICAgZXNhYworICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorICAgIDs7CisgIGxpbnV4KikKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgS0NDKikKKwkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCisJIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJYXJjaGl2ZV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbXigpMC05QS1aYS16e31dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzOyBtdiBcJHRlbXBsaWIgJGxpYicKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxIHwgZ3JlcCAibGQiYDsgcm0gLWYgbGliY29uZnRlc3Qkc2hhcmVkX2V4dDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCisKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKwk7OworICAgICAgaWNwYyopCisJIyBJbnRlbCBDKysKKwl3aXRoX2dudV9sZD15ZXMKKwkjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSMgaWYgd2UgYWRkICRwcmVkZXBfb2JqZWN0cyBhbmQgJHBvc3RkZXBfb2JqZWN0cywgaG93ZXZlciA3LjEgYW5kCisJIyBlYXJsaWVyIGRvIG5vdCBhZGQgdGhlIG9iamVjdHMgdGhlbXNlbHZlcy4KKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIlZlcnNpb24gNy4iKikKKyAgCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgIAkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgIDs7CisJKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgIHRtcF9pZHluPQorCSAgY2FzZSAkaG9zdF9jcHUgaW4KKwkgICAgaWE2NCopIHRtcF9pZHluPScgLWlfZHluYW1pYyc7OworCSAgZXNhYworICAJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJOzsKKyAgICAgIHBnQ0MqKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlcgorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworICAJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR7d2x9JGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisgICAgICAgIDs7CisgICAgICBjeHgqKQorCSMgQ29tcGFxIEMrKworCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgIC1vICRsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMnCisKKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiYDsgdGVtcGxpc3Q9YGVjaG8gJHRlbXBsaXN0IHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQgLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgZXNhYworICAgIDs7CisgIGx5bnhvcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgIG04OGsqKQorICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgIGxkX3NobGlic19DWFg9bm8KKyAgICA7OworICBtdnMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBjeHgqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgICAgKikKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgbmV0YnNkKikKKyAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckTEQgLUJzaGFyZWFibGUgIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubworICAgIGZpCisgICAgIyBXb3JrYXJvdW5kIHNvbWUgYnJva2VuIHByZS0xLjUgdG9vbGNoYWlucworICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworICAgIDs7CisgIG9wZW5ic2QyKikKKyAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBmaQorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgIDs7CisgIG9zZjMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBLQ0MqKQorCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwlhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgorCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKKworCTs7CisgICAgICBSQ0MqKQorCSMgUmF0aW9uYWwgQysrIDIuNC4xCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICBjeHgqKQorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJworCisJZWxzZQorCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICBsZF9zaGxpYnNfQ1hYPW5vCisJZmkKKwk7OworICAgIGVzYWMKKyAgICA7OworICBvc2Y0KiB8IG9zZjUqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBLQ0MqKQorCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKKworCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KKwlhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJIyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnCisJOzsKKyAgICAgIFJDQyopCisJIyBSYXRpb25hbCBDKysgMi40LjEKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICAgIGN4eCopCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgorCSAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAtV2wsLWlucHV0IC1XbCwkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uCSR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICRybSAkbGliLmV4cCcKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06CisKKwkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJIworCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQorCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkjIGRlcGVuZGVuY2llcy4KKwlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JworCTs7CisgICAgICAqKQorCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgorCisJICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKKworCWVsc2UKKwkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgbGRfc2hsaWJzX0NYWD1ubworCWZpCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgcHNvcyopCisgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisgICAgbGRfc2hsaWJzX0NYWD1ubworICAgIDs7CisgIHN1bm9zNCopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIENDKikKKwkjIFN1biBDKysgNC54CisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICBsY2MqKQorCSMgTHVjaWQKKwkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlsZF9zaGxpYnNfQ1hYPW5vCisJOzsKKyAgICAgICopCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgZXNhYworICAgIDs7CisgIHNvbGFyaXMqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBDQyopCisJIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKworICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCisJbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJworCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKKworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKwljYXNlICRob3N0X29zIGluCisJICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisJICAqKQorCSAgICAjIFRoZSBDKysgY29tcGlsZXIgaXMgdXNlZCBhcyBsaW5rZXIgc28gd2UgbXVzdCB1c2UgJHdsCisJICAgICMgZmxhZyB0byBwYXNzIHRoZSBjb21tYW5kcyB0byB0aGUgdW5kZXJseWluZyBzeXN0ZW0KKwkgICAgIyBsaW5rZXIuIFdlIG11c3QgYWxzbyBwYXNzIGVhY2ggY29udmllbmNlIGxpYnJhcnkgdGhyb3VnaAorCSAgICAjIHRvIHRoZSBzeXN0ZW0gbGlua2VyIGJldHdlZW4gYWxsZXh0cmFjdC9kZWZhdWx0ZXh0cmFjdC4KKwkgICAgIyBUaGUgQysrIGNvbXBpbGVyIHdpbGwgY29tYmluZSBsaW5rZXIgb3B0aW9ucyBzbyB3ZQorCSAgICAjIGNhbm5vdCBqdXN0IHBhc3MgdGhlIGNvbnZpZW5jZSBsaWJyYXJ5IG5hbWVzIHRocm91Z2gKKwkgICAgIyB3aXRob3V0ICR3bC4KKwkgICAgIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCisJICAgIDs7CisJZXNhYworCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcworCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisKKwkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKKwkjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkjIGluIHRoZSBhcmNoaXZlLgorCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICBnY3gqKQorCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJworCisJIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCisJb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCTs7CisgICAgICAqKQorCSMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKKwkgIGlmICRDQyAtLXZlcnNpb24gfCBncmVwIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisKKwkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KKwkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKKwkgIGVsc2UKKwkgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcworCSAgICAjIHBsYXRmb3JtLgorCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgorCSAgZmkKKworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJHdsJGxpYmRpcicKKwlmaQorCTs7CisgICAgZXNhYworICAgIDs7CisgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCisgICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCisgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICAgICopCisJYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJOzsKKyAgICBlc2FjCisgICAgOzsKKyAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KKyAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCisgICAgIyBhcyAteiBkZWZzLgorICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKKyAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisgICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KKyAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCisgICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCisgICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgorICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKKyAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgorICAgIG5vX3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teix0ZXh0JworICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nJHt3bH0teixub2RlZnMnCisgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9JzonCisgICAgbGlua19hbGxfZGVwbGlic19DWFg9eWVzCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tQmV4cG9ydCcKKyAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgQ0MqKQorCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwk7OworICAgICAgKikKKwlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCTs7CisgICAgZXNhYworICAgIDs7CisgIHRhbmRlbSopCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIE5DQyopCisJIyBOb25TdG9wLVVYIE5DQyAzLjIwCisJIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJbGRfc2hsaWJzX0NYWD1ubworCTs7CisgICAgICAqKQorCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCWxkX3NobGlic19DWFg9bm8KKwk7OworICAgIGVzYWMKKyAgICA7OworICB2eHdvcmtzKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgOzsKKyAgKikKKyAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICBsZF9zaGxpYnNfQ1hYPW5vCisgICAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjYKK3Rlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworR0NDX0NYWD0iJEdYWCIKK0xEX0NYWD0iJExEIgorCisKK2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKK2NsYXNzIEZvbworeworcHVibGljOgorICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KK3ByaXZhdGU6CisgIGludCBhOworfTsKK0VPRgorCitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgorICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCisgICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgorICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKKworICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbworICAgIGNhc2UgJHAgaW4KKworICAgIC1MKiB8IC1SKiB8IC1sKikKKyAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgorICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KKyAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCisJICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZWxzZQorCSBwcmV2PQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBjYXNlICRwIGluCisJIC1MKiB8IC1SKikKKwkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKKwkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKKwkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KKwkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgorCSAgIGVsc2UKKwkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCisJICAgZmkKKwkgICA7OworCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZworCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KKwkgZXNhYworICAgICAgIGVsc2UKKwkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgorCSBlbHNlCisJICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCisJIGZpCisgICAgICAgZmkKKyAgICAgICA7OworCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgorCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCisJIGVsc2UKKwkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KKwkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKKwkgZWxzZQorCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCitmaQorCiskcm0gLWYgY29uZmVzdC4kb2JqZXh0CisKKyMgUE9SVE1FOiBvdmVycmlkZSBhYm92ZSB0ZXN0IG9uIHN5c3RlbXMgd2hlcmUgaXQgaXMgYnJva2VuCitjYXNlICRob3N0X29zIGluCitpbnRlcml4MyopCisgICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KKyAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KKyAgcHJlZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwX29iamVjdHNfQ1hYPQorICBwb3N0ZGVwc19DWFg9CisgIDs7CisKK3NvbGFyaXMqKQorICBjYXNlICRjY19iYXNlbmFtZSBpbgorICBDQyopCisgICAgIyBBZGRpbmcgdGhpcyByZXF1aXJlcyBhIGtub3duLWdvb2Qgc2V0dXAgb2Ygc2hhcmVkIGxpYnJhcmllcyBmb3IKKyAgICAjIFN1biBjb21waWxlciB2ZXJzaW9ucyBiZWZvcmUgNS42LCBlbHNlIFBJQyBvYmplY3RzIGZyb20gYW4gb2xkCisgICAgIyBhcmNoaXZlIHdpbGwgYmUgbGlua2VkIGludG8gdGhlIG91dHB1dCwgbGVhZGluZyB0byBzdWJ0bGUgYnVncy4KKyAgICBwb3N0ZGVwc19DWFg9Jy1sQ3N0ZCAtbENydW4nCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworCisKK2Nhc2UgIiAkcG9zdGRlcHNfQ1hYICIgaW4KKyoiIC1sYyAiKikgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vIDs7Citlc2FjCisKK2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAkRUNIT19DIiA+JjYKKworICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCisgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworICAgIGFtaWdhb3MqKQorICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCisgICAgICA7OworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgb3MyKiB8IHB3MzIqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLURETExfRVhQT1JUJworICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgICAgOzsKKyAgICBpbnRlcml4MyopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCTs7CisgICAgICBlc2FjCisgICAgICA7OworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0KiB8IGFpeDUqKQorCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJZWxzZQorCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisJZmkKKwk7OworICAgICAgY2hvcnVzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCWN4Y2g2OCopCisJICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCBDWFgpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgIGRhcndpbiopCisgICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCisgICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICB4bGMqKQorICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1xbm9jb21tb24nCisgICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworICAgICAgICAgICA7OworICAgICAgICAgZXNhYworICAgICAgIDs7CisgICAgICBkZ3V4KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZWMrKyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIDs7CisJICBnaGN4KikKKwkgICAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy0tYmFja2VuZCAtV2wsJworCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKikKKwkgICAgIyBJbnRlbCBDKysKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKKwkgICAgOzsKKwkgIHBnQ0MqKQorCSAgICAjIFBvcnRsYW5kIEdyb3VwIEMrKyBjb21waWxlci4KKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZwaWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIEtDQyopCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKKwkgICAgOzsKKwkgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgOzsKKwkgIGN4eCopCisJICAgICMgRGlnaXRhbC9Db21wYXEgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJworCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCisJICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHBzb3MqKQorCTs7CisgICAgICBzb2xhcmlzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCisJICAgIDs7CisJICBnY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3Vub3M0KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKKwkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKKwkgICAgOzsKKwkgIGxjYyopCisJICAgICMgTHVjaWQKKwkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCisJICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICB2eHdvcmtzKikKKwk7OworICAgICAgKikKKwlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCisJOzsKKyAgICBlc2FjCisgIGZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2CisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCisgIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyNDE2OiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mNQorICAgZWNobyAiJGFzX21lOjEyNDIwOiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgorICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPiY2CisKK2lmIHRlc3QgeCIkbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA9IHh5ZXM7IHRoZW4KKyAgICBjYXNlICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggaW4KKyAgICAgIiIgfCAiICIqKSA7OworICAgICAqKSBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIiA7OworICAgICBlc2FjCitlbHNlCisgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQorICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCitmaQorCitmaQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9CisgICAgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9IiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggLURQSUMiCisgICAgOzsKK2VzYWMKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWFwiCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD1ubworICAgc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgIExERkxBR1M9IiRMREZMQUdTICRsdF90bXBfc3RhdGljX2ZsYWciCisgICBwcmludGYgIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgorICAgICAgIGlmIGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9eWVzCisgICAgICAgZmkKKyAgICAgZWxzZQorICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkcm0gY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjYKKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID0geHllczsgdGhlbgorICAgIDoKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9CitmaQorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWD1ubworICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKworICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCisgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCisgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEyNTIwOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTI1MjQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKKyAgIHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCisgICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JjUKKyAgICRybSBjb25mdGVzdCoKKyAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKKyAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAorICAgY2QgLi4KKyAgIHJtZGlyIGNvbmZ0ZXN0CisgICAkcm0gY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNgorCisKK2hhcmRfbGlua3M9Im5vdHRlc3RlZCIKK2lmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCisgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgorICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgorICBoYXJkX2xpbmtzPXllcworICAkcm0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2CisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9CisgICAgbmVlZF9sb2Nrcz13YXJuCisgIGZpCitlbHNlCisgIG5lZWRfbG9ja3M9bm8KK2ZpCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2CisKKyAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXg0KiB8IGFpeDUqKQorICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgorICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KKyAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJworICAgIGZpCisgICAgOzsKKyAgcHczMiopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9IiRsdGRsbF9jbWRzIgorICA7OworICBjeWd3aW4qIHwgbWluZ3cqKQorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU10gL3MvLiogXChbXiBdKlwpL1wxIERBVEEvOy9eLiogX19ubV9fL3MvXi4qIF9fbm1fX1woW14gXSpcKSBbXiBdKi9cMSBEQVRBLzsvXkkgL2Q7L15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisgIDs7CisgICopCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgOzsKKyAgZXNhYworCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0NYWCIgPiY2Cit0ZXN0ICIkbGRfc2hsaWJzX0NYWCIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfQ1hYIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9CisgICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4NCogfCBhaXg1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgICA7OworICAgIG1pbmd3KikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisgICMgQXBwbGUncyBnY2MgcHJpbnRzICdnY2MgLXByaW50LXNlYXJjaC1kaXJzJyBkb2Vzbid0IG9wZXJhdGUgdGhlIHNhbWUuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgdHIgIlxuIiAiJFBBVEhfU0VQQVJBVE9SIiB8IHNlZCAtZSAncy9saWJyYXJpZXM6L0BsaWJyYXJpZXM6LycgfCB0ciAiQCIgIlxuIiB8IGdyZXAgIl5saWJyYXJpZXM6IiB8IHNlZCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciIC1lICJzLCRQQVRIX1NFUEFSQVRPUiwgLGciIC1lICJzLC4qLCYgL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYixnImAKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYicKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKwora2ZyZWVic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZCopICMgZnJvbSA0LjYgb24KKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgIGhwcGEqNjQqKQorICAgICBzaHJleHRfY21kcz0nLnNsJworICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICAgOzsKKyAgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgZmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZworICBsaWJzdWZmPQorICBjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCp8czM5MHgqfHBvd2VycGM2NCopCisgICAgZWNobyAnI2xpbmUgMTMwNTYgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjY0LWJpdCopCisgICAgICAgIGxpYnN1ZmY9NjQKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgIDs7CisgIGVzYWMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK2tuZXRic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworbnRvLXFueCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CitlY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2CitoYXJkY29kZV9hY3Rpb25fQ1hYPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYIiB8fCBcCisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfQ1hYIiB8fCBcCisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19DWFgiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9DWFgiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIENYWCkiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0NYWCIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbl9DWFg9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbl9DWFg9dW5zdXBwb3J0ZWQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0NYWCIgPiY2CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fQ1hYIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisjIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCisgICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICBmaQorICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCisgICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQorICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCisgIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKKyAgICBTRUQgU0hFTEwgU1RSSVAgXAorICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCisgICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCisgICAgY29tcGlsZXJfQ1hYIFwKKyAgICBDQ19DWFggXAorICAgIExEX0NYWCBcCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFggXAorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCBcCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFggXAorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFggXAorICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFggXAorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWCBcCisgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFggXAorICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0NYWCBcCisgICAgcHJlZGVwX29iamVjdHNfQ1hYIFwKKyAgICBwb3N0ZGVwX29iamVjdHNfQ1hYIFwKKyAgICBwcmVkZXBzX0NYWCBcCisgICAgcG9zdGRlcHNfQ1hYIFwKKyAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYIFwKKyAgICBhcmNoaXZlX2NtZHNfQ1hYIFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCBcCisgICAgcG9zdGluc3RhbGxfY21kc19DWFggXAorICAgIHBvc3R1bmluc3RhbGxfY21kc19DWFggXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWCBcCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKKyAgICBub191bmRlZmluZWRfZmxhZ19DWFggXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFggXAorICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYIFwKKyAgICBoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIFwKKyAgICBtb2R1bGVfY21kc19DWFggXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggXAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWCBcCisgICAgZXhjbHVkZV9leHBzeW1zX0NYWCBcCisgICAgaW5jbHVkZV9leHBzeW1zX0NYWDsgZG8KKworICAgIGNhc2UgJHZhciBpbgorICAgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYIHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYIHwgXAorICAgIGFyY2hpdmVfY21kc19DWFggfCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggfCBcCisgICAgbW9kdWxlX2NtZHNfQ1hYIHwgXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19DWFggfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYIHwgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYIHwgXAorICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhc2UgJGx0X2VjaG8gaW4KKyAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCisgICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAgIDs7CisgIGVzYWMKKworY2ZnZmlsZT0iJG9maWxlIgorCisgIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorZWNobz0kbHRfZWNobworCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfTFRDQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfTFRDRkxBR1MKKworIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyX0NYWAorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0NYWAorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kbHRfU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWAorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJworCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0iJGV4ZWV4dCIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgKKworIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWAorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFgKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCit0aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19DWFgKKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0NYWAorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfQ1hYCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0NYWAorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19DWFgKK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0NYWAorbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfQ1hYCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0NYWAorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19DWFgKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcHM9JGx0X3ByZWRlcHNfQ1hYCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwc19DWFgKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfQ1hYCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19DWFgKKworIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0NYWAorCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fQ1hYCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFgKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCisjIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKKyMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9DWFgKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfQ1hYCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0NYWAorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFgKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19DWFgKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfQ1hYCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGhfQ1hYIgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19DWFgKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0NYWAorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0NYWAorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCitfX0VPRl9fCisKKworZWxzZQorICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCisgICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQorICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCisgIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAorICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgorICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKKyAgZmkKK2ZpCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0kbHRfc2F2ZV9DQworTERDWFg9JExECitMRD0kbHRfc2F2ZV9MRAorR0NDPSRsdF9zYXZlX0dDQword2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCit3aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAorbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECitsdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKK2x0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCisKKwllbHNlCisJICB0YWduYW1lPSIiCisJZmkKKwk7OworCisgICAgICBGNzcpCisJaWYgdGVzdCAtbiAiJEY3NyIgJiYgdGVzdCAiWCRGNzciICE9ICJYbm8iOyB0aGVuCisKK2FjX2V4dD1mCithY19jb21waWxlPSckRjc3IC1jICRGRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckRjc3IC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkRkZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9mNzdfY29tcGlsZXJfZ251CisKKworYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCithbGxvd191bmRlZmluZWRfZmxhZ19GNzc9CithbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PW5vCithcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9CitoYXJkY29kZV9kaXJlY3RfRjc3PW5vCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PQoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9CitoYXJkY29kZV9taW51c19MX0Y3Nz1ubworaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubworbW9kdWxlX2NtZHNfRjc3PQorbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0KK2xpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KK29sZF9hcmNoaXZlX2NtZHNfRjc3PSRvbGRfYXJjaGl2ZV9jbWRzCitub191bmRlZmluZWRfZmxhZ19GNzc9Cit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9CitlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dF9GNzc9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSIgICAgICBzdWJyb3V0aW5lIHRcbiAgICAgIHJldHVyblxuICAgICAgZW5kXG4iCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiAgICAgIHByb2dyYW0gdFxuICAgICAgZW5kXG4iCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorQ0M9JHtGNzctImY3NyJ9Citjb21waWxlcj0kQ0MKK2NvbXBpbGVyX0Y3Nz0kQ0MKK2ZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKK3Rlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCisgIGZpCisgIDs7CithaXg0KiB8IGFpeDUqKQorICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgZmkKKyAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc2hhcmVkIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfc2hhcmVkIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKyMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgordGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3N0YXRpYyIgPiY1CitlY2hvICIke0VDSE9fVH0kZW5hYmxlX3N0YXRpYyIgPiY2CisKK0dDQ19GNzc9IiRHNzciCitMRF9GNzc9IiRMRCIKKworbHRfcHJvZ19jb21waWxlcl93bF9GNzc9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLXFub2NvbW1vbicKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgaWNjKiB8IGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IiA+JjYKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyI7IHRoZW4KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgd29ya3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9bm8KKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQxMTE6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTQxMTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzc9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjYKKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9GNzc9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3XCIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID4mNgorCitpZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0KK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTQyMTU6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToxNDIxOTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzc9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPiY2CisKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2CisgIGhhcmRfbGlua3M9eWVzCisgICRybSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworICBydW5wYXRoX3Zhcj0KKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQorICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3Nz1ubworICBhcmNoaXZlX2NtZHNfRjc3PQorICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0KKyAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19GNzc9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3Nz0KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3PQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQorICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCisgIGhhcmRjb2RlX21pbnVzX0xfRjc3PW5vCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PXVuc3VwcG9ydGVkCisgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXVua25vd24KKyAgaGFyZGNvZGVfYXV0b21hdGljX0Y3Nz1ubworICBtb2R1bGVfY21kc19GNzc9CisgIG1vZHVsZV9leHBzeW1fY21kc19GNzc9CisgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KKyAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXNfRjc3PQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltc19GNzc9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCisgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIGxkX3NobGlic19GNzc9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIGVsc2UKKyAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnNfRjc3PW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKyoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisKKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisgICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAorICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCisgICAgICAjIHRoZW0uCisgICAgICBsZF9zaGxpYnNfRjc3PW5vCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfRjc3PW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBGNzcpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXSAvcy8uKiBcKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4MyopCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgbGludXgqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJdG1wX2FkZGZsYWc9CisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisJcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisJaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzX0Y3Nz1ubworCWNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitFT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlic19GNzc9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlic19GNzc9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworCSAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnNfRjc3PW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlic19GNzciID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9CisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCWhhcmRjb2RlX2RpcmVjdF9GNzc9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4NCogfCBhaXg1KikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAJICAgIGJyZWFrCisgIAkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBhcmNoaXZlX2NtZHNfRjc3PScnCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKwkgIGVsc2UKKyAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAJICBoYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCisgIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKyAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKyAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisgIAkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJworICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisgIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSctYmVyb2snCisgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICBwcm9ncmFtIG1haW4KKworICAgICAgZW5kCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKyAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKKyAgICAgICBlbHNlCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0iLXogbm9kZWZzIgorCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCisJZWxzZQorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KKwkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgICAgICBwcm9ncmFtIG1haW4KKworICAgICAgZW5kCitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKworYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2AKKyMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAnL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8geyAvXjAvIHsgcy9eMCAgKlwoLipcKSQvXDEvOyBwOyB9Cit9J2A7IGZpCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCisKKwkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tYmVybm90b2snCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJvaycKKwkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSckY29udmVuaWVuY2UnCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCisJICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgorCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKwlmaQorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCisgICAgICBsZF9zaGxpYnNfRjc3PW5vCisgICAgICA7OworCisgICAgYnNkaVs0NV0qKQorICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0tcmR5bmFtaWMKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZworICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKKyAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nICcKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKyAgICAgIGxpYmV4dD1saWIKKyAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKKyAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisgICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0ndHJ1ZScKKyAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCisgICAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0nbGliIC9PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworICAgICAgZml4X3NyY2ZpbGVfcGF0aF9GNzc9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJworICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9eWVzCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKKyAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICA7OworICAgICAgICopICMgRGFyd2luIDEuMyBvbgorICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCisgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICBlbHNlCisgICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCisgICAgICAgICAgICAgMTAuWzAxMl0pCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgICAxMC4qKQorICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKKyAgICAgICAgICAgICAgIDs7CisgICAgICAgICAgIGVzYWMKKyAgICAgICAgIGZpCisgICAgICAgICA7OworICAgICAgZXNhYworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCisgICAgICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9dW5zdXBwb3J0ZWQKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJworICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCisgICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZycKKyAgICAgIG1vZHVsZV9jbWRzX0Y3Nz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1keW5hbWljbGliICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lICRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgIGVsc2UKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgIHhsYyopCisgICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKKyAgICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHZlcnN0cmluZycKKyAgICAgICAgIG1vZHVsZV9jbWRzX0Y3Nz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCisgICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKKyAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICAgICAgOzsKKyAgICAgICAqKQorICAgICAgICAgbGRfc2hsaWJzX0Y3Nz1ubworICAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICAgIDs7CisKKyAgICBkZ3V4KikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgIGZyZWVic2QxKikKKyAgICAgIGxkX3NobGlic19GNzc9bm8KKyAgICAgIDs7CisKKyAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKKyAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KKyAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKKyAgICAjIGV4dHJhIHNwYWNlKS4KKyAgICBmcmVlYnNkMi4yKikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgorICAgIGZyZWVic2QyKikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KKyAgICBmcmVlYnNkKiB8IGtmcmVlYnNkKi1nbnUgfCBkcmFnb25mbHkqKQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgaHB1eDkqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgorCisJaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworCisJIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwloYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eDExKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisJY2FzZSAkaG9zdF9jcHUgaW4KKwlocHBhKjY0KikKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9JytiICRsaWJkaXInCisJICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCisJICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworCSAgOzsKKwkqKQorCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKwkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCisKKwkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKwkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PSctcnBhdGggJGxpYmRpcicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgorICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06CisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgIG9wZW5ic2QqKQorICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJworICAgICAgZWxzZQorICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKKwkgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisJICAgOzsKKwkgKikKKwkgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgOzsKKyAgICAgICBlc2FjCisgICAgICBmaQorICAgICAgOzsKKworICAgIG9zMiopCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICA7OworCisgICAgb3NmMyopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisgICAgICBlbHNlCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCisKKwkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5CisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC16IHRleHQnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZWxzZQorCXdsYXJjPScnCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OworICAgICAgKikKKyAJIyBUaGUgY29tcGlsZXIgZHJpdmVyIHdpbGwgY29tYmluZSBsaW5rZXIgb3B0aW9ucyBzbyB3ZQorIAkjIGNhbm5vdCBqdXN0IHBhc3MgdGhlIGNvbnZpZW5jZSBsaWJyYXJ5IG5hbWVzIHRocm91Z2gKKyAJIyB3aXRob3V0ICR3bCwgaWZmIHdlIGRvIG5vdCBsaW5rIHdpdGggJExELgorIAkjIEx1Y2tpbHksIGdjYyBzdXBwb3J0cyB0aGUgc2FtZSBzeW50YXggd2UgbmVlZCBmb3IgU3VuIFN0dWRpby4KKyAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKyAJY2FzZSAkd2xhcmMgaW4KKyAJJycpCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JyA7OworIAkqKQorIAkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3RgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JyA7OworIAllc2FjIDs7CisgICAgICBlc2FjCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIHJlbG9hZF9jbWRzX0Y3Nz0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCWhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlsZF9zaGxpYnNfRjc3PXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bMDFdLlsxMF0qIHwgdW5peHdhcmU3KikKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisgICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAorICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bworICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisgICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0CisgICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKKyAgICAgICMgYXMgLXogZGVmcy4KKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teix0ZXh0JworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS16LG5vZGVmcycKKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JworICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICB1dHM0KikKKyAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubworICAgICAgOzsKKworICAgICopCisgICAgICBsZF9zaGxpYnNfRjc3PW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19GNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19GNzciID4mNgordGVzdCAiJGxkX3NobGlic19GNzciID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCisjCisjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CisjCitjYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgaW4KK3h8eHllcykKKyAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAorICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCisKKyAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0Y3NyBpbgorICAgIConficqKQorICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgorICAgICAgOzsKKyAgICAnJENDICcqKQorICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQorICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCisgICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2CisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAgc29uYW1lPWNvbmZ0ZXN0CisgICAgICAgIGxpYj1jb25mdGVzdAorICAgICAgICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgICAgICAgZGVwbGlicz0KKyAgICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3CisJcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NworICAgICAgICBjb21waWxlcl9mbGFncz0tdgorICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKKyAgICAgICAgdmVyc3RyaW5nPQorICAgICAgICBvdXRwdXRfb2JqZGlyPS4KKyAgICAgICAgbGlibmFtZT1jb25mdGVzdAorICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZ19GNzcKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQorICAgICAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQorICAoZXZhbCAkYXJjaGl2ZV9jbWRzX0Y3NyAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9CisgICAgICAgIHRoZW4KKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubworICAgICAgICBlbHNlCisJICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCisgICAgICAgIGZpCisgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworICAgICAgZWxzZQorICAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKyAgICAgIGZpCisgICAgICAkcm0gY29uZnRlc3QqCisgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciID4mNgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2CitsaWJyYXJ5X25hbWVzX3NwZWM9CitsaWJuYW1lX3NwZWM9J2xpYiRuYW1lJworc29uYW1lX3NwZWM9CitzaHJleHRfY21kcz0iLnNvIgorcG9zdGluc3RhbGxfY21kcz0KK3Bvc3R1bmluc3RhbGxfY21kcz0KK2ZpbmlzaF9jbWRzPQorZmluaXNoX2V2YWw9CitzaGxpYnBhdGhfdmFyPQorc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KK3ZlcnNpb25fdHlwZT1ub25lCitkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKKyAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgIGZpCitlbHNlCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKK2ZpCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeDQqIHwgYWl4NSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBlbHNlCisgICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQorICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKKyAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCisgICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KKyAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKKyAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCisJICAgZWNobyAnIHllcyAnCisJICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAjIENyZWF0ZSAke2xpYm5hbWV9X2l4bGlicmFyeS5hIGVudHJpZXMgaW4gL3N5cy9saWJzLgorICBmaW5pc2hfZXZhbD0nZm9yIGxpYiBpbiBgbHMgJGxpYmRpci8qLml4bGlicmFyeSAyPi9kZXYvbnVsbGA7IGRvIGxpYm5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAnXCcncyVeLiovXChbXi9dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgOzsKKworYmVvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKKyAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKKyAgOzsKKworYnNkaVs0NV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGhvc3Rfb3MgaW4KKyAgeWVzLGN5Z3dpbiogfCB5ZXMsbWluZ3cqIHwgeWVzLHB3MzIqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuZGxsLmEnCisgICAgIyBETEwgaXMgaW5zdGFsbGVkIHRvICQobGliZGlyKS8uLi9iaW4gYnkgcG9zdGluc3RhbGxfY21kcworICAgIHBvc3RpbnN0YWxsX2NtZHM9J2Jhc2VfZmlsZT1gYmFzZW5hbWUgXCR7ZmlsZX1gfgorICAgICAgZGxwYXRoPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZGlyLydcJydcJHtiYXNlX2ZpbGV9J1wnJ2k7ZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lJworICAgIHBvc3R1bmluc3RhbGxfY21kcz0nZGxkbGw9YCRTSEVMTCAyPiYxIC1jICdcJycuICRmaWxlOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbHBhdGg9JGRpci9cJGRsZGxsfgorICAgICAgICRybSBcJGRscGF0aCcKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgY3lnd2luKikKKyAgICAgICMgQ3lnd2luIERMTHMgdXNlICdjeWcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgc29uYW1lX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9jeWcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiAvbGliL3czMmFwaSAvbGliIC91c3IvbG9jYWwvbGliIgorICAgICAgOzsKKyAgICBtaW5ndyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKKyAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAorICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCisgICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKKyAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAorICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgICAgIGVsc2UKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAorICAgICAgZmkKKyAgICAgIDs7CisgICAgcHczMiopCisgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisKKyAgKikKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICA7OworICBlc2FjCisgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgorICBzaGxpYnBhdGhfdmFyPVBBVEgKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCisgIHZlcnNpb25fdHlwZT1kYXJ3aW4KKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICAjIEFwcGxlJ3MgZ2NjIHByaW50cyAnZ2NjIC1wcmludC1zZWFyY2gtZGlycycgZG9lc24ndCBvcGVyYXRlIHRoZSBzYW1lLgorICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IHRyICJcbiIgIiRQQVRIX1NFUEFSQVRPUiIgfCBzZWQgLWUgJ3MvbGlicmFyaWVzOi9AbGlicmFyaWVzOi8nIHwgdHIgIkAiICJcbiIgfCBncmVwICJebGlicmFyaWVzOiIgfCBzZWQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnIiAtZSAicywkUEFUSF9TRVBBUkFUT1IsICxnIiAtZSAicywuKiwmIC9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIsZyJgCisgIGVsc2UKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWInCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xvY2FsL2xpYiAvbGliIC91c3IvbGliJworICA7OworCitkZ3V4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICA7OworCitmcmVlYnNkMSopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK2tmcmVlYnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK2ZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgIyBEcmFnb25GbHkgZG9lcyBub3QgaGF2ZSBhb3V0LiAgV2hlbi9pZiB0aGV5IGltcGxlbWVudCBhIG5ldworICAjIHZlcnNpb25pbmcgbWVjaGFuaXNtLCBhZGp1c3QgdGhpcy4KKyAgaWYgdGVzdCAteCAvdXNyL2Jpbi9vYmpmb3JtYXQ7IHRoZW4KKyAgICBvYmpmb3JtYXQ9YC91c3IvYmluL29iamZvcm1hdGAKKyAgZWxzZQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBmcmVlYnNkWzEyM10qKSBvYmpmb3JtYXQ9YW91dCA7OworICAgICopIG9iamZvcm1hdD1lbGYgOzsKKyAgICBlc2FjCisgIGZpCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLSRvYmpmb3JtYXQKKyAgY2FzZSAkdmVyc2lvbl90eXBlIGluCisgICAgZnJlZWJzZC1lbGYqKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBmcmVlYnNkLSopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgICAgIG5lZWRfdmVyc2lvbj15ZXMKKyAgICAgIDs7CisgIGVzYWMKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBmcmVlYnNkMiopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIDs7CisgIGZyZWVic2QzLlswMV0qIHwgZnJlZWJzZGVsZjMuWzAxXSopCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bMi05XSogfCBmcmVlYnNkZWxmMy5bMi05XSogfCBcCisgIGZyZWVic2Q0LlswLTVdIHwgZnJlZWJzZGVsZjQuWzAtNV0gfCBmcmVlYnNkNC4xLjEgfCBmcmVlYnNkZWxmNC4xLjEpCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QqKSAjIGZyb20gNC42IG9uCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bworICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgaWE2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbycKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCisgICAgZWxzZQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgorICAgIGZpCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICBocHBhKjY0KikKKyAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgIDs7CisgICAqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgOzsKKyAgZXNhYworICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgIDs7CisKK2ludGVyaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7CisgICAgKikKKwlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisJCXZlcnNpb25fdHlwZT1saW51eAorCWVsc2UKKwkJdmVyc2lvbl90eXBlPWlyaXgKKwlmaSA7OworICBlc2FjCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBjYXNlICRob3N0X29zIGluCisgIGlyaXg1KiB8IG5vbnN0b3B1eCopCisgICAgbGlic3VmZj0gc2hsaWJzdWZmPQorICAgIDs7CisgICopCisgICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAorICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCisgICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7CisgICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKKyAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OworICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQorICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKKyAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKKyAgICBlc2FjCisgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKKyMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KK2xpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KKyAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCisgICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKworICAjIGZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcKKyAgbGlic3VmZj0KKyAgY2FzZSAiJGhvc3RfY3B1IiBpbgorICB4ODZfNjQqfHMzOTB4Knxwb3dlcnBjNjQqKQorICAgIGVjaG8gJyNsaW5lIDE1NjYyICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICo2NC1iaXQqKQorICAgICAgICBsaWJzdWZmPTY0CisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIHJtIC1yZiBjb25mdGVzdCoKKyAgICA7OworICBlc2FjCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMiLCBcJDIpKTsgc2tpcCA9IDE7IH0geyBpZiAoIXNraXApIHByaW50IFwkMDsgc2tpcCA9IDA7IH0nIDwgL2V0Yy9sZC5zby5jb25mIHwgJFNFRCAtZSAncy8jLiovLztzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiR7bGlic3VmZn0gL3Vzci9saWIke2xpYnN1ZmZ9ICRsdF9sZF9leHRyYSIKKyAgZmkKKworICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KKyAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQorICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKKyAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKKyAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCisgICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgorICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJworICA7OworCitrbmV0YnNkKi1nbnUpCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdHTlUgbGQuc28nCisgIDs7CisKK25ldGJzZCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK250by1xbngqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgb3BlbmJzZDIuWzg5XSB8IG9wZW5ic2QyLls4OV0uKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKwk7OworICAgICAgKikKKwlzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisJOzsKKyAgICAgIGVzYWMKKyAgZWxzZQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgZmkKKyAgOzsKKworb3MyKikKKyAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fSAkbGlibmFtZS5hJworICBkeW5hbWljX2xpbmtlcj0nT1MvMiBsZC5leGUnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIHZlcnNpb25fdHlwZT1vc2YKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL3NobGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYi9jbXBscnMvY2MgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIgL3Zhci9zaGxpYiIKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJworICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKyAgICAgIDs7CisgICAgc2llbWVucykKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgOzsKKyAgICBtb3Rvcm9sYSkKKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCisgICAgICA7OworICBlc2FjCisgIDs7CisKK3N5c3Y0Kk1QKikKKyAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorICAgIHZlcnNpb25fdHlwZT1saW51eAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZmkKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzY28zLjJ2NSopCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgorCTs7CisgICAgZXNhYworICBmaQorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCisgIDs7CisKK3V0czQqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKKyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7Citlc2FjCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKK3Rlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgorZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgoraGFyZGNvZGVfYWN0aW9uX0Y3Nz0KK2lmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyIgfHwgXAorICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0Y3NyIgfHwgXAorICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfRjc3IiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfRjc3IiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBGNzcpIiAhPSBubyAmJgorICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9GNzciICE9IG5vOyB0aGVuCisgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KKyAgICBoYXJkY29kZV9hY3Rpb25fRjc3PXJlbGluaworICBlbHNlCisgICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KKyAgICBoYXJkY29kZV9hY3Rpb25fRjc3PWltbWVkaWF0ZQorICBmaQorZWxzZQorICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZworICAjIGRpcmVjdG9yaWVzLgorICBoYXJkY29kZV9hY3Rpb25fRjc3PXVuc3VwcG9ydGVkCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNQorZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9GNzciID4mNgorCitpZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPSByZWxpbms7IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KK2VsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKKyAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KKyAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5CisgIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKK2ZpCisKKworIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCisjIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAorIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCisjIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KK2lmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCisgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAorICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCisgIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCisgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgZmkKKyAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZworICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKKyAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgorICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCisgICAgU0VEIFNIRUxMIFNUUklQIFwKKyAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKKyAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAorICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAorICAgIGNvbXBpbGVyX0Y3NyBcCisgICAgQ0NfRjc3IFwKKyAgICBMRF9GNzcgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3IFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzcgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NyBcCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfRjc3IFwKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3IFwKKyAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3IFwKKyAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzcgXAorICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3IFwKKyAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19GNzcgXAorICAgIHByZWRlcF9vYmplY3RzX0Y3NyBcCisgICAgcG9zdGRlcF9vYmplY3RzX0Y3NyBcCisgICAgcHJlZGVwc19GNzcgXAorICAgIHBvc3RkZXBzX0Y3NyBcCisgICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NyBcCisgICAgYXJjaGl2ZV9jbWRzX0Y3NyBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzcgXAorICAgIHBvc3RpbnN0YWxsX2NtZHNfRjc3IFwKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHNfRjc3IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcgXAorICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NyBcCisgICAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcgXAorICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3IFwKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NyBcCisgICAgaGFyZGNvZGVfYXV0b21hdGljX0Y3NyBcCisgICAgbW9kdWxlX2NtZHNfRjc3IFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IFwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcgXAorICAgIGV4Y2x1ZGVfZXhwc3ltc19GNzcgXAorICAgIGluY2x1ZGVfZXhwc3ltc19GNzc7IGRvCisKKyAgICBjYXNlICR2YXIgaW4KKyAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyB8IFwKKyAgICBhcmNoaXZlX2NtZHNfRjc3IHwgXAorICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3IHwgXAorICAgIG1vZHVsZV9jbWRzX0Y3NyB8IFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyB8IFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCisgICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCisgICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICBjYXNlICRsdF9lY2hvIGluCisgIConXCQwIC0tZmFsbGJhY2stZWNobyInKQorICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgICA7OworICBlc2FjCisKK2NmZ2ZpbGU9IiRvZmlsZSIKKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3CisKKyMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYworYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3NworCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFRoZSBob3N0IHN5c3RlbS4KK2hvc3RfYWxpYXM9JGhvc3RfYWxpYXMKK2hvc3Q9JGhvc3QKK2hvc3Rfb3M9JGhvc3Rfb3MKKworIyBUaGUgYnVpbGQgc3lzdGVtLgorYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCitidWlsZD0kYnVpbGQKK2J1aWxkX29zPSRidWlsZF9vcworCisjIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KK2VjaG89JGx0X2VjaG8KKworIyBUaGUgYXJjaGl2ZXIuCitBUj0kbHRfQVIKK0FSX0ZMQUdTPSRsdF9BUl9GTEFHUworCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0xUQ0MKKworIyBMVENDIGNvbXBpbGVyIGZsYWdzLgorTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCisKKyMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KK0NDPSRsdF9jb21waWxlcl9GNzcKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19GNzcKKworIyBBbiBFUkUgbWF0Y2hlci4KK0VHUkVQPSRsdF9FR1JFUAorCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTERfRjc3CisKKyMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KK0xOX1M9JGx0X0xOX1MKKworIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCitOTT0kbHRfTk0KKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQorU1RSSVA9JGx0X1NUUklQCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgorRExMVE9PTD0iJERMTFRPT0wiCisKKyMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCitPQkpEVU1QPSIkT0JKRFVNUCIKKworIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgorQVM9IiRBUyIKKworIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCitvYmpkaXI9JG9iamRpcgorCisjIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCityZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKK3JlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9GNzcKKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9IiRhY19vYmpleHQiCisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9IiRleGVleHQiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0Y3NworcGljX21vZGU9JHBpY19tb2RlCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgorCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3CisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KK25lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4CisKKyMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KK25lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCisKKyMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgorZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KKworIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCisKKyMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCisKKyMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KK2xpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0Y3NworCisjIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCitleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3CisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgordGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3CisKKyMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCit2ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQorCisjIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgorbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKKworIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgorIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgorbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKKworIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KK3NvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCitSQU5MSUI9JGx0X1JBTkxJQgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19GNzcKK29sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcworCisjIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19GNzcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfRjc3Citwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19GNzcKK21vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19GNzcKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfRjc3CisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBzPSRsdF9wcmVkZXBzX0Y3NworCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwcz0kbHRfcG9zdGRlcHNfRjc3CisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0Y3NworCisjIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCisKKyMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCithbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3CisKKyMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19GNzcKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0Y3NworCisjIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCitoYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3CisKKyMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bworIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCisjIG5vdCBleGlzdC4KK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3CisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3NworCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0Y3NworCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9GNzcKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3CisKKyMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5CisjIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgoraGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfRjc3CisKKyMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCisjIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKKworIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCitsaW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0Y3NworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9IiRmaXhfc3JjZmlsZV9wYXRoX0Y3NyIKKworIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgorYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3CisKKyMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KK2V4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfRjc3CisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19GNzcKKworIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCitpbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19GNzcKKworIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworX19FT0ZfXworCisKK2Vsc2UKKyAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQorICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKKyAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgorICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKKyAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KKyAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCisgIGZpCitmaQorCisKK2FjX2V4dD1jCithY19jcHA9JyRDUFAgJENQUEZMQUdTJworYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JworYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKK2FjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKKworQ0M9IiRsdF9zYXZlX0NDIgorCisJZWxzZQorCSAgdGFnbmFtZT0iIgorCWZpCisJOzsKKworICAgICAgR0NKKQorCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgorCisKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWphdmEKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK29iamV4dF9HQ0o9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge31cbiIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikge307IH1cbicKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCisKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskcm0gY29uZnRlc3QqCisKK2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAorcHJpbnRmICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSIkQ0MiCitDQz0ke0dDSi0iZ2NqIn0KK2NvbXBpbGVyPSRDQworY29tcGlsZXJfR0NKPSRDQworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCithcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KKworb2xkX2FyY2hpdmVfY21kc19HQ0o9JG9sZF9hcmNoaXZlX2NtZHMKKworCitsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0nIC1mbm8tYnVpbHRpbicKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY0Mzc6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTY0NDE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucz15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkcm0gY29uZnRlc3QqCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjYKKworaWYgdGVzdCB4IiRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPSB4eWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCitlbHNlCisgICAgOgorZmkKKworZmkKKworbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9CitsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9CitsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgorCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKKyAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAorICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgOzsKKworICAgIGJlb3MqIHwgY3lnd2luKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBwdzMyKiB8IG9zMiopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctRERMTF9FWFBPUlQnCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaW50ZXJpeDMqKQorICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KKyAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgorICAgICAgOzsKKworICAgIG1zZG9zZGpncHAqKQorICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKKyAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPS1LY29uZm9ybV9waWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaHB1eCopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZWxzZQorCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworICAgICAgZmkKKyAgICAgIDs7CisgICAgICBkYXJ3aW4qKQorICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCisgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgeGxjKikKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLXFub2NvbW1vbicKKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgICAgOzsKKyAgICAgICBlc2FjCisgICAgICAgOzsKKworICAgIG1pbmd3KiB8IHB3MzIqIHwgb3MyKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1ERExMX0VYUE9SVCcKKyAgICAgIDs7CisKKyAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0CisgICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCp8aWE2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nK1onCisJOzsKKyAgICAgIGVzYWMKKyAgICAgICMgSXMgdGhlcmUgYSBiZXR0ZXIgbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgdGhhdCB3b3JrcyB3aXRoIHRoZSBidW5kbGVkIENDPworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKyAgICAgIDs7CisKKyAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICAjIFBJQyAod2l0aCAtS1BJQykgaXMgdGhlIGRlZmF1bHQuCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBsaW51eCopCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgaWNjKiB8IGVjYyopCisJbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisJbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCisgICAgICAgIDs7CisgICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKKyAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKKwkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQorCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLWZwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgIGNjYyopCisgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KKyAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJzs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJzs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctUW9wdGlvbiBsZCAnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1QSUMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJworICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgorCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtjb25mb3JtX3BpYycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJworICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICB1bmljb3MqKQorICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCisgICAgICA7OworCisgICAgdXRzNCopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1waWMnCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgICopCisgICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjYKKworIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIworaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiI7IHRoZW4KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIHdvcmtzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogd29ya3MuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSitzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9bm8KKyAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY3MDU6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6MTY3MDk6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCisgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCisgICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9eWVzCisgICAgIGZpCisgICBmaQorICAgJHJtIGNvbmZ0ZXN0KgorCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjYKKworaWYgdGVzdCB4IiRsdF9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID0geHllczsgdGhlbgorICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oiIDs7CisgICAgIGVzYWMKK2Vsc2UKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9CisgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KK2ZpCisKK2ZpCitjYXNlICRob3N0X29zIGluCisgICMgRm9yIHBsYXRmb3JtcyB3aGljaCBkbyBub3Qgc3VwcG9ydCBQSUMsIC1EUElDIGlzIG1lYW5pbmdsZXNzOgorICAqZGpncHAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKKyAgICA7OworZXNhYworCisjCisjIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgc3RhdGljIGZsYWcgYWN0dWFsbHkgd29ya3MuCisjCit3bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKXCIKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3JrcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPW5vCisgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgTERGTEFHUz0iJExERkxBR1MgJGx0X3RtcF9zdGF0aWNfZmxhZyIKKyAgIHByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KKyAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCisgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncworICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCisgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1CisgICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcworICAgICBmaQorICAgZmkKKyAgICRybSBjb25mdGVzdCoKKyAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID4mNgorCitpZiB0ZXN0IHgiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCisgICAgOgorZWxzZQorICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0KK2ZpCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPW5vCisgICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKKyAgIG1rZGlyIGNvbmZ0ZXN0CisgICBjZCBjb25mdGVzdAorICAgbWtkaXIgb3V0CisgICBwcmludGYgIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKKyAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTY4MDk6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JjUKKyAgIGVjaG8gIiRhc19tZToxNjgxMzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0o9eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJHJtIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkcm0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkcm0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgcm1kaXIgY29uZnRlc3QKKyAgICRybSBjb25mdGVzdCoKKworZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID4mNQorZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPiY2CisKKworaGFyZF9saW5rcz0ibm90dGVzdGVkIgoraWYgdGVzdCAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiIgPSBubyAmJiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KKyAgIyBkbyBub3Qgb3ZlcndyaXRlIHRoZSB2YWx1ZSBvZiBuZWVkX2xvY2tzIHByb3ZpZGVkIGJ5IHRoZSB1c2VyCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gJEVDSE9fQyIgPiY2CisgIGhhcmRfbGlua3M9eWVzCisgICRybSBjb25mdGVzdCoKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KKyAgdG91Y2ggY29uZnRlc3QuYQorICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRoYXJkX2xpbmtzIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRoYXJkX2xpbmtzIiA+JjYKKyAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiYyO30KKyAgICBuZWVkX2xvY2tzPXdhcm4KKyAgZmkKK2Vsc2UKKyAgbmVlZF9sb2Nrcz1ubworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKKworICBydW5wYXRoX3Zhcj0KKyAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPQorICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj1ubworICBhcmNoaXZlX2NtZHNfR0NKPQorICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0KKyAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9CisgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSj0KKyAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQorICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKPQorICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0KKyAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9CisgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPQorICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCisgIGhhcmRjb2RlX21pbnVzX0xfR0NKPW5vCisgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPXVuc3VwcG9ydGVkCisgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXVua25vd24KKyAgaGFyZGNvZGVfYXV0b21hdGljX0dDSj1ubworICBtb2R1bGVfY21kc19HQ0o9CisgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9CisgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KKyAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgorICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAorICBpbmNsdWRlX2V4cHN5bXNfR0NKPQorICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQorICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCisgICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKKyAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCisgIGV4Y2x1ZGVfZXhwc3ltc19HQ0o9Il9HTE9CQUxfT0ZGU0VUX1RBQkxFXyIKKyAgIyBBbHRob3VnaCBfR0xPQkFMX09GRlNFVF9UQUJMRV8gaXMgYSB2YWxpZCBzeW1ib2wgQyBuYW1lLCBtb3N0IGEub3V0CisgICMgcGxhdGZvcm1zIChhYil1c2UgaXQgaW4gUElDIGNvZGUsIGJ1dCB0aGVpciBsaW5rZXJzIGdldCBjb25mdXNlZCBpZgorICAjIHRoZSBzeW1ib2wgaXMgZXhwbGljaXRseSByZWZlcmVuY2VkLiAgU2luY2UgcG9ydGFibGUgY29kZSBjYW5ub3QKKyAgIyByZWx5IG9uIHRoaXMgc3ltYm9sIG5hbWUsIGl0J3MgcHJvYmFibHkgZmluZSB0byBuZXZlciBpbmNsdWRlIGl0IGluCisgICMgcHJlbG9hZGVkIHN5bWJvbCB0YWJsZXMuCisgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQorICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCisgIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbworICBjYXNlICRjY190ZW1wIGluCisgICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OworICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIGxkX3NobGlic19HQ0o9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQorICAgIHdsYXJjPScke3dsfScKKworICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCisgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCisgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgorICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgorCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICAgIGVsc2UKKyAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KKyAgICBmaQorICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubworICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KKyAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKKyAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCisgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCisgICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucworICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OworICAgIGVzYWMKKworICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBhaXgzKiB8IGFpeDQqIHwgYWl4NSopCisgICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCisgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KKwlsZF9zaGxpYnNfR0NKPW5vCisJY2F0IDw8RU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCisqKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKKyoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisKKyAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCisgICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAorICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCisgICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQorICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCisgICAgICAjIHRoZW0uCisgICAgICBsZF9zaGxpYnNfR0NKPW5vCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKKwkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCisJIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQorCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlsZF9zaGxpYnNfR0NKPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBHQ0opIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KKyAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcworICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXSAvcy8uKiBcKFteIF0qXCkvXDEgREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV10gL3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCisJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgIGNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwllbHNlCisJICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgIGNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZml+CisJJENDIC1zaGFyZWQgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0dDSj1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBpbnRlcml4MyopCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgbGludXgqKQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJdG1wX2FkZGZsYWc9CisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisJcGdjYyopCQkJCSMgUG9ydGxhbmQgR3JvdXAgQyBjb21waWxlcgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS0td2hvbGUtYXJjaGl2ZWBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyAkZWNobyBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJCSMgSW50ZWwgQyBjb21waWxlciBvbiBpYTY0CisJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMnIDs7CisJZWZjKixpYTY0KiB8IGlmb3J0KixpYTY0KikJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYyAtbm9mb3JfbWFpbicgOzsKKwlpZmMqIHwgaWZvcnQqKQkJCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlcgorCSAgdG1wX2FkZGZsYWc9JyAtbm9mb3JfbWFpbicgOzsKKwllc2FjCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCisJaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKyAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgJENDIC1zaGFyZWQnIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0dDSj1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCisJd2xhcmM9CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgZ3JlcCAnQkZEIDJcLjgnID4gL2Rldi9udWxsOyB0aGVuCisJbGRfc2hsaWJzX0dDSj1ubworCWNhdCA8PEVPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitFT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZWxzZQorCWxkX3NobGlic19HQ0o9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgICAqXCBbMDFdLiogfCAqXCAyLlswLTldLiogfCAqXCAyLjFbMC01XS4qKQorCWxkX3NobGlic19HQ0o9bm8KKwljYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IFJlbGVhc2VzIG9mIHRoZSBHTlUgbGlua2VyIHByaW9yIHRvIDIuMTYuOTEuMC4zIGNhbiBub3QKKyoqKiByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBTQ08gc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAorKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQorKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi4xNi45MS4wLjMgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKKyoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCisqKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KKworX0xUX0VPRgorCTs7CisJKikKKwkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LXJwYXRoLCRsaWJkaXJgJworCSAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgZWxzZQorCSAgICBsZF9zaGxpYnNfR0NKPW5vCisJICBmaQorCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgc3Vub3M0KikKKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICB3bGFyYz0KKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgICopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisgICAgICBlbHNlCisJbGRfc2hsaWJzX0dDSj1ubworICAgICAgZmkKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm87IHRoZW4KKyAgICAgIHJ1bnBhdGhfdmFyPQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9CisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPQorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPQorICAgIGZpCisgIGVsc2UKKyAgICAjIFBPUlRNRSBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBsaW5rZXIgKG5vdCBHTlUgbGQpCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeDMqKQorICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCisgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPXllcworICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRMRCAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLWJFOiRleHBvcnRfc3ltYm9scyAtVDUxMiAtSDUxMiAtYk06U1JFfiRBUiAkQVJfRkxBR1MgJGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lJworICAgICAgIyBOb3RlOiB0aGlzIGxpbmtlciBoYXJkY29kZXMgdGhlIGRpcmVjdG9yaWVzIGluIExJQlBBVEggaWYgdGhlcmUKKyAgICAgICMgYXJlIG5vIGRpcmVjdG9yaWVzIHNwZWNpZmllZCBieSAtTC4KKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAteiAiJGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIjsgdGhlbgorCSMgTmVpdGhlciBkaXJlY3QgaGFyZGNvZGluZyBub3Igc3RhdGljIGxpbmtpbmcgaXMgc3VwcG9ydGVkIHdpdGggYQorCSMgYnJva2VuIGNvbGxlY3QyLgorCWhhcmRjb2RlX2RpcmVjdF9HQ0o9dW5zdXBwb3J0ZWQKKyAgICAgIGZpCisgICAgICA7OworCisgICAgYWl4NCogfCBhaXg1KikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisJICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCisJZWxzZQorCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4NSopCisJICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworICAJICAgIGJyZWFrCisgIAkgIGZpCisJICBkb25lCisJICA7OworCWVzYWMKKworCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisJbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgZmkKKworICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgorICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bworICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKKyAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPScnCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKKworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwljYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQorCSMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjaworCSMgYmVsb3cgZm9yIGJyb2tlbiBjb2xsZWN0MiBkb2Vzbid0IHdvcmsgdW5kZXIgNC4zKworCSAgY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAorCSAgaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAorICAJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCBncmVwIHJlc29sdmVfbGliX25hbWUgPi9kZXYvbnVsbAorCSAgdGhlbgorICAJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKyAgCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKwkgIGVsc2UKKyAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorICAJICBoYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCisgIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKyAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKyAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisgIAkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJworICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0KKwkgIGZpCisJICA7OworCWVzYWMKKwlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKKwlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCWZpCisgICAgICBlbHNlCisJIyBub3QgdXNpbmcgZ2NjCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisgIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSAgc2hhcmVkX2ZsYWc9Jy1HJworCWVsc2UKKwkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKKwkgIGVsc2UKKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgIGZpCisJZmkKKyAgICAgIGZpCisKKyAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KKyAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCisgICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKKwkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSctYmVyb2snCisgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisgICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisKK2FpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgCisjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgJy9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsgL14wLyB7IHMvXjAgICpcKC4qXCkkL1wxLzsgcDsgfQorfSdgOyBmaQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2lmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ii16IG5vZGVmcyIKKwkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCisJIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorCithaXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYAorIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgoraWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICcvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7IC9eMC8geyBzL14wICAqXCguKlwpJC9cMS87IHA7IH0KK30nYDsgZmkKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitpZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKKworCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKKwkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCisJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1iZXJub3RvaycKKwkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm9rJworCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyRjb252ZW5pZW5jZScKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKyAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KKyAgICAgIGxkX3NobGlic19HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBic2RpWzQ1XSopCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPS1yZHluYW1pYworICAgICAgOzsKKworICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgorICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScgJworICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCisgICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgorICAgICAgbGliZXh0PWxpYgorICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisgICAgICBzaHJleHRfY21kcz0iLmRsbCIKKyAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKyAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KKyAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfR0NKPSd0cnVlJworICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKyAgICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKPSdsaWIgL09VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCisgICAgICBmaXhfc3JjZmlsZV9wYXRoX0dDSj0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCisgICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj15ZXMKKyAgICAgIDs7CisKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIDs7CisgICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCisgICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KKyAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKKyAgICAgICAgIGVsc2UKKyAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KKyAgICAgICAgICAgICAxMC5bMDEyXSkKKyAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCisgICAgICAgICAgICAgICA7OworICAgICAgICAgICAgIDEwLiopCisgICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJworICAgICAgICAgICAgICAgOzsKKyAgICAgICAgICAgZXNhYworICAgICAgICAgZmkKKyAgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KKyAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj11bnN1cHBvcnRlZAorICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScnCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKKyAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KKyAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCisgICAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtZHluYW1pY2xpYiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSAkcnBhdGgvJHNvbmFtZSAkdmVyc3RyaW5nJworICAgICAgbW9kdWxlX2NtZHNfR0NKPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCisgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLWR5bmFtaWNsaWIgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgJHJwYXRoLyRzb25hbWUgJHZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCisgICAgZWxzZQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgeGxjKikKKyAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJworICAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkdmVyc3RyaW5nJworICAgICAgICAgbW9kdWxlX2NtZHNfR0NKPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKKyAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcworICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JworICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICAgICAgICA7OworICAgICAgICopCisgICAgICAgICBsZF9zaGxpYnNfR0NKPW5vCisgICAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgbGRfc2hsaWJzX0dDSj1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwga2ZyZWVic2QqLWdudSB8IGRyYWdvbmZseSopCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgorICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKworICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKyAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJworICAgICAgOzsKKworICAgIGhwdXgxMCopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06CisKKwloYXJkY29kZV9kaXJlY3RfR0NKPXllcworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCisKKwkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAorCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCWhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBocHV4MTEqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCopCisJICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJaWE2NCopCisJICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKKworCWNhc2UgJGhvc3RfY3B1IGluCisJaHBwYSo2NCp8aWE2NCopCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0nK2IgJGxpYmRpcicKKwkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KKwkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisJICA7OworCSopCisJICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0o9Jy1ycGF0aCAkbGliZGlyJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06CisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJworCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJworCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCisgICAgICBlbHNlCisgICAgICAgY2FzZSAkaG9zdF9vcyBpbgorCSBvcGVuYnNkWzAxXS4qIHwgb3BlbmJzZDIuWzAtN10gfCBvcGVuYnNkMi5bMC03XS4qKQorCSAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKKwkgICA7OworCSAqKQorCSAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgICA7OworICAgICAgIGVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCisgICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKKyAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06CisgICAgICA7OworCisgICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgZWxzZQorCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgorICAgICAgOzsKKworICAgIHNvbGFyaXMqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScgLXogdGV4dCcKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJd2xhcmM9JyR7d2x9JworCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBlbHNlCisJd2xhcmM9JycKKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisgIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCisgICAgICBmaQorICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICBjYXNlICRob3N0X29zIGluCisgICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7CisgICAgICAqKQorIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGxpbmtlciBvcHRpb25zIHNvIHdlCisgCSMgY2Fubm90IGp1c3QgcGFzcyB0aGUgY29udmllbmNlIGxpYnJhcnkgbmFtZXMgdGhyb3VnaAorIAkjIHdpdGhvdXQgJHdsLCBpZmYgd2UgZG8gbm90IGxpbmsgd2l0aCAkTEQuCisgCSMgTHVja2lseSwgZ2NjIHN1cHBvcnRzIHRoZSBzYW1lIHN5bnRheCB3ZSBuZWVkIGZvciBTdW4gU3R1ZGlvLgorIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorIAljYXNlICR3bGFyYyBpbgorIAknJykKKyAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnIDs7CisgCSopCisgCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScke3dsfS16ICR7d2x9YWxsZXh0cmFjdGBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnIDs7CisgCWVzYWMgOzsKKyAgICAgIGVzYWMKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCisJIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubworCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgorCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJworICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKKyAgICAgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NCkKKyAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisJc25pKQorCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/CisJOzsKKwlzaWVtZW5zKQorCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCisJICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCisJICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgcmVsb2FkX2NtZHNfR0NKPSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKwkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KKyAgICAgICAgOzsKKwltb3Rvcm9sYSkKKwkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQorCTs7CisgICAgICBlc2FjCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgOzsKKworICAgIHN5c3Y0LjMqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9Jy1CZXhwb3J0JworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KKwlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcworCWxkX3NobGlic19HQ0o9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqKQorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LHRleHQnCisgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXosbm9kZWZzJworICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCisgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1SLCRsaWJkaXJgJworICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9JzonCisgICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUJleHBvcnQnCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGVsc2UKKwlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKKyAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGxkX3NobGlic19HQ0o9bm8KKyAgICAgIDs7CisgICAgZXNhYworICBmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbGRfc2hsaWJzX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kbGRfc2hsaWJzX0dDSiIgPiY2Cit0ZXN0ICIkbGRfc2hsaWJzX0dDSiIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCisKKyMKKyMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KKyMKK2Nhc2UgIngkYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiBpbgoreHx4eWVzKQorICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCisgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKKworICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICBjYXNlICRhcmNoaXZlX2NtZHNfR0NKIGluCisgICAgKid+JyopCisgICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCisgICAgICA7OworICAgICckQ0MgJyopCisgICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCisgICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKKyAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgorICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbi4uLiAkRUNIT19DIiA+JjYKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIHByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgorICAgICAgICBzb25hbWU9Y29uZnRlc3QKKyAgICAgICAgbGliPWNvbmZ0ZXN0CisgICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAorICAgICAgICBkZXBsaWJzPQorICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKKwlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCisgICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12CisgICAgICAgIGxpbmtlcl9mbGFncz0tdgorICAgICAgICB2ZXJzdHJpbmc9CisgICAgICAgIG91dHB1dF9vYmpkaXI9LgorICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0CisgICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSgorICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9CisgICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHNfR0NKIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgICAgICAgdGhlbgorCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCisgICAgICAgIGVsc2UKKwkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCisgICAgICBlbHNlCisgICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgZmkKKyAgICAgICRybSBjb25mdGVzdCoKKyAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgPiY2CisgICAgICA7OworICAgIGVzYWMKKyAgZmkKKyAgOzsKK2VzYWMKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAorICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJzsnID4vZGV2L251bGwgOyB0aGVuCisgICAgIyBpZiB0aGUgcGF0aCBjb250YWlucyAiOyIgdGhlbiB3ZSBhc3N1bWUgaXQgdG8gYmUgdGhlIHNlcGFyYXRvcgorICAgICMgb3RoZXJ3aXNlIGRlZmF1bHQgdG8gdGhlIHN0YW5kYXJkIHBhdGggc2VwYXJhdG9yIChpLmUuICI6IikgLSBpdCBpcworICAgICMgYXNzdW1lZCB0aGF0IG5vIHBhcnQgb2YgYSBub3JtYWwgcGF0aG5hbWUgY29udGFpbnMgIjsiIGJ1dCB0aGF0IHNob3VsZAorICAgICMgb2theSBpbiB0aGUgcmVhbCB3b3JsZCB3aGVyZSAiOyIgaW4gZGlycGF0aHMgaXMgaXRzZWxmIHByb2JsZW1hdGljLgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgZmkKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmkKK25lZWRfbGliX3ByZWZpeD11bmtub3duCitoYXJkY29kZV9pbnRvX2xpYnM9bm8KKworIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCisjIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKK25lZWRfdmVyc2lvbj11bmtub3duCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCisgIHNobGlicGF0aF92YXI9TElCUEFUSAorCisgICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgOzsKKworYWl4NCogfCBhaXg1KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGVsc2UKKyAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCisgICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAorICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KKyAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgorICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCisJOgorICAgICAgZWxzZQorCWNhbl9idWlsZF9zaGFyZWQ9bm8KKyAgICAgIGZpCisgICAgICA7OworICAgIGVzYWMKKyAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0CisgICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bworICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCisgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KKyAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90CisgICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBlbHNlCisgICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgorICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKKyAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZmkKKyAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKyAgZmkKKyAgOzsKKworYW1pZ2FvcyopCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCisgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICA7OworCitiZW9zKikKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICA7OworCitic2RpWzQ1XSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCisgICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCisgICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdworICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKKyAgOzsKKworY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorICB2ZXJzaW9uX3R5cGU9d2luZG93cworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF92ZXJzaW9uPW5vCisgIG5lZWRfbGliX3ByZWZpeD1ubworCisgIGNhc2UgJEdDQywkaG9zdF9vcyBpbgorICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KKyAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+CisgICAgICAgJHJtIFwkZGxwYXRoJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBjeWd3aW4qKQorICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisgICAgICA7OworICAgIG1pbmd3KikKKyAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4CisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCisgICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQorICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCisgICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKKyAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAorICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCisgICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgOzsKKyAgICBwdzMyKikKKyAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJworICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKworICAqKQorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJworICAgIDs7CisgIGVzYWMKKyAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JworICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKKyAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCisgICMgQXBwbGUncyBnY2MgcHJpbnRzICdnY2MgLXByaW50LXNlYXJjaC1kaXJzJyBkb2Vzbid0IG9wZXJhdGUgdGhlIHNhbWUuCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgdHIgIlxuIiAiJFBBVEhfU0VQQVJBVE9SIiB8IHNlZCAtZSAncy9saWJyYXJpZXM6L0BsaWJyYXJpZXM6LycgfCB0ciAiQCIgIlxuIiB8IGdyZXAgIl5saWJyYXJpZXM6IiB8IHNlZCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciIC1lICJzLCRQQVRIX1NFUEFSQVRPUiwgLGciIC1lICJzLC4qLCYgL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYixnImAKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYicKKyAgZmkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKwora2ZyZWVic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7CisgICAgKikgb2JqZm9ybWF0PWVsZiA7OworICAgIGVzYWMKKyAgZmkKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAorICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KKyAgICBmcmVlYnNkLWVsZiopCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIGZyZWVic2QtKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgICAgbmVlZF92ZXJzaW9uPXllcworICAgICAgOzsKKyAgZXNhYworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBjYXNlICRob3N0X29zIGluCisgIGZyZWVic2QyKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgOzsKKyAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKKyAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgOzsKKyAgZnJlZWJzZCopICMgZnJvbSA0LjYgb24KKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGVzYWMKKyAgOzsKKworZ251KikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgIGhwcGEqNjQqKQorICAgICBzaHJleHRfY21kcz0nLnNsJworICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAorICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICAgOzsKKyAgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICBwb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA1NTUgJGxpYicKKyAgOzsKKworaW50ZXJpeDMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgorICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKKyAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworCisgICMgZmluZCBvdXQgd2hpY2ggQUJJIHdlIGFyZSB1c2luZworICBsaWJzdWZmPQorICBjYXNlICIkaG9zdF9jcHUiIGluCisgIHg4Nl82NCp8czM5MHgqfHBvd2VycGM2NCopCisgICAgZWNobyAnI2xpbmUgMTgyNzYgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorICAgICAgKjY0LWJpdCopCisgICAgICAgIGxpYnN1ZmY9NjQKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgorICAgICAgICA7OworICAgICAgZXNhYworICAgIGZpCisgICAgcm0gLXJmIGNvbmZ0ZXN0KgorICAgIDs7CisgIGVzYWMKKworICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAorICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliJHtsaWJzdWZmfSAvdXNyL2xpYiR7bGlic3VmZn0gJGx0X2xkX2V4dHJhIgorICBmaQorCisgICMgV2UgdXNlZCB0byB0ZXN0IGZvciAvbGliL2xkLnNvLjEgYW5kIGRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyBvbgorICAjIHBvd2VycGMsIGJlY2F1c2UgTWtMaW51eCBvbmx5IHN1cHBvcnRlZCBzaGFyZWQgbGlicmFyaWVzIHdpdGggdGhlCisgICMgR05VIGR5bmFtaWMgbGlua2VyLiAgU2luY2UgdGhpcyB3YXMgYnJva2VuIHdpdGggY3Jvc3MgY29tcGlsZXJzLAorICAjIG1vc3QgcG93ZXJwYy1saW51eCBib3hlcyBzdXBwb3J0IGR5bmFtaWMgbGlua2luZyB0aGVzZSBkYXlzIGFuZAorICAjIHBlb3BsZSBjYW4gYWx3YXlzIC0tZGlzYWJsZS1zaGFyZWQsIHRoZSB0ZXN0IHdhcyByZW1vdmVkLCBhbmQgd2UKKyAgIyBhc3N1bWUgdGhlIEdOVS9MaW51eCBkeW5hbWljIGxpbmtlciBpcyBpbiB1c2UuCisgIGR5bmFtaWNfbGlua2VyPSdHTlUvTGludXggbGQuc28nCisgIDs7CisKK2tuZXRic2QqLWdudSkKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J0dOVSBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCisgIGVsc2UKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCisgIGZpCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCituZXdzb3M2KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgOzsKKworbnRvLXFueCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKK29wZW5ic2QqKQorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgorICBjYXNlICRob3N0X29zIGluCisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKKyAgZXNhYworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworc29sYXJpcyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKKyAgOzsKKworc3Vub3M0KikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIG5lZWRfbGliX3ByZWZpeD1ubworICBmaQorICBuZWVkX3ZlcnNpb249eWVzCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgICBzbmkpCisgICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICAgIG5lZWRfbGliX3ByZWZpeD1ubworICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCisgICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgICAgOzsKKyAgICBzaWVtZW5zKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICA7OworICAgIG1vdG9yb2xhKQorICAgICAgbmVlZF9saWJfcHJlZml4PW5vCisgICAgICBuZWVkX3ZlcnNpb249bm8KKyAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKKyAgICAgIDs7CisgIGVzYWMKKyAgOzsKKworc3lzdjQqTVAqKQorICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCisgICAgdmVyc2lvbl90eXBlPWxpbnV4CisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBmaQorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJworICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBlbHNlCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1CitlY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgordGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKwordmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2CitoYXJkY29kZV9hY3Rpb25fR0NKPQoraWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIiB8fCBcCisgICB0ZXN0IC1uICIkcnVucGF0aF92YXJfR0NKIiB8fCBcCisgICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oiID0gIlh5ZXMiIDsgdGhlbgorCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KKyAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9HQ0oiICE9IG5vICYmCisgICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKKyAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQorICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCisgICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIEdDSikiICE9IG5vICYmCisgICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0dDSiIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9dW5zdXBwb3J0ZWQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY1CitlY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY2CisKK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fR0NKIiA9IHJlbGluazsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKKworCisjIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKKyMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCisjIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKKyMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgoraWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KKyAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCisgICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAorICBmaQorICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCisgICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQorICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCisgIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKKyAgICBTRUQgU0hFTEwgU1RSSVAgXAorICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAorICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCisgICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCisgICAgY29tcGlsZXJfR0NKIFwKKyAgICBDQ19HQ0ogXAorICAgIExEX0dDSiBcCisgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogXAorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBcCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogXAorICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0ogXAorICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0ogXAorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSiBcCisgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0ogXAorICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiBcCisgICAgcHJlZGVwX29iamVjdHNfR0NKIFwKKyAgICBwb3N0ZGVwX29iamVjdHNfR0NKIFwKKyAgICBwcmVkZXBzX0dDSiBcCisgICAgcG9zdGRlcHNfR0NKIFwKKyAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKIFwKKyAgICBhcmNoaXZlX2NtZHNfR0NKIFwKKyAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiBcCisgICAgcG9zdGluc3RhbGxfY21kc19HQ0ogXAorICAgIHBvc3R1bmluc3RhbGxfY21kc19HQ0ogXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiBcCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKIFwKKyAgICBub191bmRlZmluZWRfZmxhZ19HQ0ogXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiBcCisgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0ogXAorICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKIFwKKyAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKIFwKKyAgICBtb2R1bGVfY21kc19HQ0ogXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogXAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiBcCisgICAgZXhjbHVkZV9leHBzeW1zX0dDSiBcCisgICAgaW5jbHVkZV9leHBzeW1zX0dDSjsgZG8KKworICAgIGNhc2UgJHZhciBpbgorICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIHwgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKIHwgXAorICAgIGFyY2hpdmVfY21kc19HQ0ogfCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0ogfCBcCisgICAgbW9kdWxlX2NtZHNfR0NKIHwgXAorICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfR0NKIHwgXAorICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIHwgXAorICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKKyAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKKyAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KKyAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCisgICAgICA7OworICAgIGVzYWMKKyAgZG9uZQorCisgIGNhc2UgJGx0X2VjaG8gaW4KKyAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCisgICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAorICAgIDs7CisgIGVzYWMKKworY2ZnZmlsZT0iJG9maWxlIgorCisgIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgorIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCisjIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6CisKKyMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KK1NIRUxMPSRsdF9TSEVMTAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0oKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKCisKKyMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgorZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCisKKyMgVGhlIGhvc3Qgc3lzdGVtLgoraG9zdF9hbGlhcz0kaG9zdF9hbGlhcworaG9zdD0kaG9zdAoraG9zdF9vcz0kaG9zdF9vcworCisjIFRoZSBidWlsZCBzeXN0ZW0uCitidWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKK2J1aWxkPSRidWlsZAorYnVpbGRfb3M9JGJ1aWxkX29zCisKKyMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgorZWNobz0kbHRfZWNobworCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgQSBDIGNvbXBpbGVyLgorTFRDQz0kbHRfTFRDQworCisjIExUQ0MgY29tcGlsZXIgZmxhZ3MuCitMVENGTEFHUz0kbHRfTFRDRkxBR1MKKworIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgorQ0M9JGx0X2NvbXBpbGVyX0dDSgorCisjIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Cit3aXRoX2djYz0kR0NDX0dDSgorCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9HQ0oKKworIyBXaGV0aGVyIHdlIG5lZWQgaGFyZCBvciBzb2Z0IGxpbmtzLgorTE5fUz0kbHRfTE5fUworCisjIEEgQlNELWNvbXBhdGlibGUgbm0gcHJvZ3JhbS4KK05NPSRsdF9OTQorCisjIEEgc3ltYm9sIHN0cmlwcGluZyBwcm9ncmFtCitTVFJJUD0kbHRfU1RSSVAKKworIyBVc2VkIHRvIGV4YW1pbmUgbGlicmFyaWVzIHdoZW4gZmlsZV9tYWdpY19jbWQgYmVnaW5zICJmaWxlIgorTUFHSUNfQ01EPSRNQUdJQ19DTUQKKworIyBVc2VkIG9uIGN5Z3dpbjogRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSIkRExMVE9PTCIKKworIyBVc2VkIG9uIGN5Z3dpbjogb2JqZWN0IGR1bXBlci4KK09CSkRVTVA9IiRPQkpEVU1QIgorCisjIFVzZWQgb24gY3lnd2luOiBhc3NlbWJsZXIuCitBUz0iJEFTIgorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgSG93IHRvIGNyZWF0ZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4KK3JlbG9hZF9mbGFnPSRsdF9yZWxvYWRfZmxhZworcmVsb2FkX2NtZHM9JGx0X3JlbG9hZF9jbWRzCisKKyMgSG93IHRvIHBhc3MgYSBsaW5rZXIgZmxhZyB0aHJvdWdoIHRoZSBjb21waWxlci4KK3dsPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgorCisjIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KK29iamV4dD0iJGFjX29iamV4dCIKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9IiRsaWJleHQiCisKKyMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCitzaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJworCisjIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KK2V4ZWV4dD0iJGV4ZWV4dCIKKworIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCitwaWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfR0NKCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oKKworIyBNdXN0IHdlIGxvY2sgZmlsZXMgd2hlbiBkb2luZyBjb21waWxhdGlvbj8KK25lZWRfbG9ja3M9JGx0X25lZWRfbG9ja3MKKworIyBEbyB3ZSBuZWVkIHRoZSBsaWIgcHJlZml4IGZvciBtb2R1bGVzPworbmVlZF9saWJfcHJlZml4PSRuZWVkX2xpYl9wcmVmaXgKKworIyBEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzPworbmVlZF92ZXJzaW9uPSRuZWVkX3ZlcnNpb24KKworIyBXaGV0aGVyIGRsb3BlbiBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc3VwcG9ydD0kZW5hYmxlX2Rsb3BlbgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmPSRlbmFibGVfZGxvcGVuX3NlbGYKKworIyBXaGV0aGVyIGRsb3BlbiBvZiBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCitkbG9wZW5fc2VsZl9zdGF0aWM9JGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWMKKworIyBDb21waWxlciBmbGFnIHRvIHByZXZlbnQgZHluYW1pYyBsaW5raW5nLgorbGlua19zdGF0aWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKCisKKyMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KK25vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfR0NKCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSgorCisjIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgc2hhcmVkIG9iamVjdHMgZGlyZWN0bHkgZnJvbSBhcmNoaXZlcy4KK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSRsdF93aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0oKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCit0aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0oKKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX0dDSgorb2xkX3Bvc3RpbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0aW5zdGFsbF9jbWRzCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfR0NKCisKKyMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSgorCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX0dDSgorYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kc19HQ0oKK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKK3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQorbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX0dDSgorbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfR0NKCisKKyMgQ29tbWFuZHMgdG8gc3RyaXAgbGlicmFyaWVzLgorb2xkX3N0cmlwbGliPSRsdF9vbGRfc3RyaXBsaWIKK3N0cmlwbGliPSRsdF9zdHJpcGxpYgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcHJlZGVwX29iamVjdHM9JGx0X3ByZWRlcF9vYmplY3RzX0dDSgorCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19HQ0oKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcHM9JGx0X3ByZWRlcHNfR0NKCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3Bvc3RkZXBzPSRsdF9wb3N0ZGVwc19HQ0oKKworIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZworIyBhIHNoYXJlZCBsaWJyYXJ5LgorY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19HQ0oKKworIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgorbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0dDSgorCisjIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KK2ZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCitmaW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgorZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgorcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCisKKyMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KK3NobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKKworIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAorCisjIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgoraGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fR0NKCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0oKKworIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCisjIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKKyMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0oKKworIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KK2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfR0NKCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCisjIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0dDSgorCisjIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCisjIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0oKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oKKworIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfR0NKCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYworCisjIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKKworIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgorZml4X3NyY2ZpbGVfcGF0aD0iJGZpeF9zcmNmaWxlX3BhdGhfR0NKIgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0oKKworIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgorZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19HQ0oKKworIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0dDSgorCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0dDSgorCisjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQorCitfX0VPRl9fCisKKworZWxzZQorICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCisgICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQorICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCisgIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAorICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgorICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKKyAgZmkKK2ZpCisKKworYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitDQz0iJGx0X3NhdmVfQ0MiCisKKwllbHNlCisJICB0YWduYW1lPSIiCisJZmkKKwk7OworCisgICAgICBSQykKKworCisKKyMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCithY19leHQ9cmMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KK29iamV4dD1vCitvYmpleHRfUkM9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9XG4nCisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCitsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiCisKKyMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAorJHJtIGNvbmZ0ZXN0KgorCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK3ByaW50ZiAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKK2V2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgorX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKKyRybSBjb25mdGVzdCoKKworCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorbHRfc2F2ZV9DQz0iJENDIgorQ0M9JHtSQy0id2luZHJlcyJ9Citjb21waWxlcj0kQ0MKK2NvbXBpbGVyX1JDPSRDQworZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCisgIGNhc2UgJGNjX3RlbXAgaW4KKyAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKKyAgICBcLSopIDs7CisgICAgKikgYnJlYWs7OworICBlc2FjCitkb25lCitjY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKKworbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkM9eWVzCisKKyMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQorIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKKyMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQorIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCitpZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgorICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKKyAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgorICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCisgIGZpCisgICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKKyAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCisgICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KKyAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAorICAgIFNFRCBTSEVMTCBTVFJJUCBcCisgICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCisgICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKKyAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKKyAgICBjb21waWxlcl9SQyBcCisgICAgQ0NfUkMgXAorICAgIExEX1JDIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX1JDIFwKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19SQyBcCisgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMgXAorICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDIFwKKyAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMgXAorICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19SQyBcCisgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMgXAorICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMgXAorICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgXAorICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgXAorICAgIHByZWRlcF9vYmplY3RzX1JDIFwKKyAgICBwb3N0ZGVwX29iamVjdHNfUkMgXAorICAgIHByZWRlcHNfUkMgXAorICAgIHBvc3RkZXBzX1JDIFwKKyAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMgXAorICAgIGFyY2hpdmVfY21kc19SQyBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyBcCisgICAgcG9zdGluc3RhbGxfY21kc19SQyBcCisgICAgcG9zdHVuaW5zdGFsbF9jbWRzX1JDIFwKKyAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyBcCisgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfUkMgXAorICAgIG5vX3VuZGVmaW5lZF9mbGFnX1JDIFwKKyAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDIFwKKyAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDIFwKKyAgICBoYXJkY29kZV9hdXRvbWF0aWNfUkMgXAorICAgIG1vZHVsZV9jbWRzX1JDIFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgXAorICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDIFwKKyAgICBleGNsdWRlX2V4cHN5bXNfUkMgXAorICAgIGluY2x1ZGVfZXhwc3ltc19SQzsgZG8KKworICAgIGNhc2UgJHZhciBpbgorICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQyB8IFwKKyAgICBhcmNoaXZlX2NtZHNfUkMgfCBcCisgICAgYXJjaGl2ZV9leHBzeW1fY21kc19SQyB8IFwKKyAgICBtb2R1bGVfY21kc19SQyB8IFwKKyAgICBtb2R1bGVfZXhwc3ltX2NtZHNfUkMgfCBcCisgICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfUkMgfCBcCisgICAgZXhwb3J0X3N5bWJvbHNfY21kc19SQyB8IFwKKyAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCisgICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCisgICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCisgICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICBjYXNlICRsdF9lY2hvIGluCisgIConXCQwIC0tZmFsbGJhY2stZWNobyInKQorICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgICA7OworICBlc2FjCisKK2NmZ2ZpbGU9IiRvZmlsZSIKKworICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKKyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKKworIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCisKKyMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KK2J1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCisKKyMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KK2J1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfUkMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMKKworIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCitmYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCitlY2hvPSRsdF9lY2hvCisKKyMgVGhlIGFyY2hpdmVyLgorQVI9JGx0X0FSCitBUl9GTEFHUz0kbHRfQVJfRkxBR1MKKworIyBBIEMgY29tcGlsZXIuCitMVENDPSRsdF9MVENDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9MVENGTEFHUworCisjIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXJfUkMKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPword2l0aF9nY2M9JEdDQ19SQworCisjIEFuIEVSRSBtYXRjaGVyLgorRUdSRVA9JGx0X0VHUkVQCisKKyMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KK0xEPSRsdF9MRF9SQworCisjIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgorTk09JGx0X05NCisKKyMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KK1NUUklQPSRsdF9TVFJJUAorCisjIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCitNQUdJQ19DTUQ9JE1BR0lDX0NNRAorCisjIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KK0RMTFRPT0w9IiRETExUT09MIgorCisjIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgorT0JKRFVNUD0iJE9CSkRVTVAiCisKKyMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KK0FTPSIkQVMiCisKKyMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgorb2JqZGlyPSRvYmpkaXIKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgord2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfUkMKKworIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCitvYmpleHQ9IiRhY19vYmpleHQiCisKKyMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgorbGliZXh0PSIkbGliZXh0IgorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9IiRleGVleHQiCisKKyMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgorcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX1JDCitwaWNfbW9kZT0kcGljX21vZGUKKworIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/CittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCisKKyMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPworY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19SQworCisjIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPworbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcworCisjIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19SQworCisjIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCitub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KK2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgord2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX1JDCisKKyMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgordGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfUkMKKworIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KK3ZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCitsaWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYworCisjIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgorc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCisKKyMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzX1JDCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgorb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19SQworCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KK2FyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzX1JDCithcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX1JDCitwb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCitwb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19SQworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHNfUkMKKworIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCitvbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgorc3RyaXBsaWI9JGx0X3N0cmlwbGliCisKKyMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKKyMgc2hhcmVkIGxpYnJhcnkuCitwcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQorIyBzaGFyZWQgbGlicmFyeS4KK3ByZWRlcHM9JGx0X3ByZWRlcHNfUkMKKworIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCisjIHNoYXJlZCBsaWJyYXJ5LgorcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX1JDCisKKyMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyMgYSBzaGFyZWQgbGlicmFyeS4KK2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX1JDCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCitmaWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19SQworCisjIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCitub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfUkMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KK2dsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQorCisjIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCitnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcworCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KK3J1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgorCisjIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCitzaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCisKKyMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX1JDCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgorIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQworCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KKyMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcworIyBub3QgZXhpc3QuCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDCisKKyMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDCisKKyMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQorIyByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfUkMKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKKyMgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfUkMKKworIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bworIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KK2hhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfUkMKKworIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKKyMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19SQworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCisKKyMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgorbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19SQworCisjIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcworc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCisKKyMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KK2ZpeF9zcmNmaWxlX3BhdGg9IiRmaXhfc3JjZmlsZV9wYXRoX1JDIgorCisjIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19SQworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzX1JDCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCitleGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19SQworCisjIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KK2luY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX1JDCisKKyMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCisKK19fRU9GX18KKworCitlbHNlCisgICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKKyAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCisgICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KKyAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCisgIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCisgICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgorICBmaQorZmkKKworCithY19leHQ9YworYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKK2FjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKK2FjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCithY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisKK0NDPSIkbHRfc2F2ZV9DQyIKKworCTs7CisKKyAgICAgICopCisJeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVW5zdXBwb3J0ZWQgdGFnIG5hbWU6ICR0YWduYW1lIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgQXBwZW5kIHRoZSBuZXcgdGFnIG5hbWUgdG8gdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgICAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSIgOyB0aGVuCisgICAgICBhdmFpbGFibGVfdGFncz0iJGF2YWlsYWJsZV90YWdzICR0YWduYW1lIgorICAgIGZpCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKworICAjIE5vdyBzdWJzdGl0dXRlIHRoZSB1cGRhdGVkIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCisgIGlmIGV2YWwgInNlZCAtZSAncy9eYXZhaWxhYmxlX3RhZ3M9LipcJC9hdmFpbGFibGVfdGFncz1cIiRhdmFpbGFibGVfdGFnc1wiLycgXCIkb2ZpbGVcIiA+IFwiJHtvZmlsZX1UXCIiOyB0aGVuCisgICAgbXYgIiR7b2ZpbGV9VCIgIiRvZmlsZSIKKyAgICBjaG1vZCAreCAiJG9maWxlIgorICBlbHNlCisgICAgcm0gLWYgIiR7b2ZpbGV9VCIKKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmFibGUgdG8gdXBkYXRlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIGZpCitmaQorCisKKworIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAorTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCisKKyMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCitMSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKKworIyBQcmV2ZW50IG11bHRpcGxlIGV4cGFuc2lvbgorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVja3MgZm9yIGFzc2VtYmxlcgorIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hc20gb3IgLS1kaXNhYmxlLWFzbSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc20rc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZW5hYmxldmFsPSIkZW5hYmxlX2FzbSIKKworZmk7CisKK2FzbV9hcmNoPQorYXNtX2Rpcj0KK2FzbV9tc2dfYW1kNjQ9bm8KK2FzbV9tc2dfaTM4Nj1ubworCitjYXNlICRob3N0X2NwdSBpbgorICAgIGFtZDY0IHwgeDg2XzY0KSBhc21fYXJjaD0iYW1kNjQiOyBhc21fZGlyPSJhc20vYW1kNjQvc3JjX2dhcy9lbGY2NCIgOzsKKyAgICBpPzg2KSBhc21fYXJjaD0iaTM4NiI7IGFzbV9kaXI9ImFzbS9pMzg2L3NyY19nYXMiIDs7CisgICAgKikgZW5hYmxlX2FzbT1ubyA7OworZXNhYworTFpPX0FTTV9WUEFUSD0KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgYXNzZW1ibHkgdmVyc2lvbnMiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIGFzc2VtYmx5IHZlcnNpb25zLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiWCRlbmFibGVfYXNtIiAhPSBYbm87IHRoZW4KK21meF9jb21waWxlX1M9JyR7Q0MtY2N9IC1jIGNvbmZ0ZXN0LlMgMT4mNScKK2NhdCA+IGNvbmZ0ZXN0LlMgPDxFT0YKKyNpbmNsdWRlICIkYWNfYWJzX3RvcF9zcmNkaXIvJGFzbV9kaXIvbHpvMXhfZjEuUyIKK0VPRgorZW5hYmxlX2FzbT1ubworaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkbWZ4X2NvbXBpbGVfU1wiIikgPiY1CisgIChldmFsICRtZnhfY29tcGlsZV9TKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICAgaWYgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICAgICAgICBlbmFibGVfYXNtPXllcworICAgICAgICBldmFsIGFzbV9tc2dfJGFzbV9hcmNoPSIneWVzIFskYXNtX2Rpcl0nIgorICAgICAgICBMWk9fQVNNX1ZQQVRIPSI6JGFjX2Fic190b3Bfc3JjZGlyLyRhc21fZGlyIgorICAgIGZpCitmaQoraWYgdGVzdCAiWCRlbmFibGVfYXNtIiA9IFhubzsgdGhlbgorICAgIGVjaG8gImNvbmZpZ3VyZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgICAgY2F0IGNvbmZ0ZXN0LlMgPiY1CitmaQorcm0gLXJmIGNvbmZ0ZXN0KgorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfYXNtIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRlbmFibGVfYXNtIiA+JjYKKworCisKK2lmIHRlc3QgIlgkZW5hYmxlX2FzbSIgIT0gWG5vOyB0aGVuCisgIExaT19VU0VfQVNNX1RSVUU9CisgIExaT19VU0VfQVNNX0ZBTFNFPScjJworZWxzZQorICBMWk9fVVNFX0FTTV9UUlVFPScjJworICBMWk9fVVNFX0FTTV9GQUxTRT0KK2ZpCisKKworCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRpbWUuaCBhbmQgc3lzL3RpbWUuaCBtYXkgYm90aCBiZSBpbmNsdWRlZC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RpbWUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisKK2ludAorbWFpbiAoKQoreworaWYgKChzdHJ1Y3QgdG0gKikgMCkKK3JldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9oZWFkZXJfdGltZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfaGVhZGVyX3RpbWU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl90aW1lIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGltZSIgPiY2CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGltZSA9IHllczsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgorI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorX0FDRU9GCisKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK2ZvciBhY19oZWFkZXIgaW4gYXNzZXJ0LmggY3R5cGUuaCBkaXJlbnQuaCBlcnJuby5oIGZjbnRsLmggZmxvYXQuaCBsaW1pdHMuaCBtYWxsb2MuaCBtZW1vcnkuaCBzZXRqbXAuaCBzaWduYWwuaCBzdGRhcmcuaCBzdGRkZWYuaCBzdGRpbnQuaCBzdGRpby5oIHN0ZGxpYi5oIHN0cmluZy5oIHN0cmluZ3MuaCB0aW1lLmggdW5pc3RkLmggdXRpbWUuaCBzeXMvbW1hbi5oIHN5cy9yZXNvdXJjZS5oIHN5cy9zdGF0Lmggc3lzL3RpbWUuaCBzeXMvdHlwZXMuaCBzeXMvd2FpdC5oCitkbworYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCitpZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCisgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgoraWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/CitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKKyNpbmNsdWRlIDwkYWNfaGVhZGVyPgorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hlYWRlcl9jb21waWxlcj1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2CisKKyMgSXMgdGhlIGhlYWRlciBwcmVzZW50PworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JGFjX2hlYWRlcj4KK19BQ0VPRgoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQorICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZworICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZworICBlbHNlCisgICAgYWNfY3BwX2Vycj0KKyAgZmkKK2Vsc2UKKyAgYWNfY3BwX2Vycj15ZXMKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KKyAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2CisKKyMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPworY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgorICB5ZXM6bm86ICkKKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQorZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKK2VjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1CitlY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KKyAgICAoCisgICAgICBjYXQgPDxcX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgUmVwb3J0IHRoaXMgdG8gbWFya3VzQG9iZXJodW1lci5jb20gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNCT1gKKyAgICApIHwKKyAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgorICAgIDs7Citlc2FjCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKworZmkKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworaWYgdGVzdCAiWCRhY19jdl9oZWFkZXJfbGltaXRzX2giICE9IFh5ZXM7IHRoZW4KKyAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiA8bGltaXRzLmg+IGhlYWRlciBub3QgZm91bmQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogPGxpbWl0cy5oPiBoZWFkZXIgbm90IGZvdW5kIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsaW1pdHMuaCBpcyBzYW5lLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHttZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2grc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkgfHwgKDY1NTM1dSA+PSA0Mjk0OTY3Mjk1dWwpCisjICBpZiBkZWZpbmVkKF9fQVBQTEVfXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyMgICAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAtIHVzZSBjb21waWxlciBvcHRpb24gLW5vLWNwcC1wcmVjb21wIgorIyAgZWxzZQorIyAgICBpbmNsdWRlICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4iCisjICBlbmRpZgorI2VuZGlmCisjZGVmaW5lIE1GWF8weGZmZmYgICAgICAgICAgMHhmZmZmCisjZGVmaW5lIE1GWF8weGZmZmZmZmZmTCAgICAgNDI5NDk2NzI5NXVsCisjaWYgIWRlZmluZWQoQ0hBUl9CSVQpIHx8IChDSEFSX0JJVCAhPSA4KQorIyAgaW5jbHVkZSAiZXJyb3IgQ0hBUl9CSVQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChVQ0hBUl9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMSIKKyNlbmRpZgorI2lmICFkZWZpbmVkKFVTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFVTSFJUX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUlOVF9NQVgpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSFJUX01BWCkKKyMgIGluY2x1ZGUgImVycm9yIFNIUlRfTUFYIDEiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgSU5UX01BWCAxIgorI2VuZGlmCisjaWYgIWRlZmluZWQoTE9OR19NQVgpCisjICBpbmNsdWRlICJlcnJvciBMT05HX01BWCAxIgorI2VuZGlmCisjaWYgKFVDSEFSX01BWCA8IDEpCisjICBpbmNsdWRlICJlcnJvciBVQ0hBUl9NQVggMiIKKyNlbmRpZgorI2lmIChVU0hSVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggMiIKKyNlbmRpZgorI2lmIChVTE9OR19NQVggPCAxKQorIyAgaW5jbHVkZSAiZXJyb3IgVUxPTkdfTUFYIDIiCisjZW5kaWYKKyNpZiAoVUNIQVJfTUFYIDwgMHhmZikKKyMgIGluY2x1ZGUgImVycm9yIFVDSEFSX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVU0hSVF9NQVggMyIKKyNlbmRpZgorI2lmIChVSU5UX01BWCA8IE1GWF8weGZmZmYpCisjICBpbmNsdWRlICJlcnJvciBVSU5UX01BWCAzIgorI2VuZGlmCisjaWYgKFVMT05HX01BWCA8IE1GWF8weGZmZmZmZmZmTCkKKyMgIGluY2x1ZGUgImVycm9yIFVMT05HX01BWCAzIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA+IFVJTlRfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVVNIUlRfTUFYIHZzIFVJTlRfTUFYIgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID4gVUxPTkdfTUFYKQorIyAgaW5jbHVkZSAiZXJyb3IgVUlOVF9NQVggdnMgVUxPTkdfTUFYIgorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworCisjaWYgKFVTSFJUX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDIpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDJiWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID4gMildOyB9CisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfaW50MmFbMSAtIDIgKiAhKHNpemVvZihpbnQpID09IDIpXTsgfQorI2VsaWYgKFVJTlRfTUFYID49IE1GWF8weGZmZmYpCit7IHR5cGVkZWYgY2hhciBhX2ludDJiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDIpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmKQoreyB0eXBlZGVmIGNoYXIgYV9sb25nMmFbMSAtIDIgKiAhKHNpemVvZihsb25nKSA9PSAyKV07IH0KKyNlbGlmIChVTE9OR19NQVggPj0gTUZYXzB4ZmZmZikKK3sgdHlwZWRlZiBjaGFyIGFfbG9uZzJiWzEgLSAyICogIShzaXplb2YobG9uZykgPiAyKV07IH0KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9DUkFZMSkgLyogQ1JBWSBQVlAgc3lzdGVtcyAqLworI2lmIChVU0hSVF9NQVggPT0gTUZYXzB4ZmZmZmZmZmZMKQoreyB0eXBlZGVmIGNoYXIgYV9zaG9ydDRhWzEgLSAyICogIShzaXplb2Yoc2hvcnQpID09IDQpXTsgfQorI2VsaWYgKFVTSFJUX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX3Nob3J0NGJbMSAtIDIgKiAhKHNpemVvZihzaG9ydCkgPiA0KV07IH0KKyNlbmRpZgorI2VuZGlmIC8qIF9DUkFZMSAqLworI2lmIChVSU5UX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRhWzEgLSAyICogIShzaXplb2YoaW50KSA9PSA0KV07IH0KKyNlbGlmIChVSU5UX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2ludDRiWzEgLSAyICogIShzaXplb2YoaW50KSA+IDQpXTsgfQorI2VuZGlmCisjaWYgKFVMT05HX01BWCA9PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YVsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID09IDQpXTsgfQorI2VsaWYgKFVMT05HX01BWCA+PSBNRlhfMHhmZmZmZmZmZkwpCit7IHR5cGVkZWYgY2hhciBhX2xvbmc0YlsxIC0gMiAqICEoc2l6ZW9mKGxvbmcpID4gNCldOyB9CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBtZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2g9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK21meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbWZ4X2N2X2hlYWRlcl9zYW5lX2xpbWl0c19oIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRtZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2giID4mNgorCitpZiB0ZXN0ICJYJG1meF9jdl9oZWFkZXJfc2FuZV9saW1pdHNfaCIgIT0gWHllczsgdGhlbgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IHlvdXIgPGxpbWl0cy5oPiBoZWFkZXIgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ciID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogeW91ciA8bGltaXRzLmg+IGhlYWRlciBpcyBicm9rZW4gLSBmb3IgZGV0YWlscyBzZWUgY29uZmlnLmxvZyIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVja3MgZm9yIHR5cGVkZWZzIGFuZCBzdHJ1Y3R1cmVzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvZmZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBvZmZfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9vZmZfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgob2ZmX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChvZmZfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX29mZl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX29mZl90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX29mZl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX29mZl90IiA+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfb2ZmX3QgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIG9mZl90IGxvbmcKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHB0cmRpZmZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwdHJkaWZmX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfcHRyZGlmZl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChwdHJkaWZmX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChwdHJkaWZmX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9wdHJkaWZmX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfcHRyZGlmZl90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3B0cmRpZmZfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9wdHJkaWZmX3QiID4mNgoraWYgdGVzdCAkYWNfY3ZfdHlwZV9wdHJkaWZmX3QgPSB5ZXM7IHRoZW4KKyAgOgorZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHB0cmRpZmZfdCBsb25nCitfQUNFT0YKKworZmkKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2l6ZV90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgoc2l6ZV90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoc2l6ZV90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfc2l6ZV90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3NpemVfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaXplX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2l6ZV90IiA+JjYKK2lmIHRlc3QgJGFjX2N2X3R5cGVfc2l6ZV90ID0geWVzOyB0aGVuCisgIDoKK2Vsc2UKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBzaXplX3QgdW5zaWduZWQKK19BQ0VPRgorCitmaQorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3NpZ25hbCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpZmRlZiBzaWduYWwKKyMgdW5kZWYgc2lnbmFsCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB2b2lkICgqc2lnbmFsIChpbnQsIHZvaWQgKCopKGludCkpKShpbnQpOworI2Vsc2UKK3ZvaWQgKCpzaWduYWwgKCkpICgpOworI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworaW50IGk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9zaWduYWw9aW50CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpZ25hbCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaWduYWwiID4mNgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFJFVFNJR1RZUEUgJGFjX2N2X3R5cGVfc2lnbmFsCitfQUNFT0YKKworCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaG9ydCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaG9ydC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaG9ydCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgoc2hvcnQgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChzaG9ydCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3Nob3J0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3Nob3J0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3Nob3J0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3Nob3J0IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygc2hvcnQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2Zfc2hvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc2hvcnQiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2Zfc2hvcnQ9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzaG9ydCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzaG9ydCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2Zfc2hvcnQ9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1NIT1JUICRhY19jdl9zaXplb2Zfc2hvcnQKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKGludCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGludCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2ludD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9pbnQ9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGludCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfaW50K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludCIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX2ludD0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50KSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGludCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGludCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGludCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfaW50PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2ludD0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfaW50IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0lOVCAkYWNfY3Zfc2l6ZW9mX2ludAorX0FDRU9GCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb25nIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvbmcuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgobG9uZyAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGxvbmcpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9sb25nPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX2xvbmc9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZyIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfbG9uZz0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nKSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nKSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX2xvbmc9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9sb25nPTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfbG9uZyIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HICRhY19jdl9zaXplb2ZfbG9uZworX0FDRU9GCisKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nIGxvbmcuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZ19sb25nK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChsb25nIGxvbmcgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChsb25nIGxvbmcpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmc9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfbG9uZ19sb25nPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmdfbG9uZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9sb25nX2xvbmciID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIGxvbmciID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZy4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZytzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nX2xvbmciID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkgICAgICBhY19sbz0gYWNfaGk9CisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbgorPyopIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Citsb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZz1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBsb25nKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9MT05HX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nX2xvbmcKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX19pbnQxNiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2ludDE2Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX19faW50MTYrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKF9faW50MTYgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChfX2ludDE2KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfX19pbnQxNj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9fX2ludDE2PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19faW50MTYiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX19pbnQxNiIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIF9faW50MTYiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIF9faW50MTYuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9fX2ludDE2K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX19faW50MTYiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDE2KSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoX19pbnQxNikpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDE2KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MTYpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MTYpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX19faW50MTY9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9faW50MTYpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDE2KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoX19pbnQxNikpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChfX2ludDE2KSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAoX19pbnQxNikpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoX19pbnQxNikpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChfX2ludDE2KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9fX2ludDE2PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDE2KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoX19pbnQxNiksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfX19pbnQxNj0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfX19pbnQxNiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX19faW50MTYiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfX19JTlQxNiAkYWNfY3Zfc2l6ZW9mX19faW50MTYKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX19pbnQzMiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2ludDMyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX19faW50MzIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKF9faW50MzIgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChfX2ludDMyKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfX19pbnQzMj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9fX2ludDMyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19faW50MzIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX19pbnQzMiIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIF9faW50MzIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIF9faW50MzIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9fX2ludDMyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX19faW50MzIiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MzIpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MzIpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX19faW50MzI9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9faW50MzIpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDMyKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoX19pbnQzMikpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9fX2ludDMyPWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDMyKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoX19pbnQzMiksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfX19pbnQzMj0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfX19pbnQzMiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX19faW50MzIiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfX19JTlQzMiAkYWNfY3Zfc2l6ZW9mX19faW50MzIKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX19pbnQ2NCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2ludDY0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX19faW50NjQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKF9faW50NjQgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChfX2ludDY0KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfX19pbnQ2ND15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9fX2ludDY0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19faW50NjQiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX19pbnQ2NCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIF9faW50NjQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIF9faW50NjQuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9fX2ludDY0K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX19faW50NjQiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDY0KSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoX19pbnQ2NCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDY0KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50NjQpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50NjQpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX19faW50NjQ9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9faW50NjQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDY0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoX19pbnQ2NCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChfX2ludDY0KSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAoX19pbnQ2NCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoX19pbnQ2NCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChfX2ludDY0KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9fX2ludDY0PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDY0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoX19pbnQ2NCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfX19pbnQ2ND0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfX19pbnQ2NCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX19faW50NjQiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfX19JTlQ2NCAkYWNfY3Zfc2l6ZW9mX19faW50NjQKK19BQ0VPRgorCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB2b2lkICoiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igdm9pZCAqLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3ZvaWRfcCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgodm9pZCAqICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAodm9pZCAqKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfdm9pZF9wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3ZvaWRfcD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV92b2lkX3AiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdm9pZF9wIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygdm9pZCAqIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiB2b2lkICouLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl92b2lkX3Arc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdm9pZF9wIiA9IHllczsgdGhlbgorICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisgICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodm9pZCAqKSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodm9pZCAqKSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHZvaWQgKikpKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh2b2lkICopKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHZvaWQgKikpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2Zfdm9pZF9wPSRhY19sbzs7CisnJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkICopLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh2b2lkICopLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mICh2b2lkICopKTsgfQordW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAodm9pZCAqKSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAodm9pZCAqKSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mICh2b2lkICopKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAodm9pZCAqKSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl92b2lkX3A9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKiksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHZvaWQgKiksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2Zfdm9pZF9wPTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl92b2lkX3AiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl92b2lkX3AiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVk9JRF9QICRhY19jdl9zaXplb2Zfdm9pZF9wCitfQUNFT0YKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNpemVfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaXplX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc2l6ZV90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChzaXplX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChzaXplX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9zaXplX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfc2l6ZV90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3NpemVfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zaXplX3QiID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBzaXplX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHNpemVfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaXplX3QiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaXplX3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaXplX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkgICAgICBhY19sbz0gYWNfaGk9CisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2l6ZV90KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNpemVfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2l6ZV90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbgorPyopIGFjX2N2X3NpemVvZl9zaXplX3Q9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNpemVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNpemVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Citsb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHNpemVfdCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzaXplX3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChzaXplX3QpKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHNpemVfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzaXplX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX3NpemVfdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2l6ZV90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9zaXplX3Q9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3NpemVfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3NpemVfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9TSVpFX1QgJGFjX2N2X3NpemVvZl9zaXplX3QKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcHRyZGlmZl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHB0cmRpZmZfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9wdHJkaWZmX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKHB0cmRpZmZfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHB0cmRpZmZfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX3B0cmRpZmZfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9wdHJkaWZmX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfcHRyZGlmZl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3B0cmRpZmZfdCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIHB0cmRpZmZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgcHRyZGlmZl90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfcHRyZGlmZl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX3B0cmRpZmZfdCIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHB0cmRpZmZfdCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHB0cmRpZmZfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChwdHJkaWZmX3QpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAocHRyZGlmZl90KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChwdHJkaWZmX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAocHRyZGlmZl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAocHRyZGlmZl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAocHRyZGlmZl90KSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHB0cmRpZmZfdCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKHB0cmRpZmZfdCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAocHRyZGlmZl90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHB0cmRpZmZfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfcHRyZGlmZl90PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChwdHJkaWZmX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChwdHJkaWZmX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdD0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfcHRyZGlmZl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfcHRyZGlmZl90IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX1BUUkRJRkZfVCAkYWNfY3Zfc2l6ZW9mX3B0cmRpZmZfdAorX0FDRU9GCisKKworCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgX19pbnQzMiIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBfX2ludDMyLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX19faW50MzIrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKF9faW50MzIgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChfX2ludDMyKSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfX19pbnQzMj15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9fX2ludDMyPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX19faW50MzIiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfX19pbnQzMiIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIF9faW50MzIiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIF9faW50MzIuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9fX2ludDMyK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX19faW50MzIiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MzIpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKF9faW50MzIpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX19faW50MzI9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKF9faW50MzIpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDMyKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoX19pbnQzMikpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoX19pbnQzMikpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChfX2ludDMyKSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9fX2ludDMyPWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChfX2ludDMyKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoX19pbnQzMiksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfX19pbnQzMj0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfX19pbnQzMiIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX19faW50MzIiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfX19JTlQzMiAkYWNfY3Zfc2l6ZW9mX19faW50MzIKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50bWF4X3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50bWF4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKGludG1heF90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoaW50bWF4X3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9pbnRtYXhfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9pbnRtYXhfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGludG1heF90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludG1heF90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludG1heF90IiA9IHllczsgdGhlbgorICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisgICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX2ludG1heF90PSRhY19sbzs7CisnJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKTsgfQordW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX2ludG1heF90PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9pbnRtYXhfdD0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50bWF4X3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9pbnRtYXhfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9JTlRNQVhfVCAkYWNfY3Zfc2l6ZW9mX2ludG1heF90CitfQUNFT0YKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRtYXhfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludG1heF90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKCh1aW50bWF4X3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mICh1aW50bWF4X3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV91aW50bWF4X3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfdWludG1heF90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnRtYXhfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50bWF4X3QiID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB1aW50bWF4X3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHVpbnRtYXhfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3VpbnRtYXhfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50bWF4X3QiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh1aW50bWF4X3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh1aW50bWF4X3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkgICAgICBhY19sbz0gYWNfaGk9CisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodWludG1heF90KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHVpbnRtYXhfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodWludG1heF90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbgorPyopIGFjX2N2X3NpemVvZl91aW50bWF4X3Q9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRtYXhfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRtYXhfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Citsb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHVpbnRtYXhfdCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mICh1aW50bWF4X3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mICh1aW50bWF4X3QpKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHVpbnRtYXhfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mICh1aW50bWF4X3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX3VpbnRtYXhfdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludG1heF90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludG1heF90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl91aW50bWF4X3Q9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3VpbnRtYXhfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3VpbnRtYXhfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9VSU5UTUFYX1QgJGFjX2N2X3NpemVvZl91aW50bWF4X3QKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50cHRyX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50cHRyX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50cHRyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKGludHB0cl90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAoaW50cHRyX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9pbnRwdHJfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9pbnRwdHJfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnRwdHJfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnRwdHJfdCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGludHB0cl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX2ludHB0cl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2ludHB0cl90IiA9IHllczsgdGhlbgorICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisgICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRwdHJfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRwdHJfdCkpKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRwdHJfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX2ludHB0cl90PSRhY19sbzs7CisnJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRwdHJfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludHB0cl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKTsgfQordW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChpbnRwdHJfdCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoaW50cHRyX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX2ludHB0cl90PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRwdHJfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludHB0cl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9pbnRwdHJfdD0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50cHRyX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9pbnRwdHJfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9JTlRQVFJfVCAkYWNfY3Zfc2l6ZW9mX2ludHB0cl90CitfQUNFT0YKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50cHRyX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludHB0cl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKCh1aW50cHRyX3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mICh1aW50cHRyX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV91aW50cHRyX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfdWludHB0cl90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnRwdHJfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50cHRyX3QiID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiB1aW50cHRyX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIHVpbnRwdHJfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV91aW50cHRyX3QiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh1aW50cHRyX3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh1aW50cHRyX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkgICAgICBhY19sbz0gYWNfaGk9CisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodWludHB0cl90KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHVpbnRwdHJfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodWludHB0cl90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbgorPyopIGFjX2N2X3NpemVvZl91aW50cHRyX3Q9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHVpbnRwdHJfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Citsb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHVpbnRwdHJfdCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mICh1aW50cHRyX3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mICh1aW50cHRyX3QpKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHVpbnRwdHJfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mICh1aW50cHRyX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludHB0cl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAodWludHB0cl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl91aW50cHRyX3Q9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3VpbnRwdHJfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9VSU5UUFRSX1QgJGFjX2N2X3NpemVvZl91aW50cHRyX3QKK19BQ0VPRgorCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBmbG9hdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBmbG9hdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9mbG9hdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgoZmxvYXQgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChmbG9hdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2Zsb2F0PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX2Zsb2F0PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2Zsb2F0IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2Zsb2F0IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgZmxvYXQiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGZsb2F0Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZmxvYXQrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZmxvYXQiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChmbG9hdCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGZsb2F0KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGZsb2F0KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGZsb2F0KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChmbG9hdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfZmxvYXQ9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChmbG9hdCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChmbG9hdCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGZsb2F0KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChmbG9hdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChmbG9hdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfZmxvYXQ9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGZsb2F0KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZmxvYXQpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2Zsb2F0PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9mbG9hdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2Zsb2F0IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0ZMT0FUICRhY19jdl9zaXplb2ZfZmxvYXQKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZG91YmxlIiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRvdWJsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKGRvdWJsZSAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGRvdWJsZSkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2RvdWJsZT15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9kb3VibGU9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfZG91YmxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2RvdWJsZSIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGRvdWJsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgZG91YmxlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZG91YmxlK3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2RvdWJsZSIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGRvdWJsZSkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGRvdWJsZSkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChkb3VibGUpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoZG91YmxlKSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChkb3VibGUpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX2RvdWJsZT0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZG91YmxlKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoZG91YmxlKSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGRvdWJsZSkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGRvdWJsZSkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoZG91YmxlKSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGRvdWJsZSkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfZG91YmxlPWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChkb3VibGUpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2RvdWJsZT0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfZG91YmxlIiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0RPVUJMRSAkYWNfY3Zfc2l6ZW9mX2RvdWJsZQorX0FDRU9GCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb25nIGRvdWJsZSIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nIGRvdWJsZS4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9sb25nX2RvdWJsZStzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgobG9uZyBkb3VibGUgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChsb25nIGRvdWJsZSkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2xvbmdfZG91YmxlPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX2xvbmdfZG91YmxlPW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2xvbmdfZG91YmxlIiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2xvbmdfZG91YmxlIiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgbG9uZyBkb3VibGUiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGxvbmcgZG91YmxlLi4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19kb3VibGUrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbG9uZ19kb3VibGUiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgZG91YmxlKSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgZG91YmxlKSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgZG91YmxlKSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGxvbmcgZG91YmxlKSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nIGRvdWJsZSkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfbG9uZ19kb3VibGU9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgZG91YmxlKSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyBkb3VibGUpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlPTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nX2RvdWJsZSIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2xvbmdfZG91YmxlIiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0xPTkdfRE9VQkxFICRhY19jdl9zaXplb2ZfbG9uZ19kb3VibGUKK19BQ0VPRgorCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkZXZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZXZfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9kZXZfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgoZGV2X3QgKikgMCkKKyAgcmV0dXJuIDA7CitpZiAoc2l6ZW9mIChkZXZfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2Rldl90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX2Rldl90PW5vCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2Rldl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2Rldl90IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgZGV2X3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBzaXplIG9mIGRldl90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZGV2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfZGV2X3QiID0geWVzOyB0aGVuCisgICMgVGhlIGNhc3QgdG8gdW5zaWduZWQgbG9uZyB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyAgIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworICAjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyAgIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChkZXZfdCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGRldl90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGRldl90KSkpIDwgMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9LTEgYWNfbWlkPS0xCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGRldl90KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChkZXZfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfZGV2X3Q9JGFjX2xvOzsKKycnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRldl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZGV2X3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChkZXZfdCkpOyB9Cit1bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChkZXZfdCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGRldl90KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChkZXZfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChkZXZfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfZGV2X3Q9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGRldl90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZGV2X3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2Rldl90PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9kZXZfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2Rldl90IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0RFVl9UICRhY19jdl9zaXplb2ZfZGV2X3QKK19BQ0VPRgorCisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZnBvc190IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGZwb3NfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3ZfdHlwZV9mcG9zX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitpZiAoKGZwb3NfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKGZwb3NfdCkpCisgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl90eXBlX2Zwb3NfdD15ZXMKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfY3ZfdHlwZV9mcG9zX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfZnBvc190IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2Zwb3NfdCIgPiY2CisKK2VjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGZwb3NfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgZnBvc190Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl9zaXplb2ZfZnBvc190K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRhY19jdl90eXBlX2Zwb3NfdCIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGZwb3NfdCkpKSA+PSAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGZwb3NfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAkYWNfbWlkICsgMWAKKwkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCSAgICAgIGFjX2xvPSBhY19oaT0KKwkJICAgICAgYnJlYWsKKwkJICAgIGZpCisJCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChmcG9zX3QpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoZnBvc190KSkpID49ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCisJCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgorCQkJIGFjX2xvPSBhY19oaT0KKwkJCSBicmVhaworCQkgICAgICAgZmkKKwkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz0gYWNfaGk9CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCit3aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCisgIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChmcG9zX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZAorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2RvbmUKK2Nhc2UgJGFjX2xvIGluCis/KikgYWNfY3Zfc2l6ZW9mX2Zwb3NfdD0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoZnBvc190KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Citlc2FjCitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGludGVybmFsIGVycm9yOiBub3QgcmVhY2hlZCBpbiBjcm9zcy1jb21waWxlIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2xvbmcgbG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAoZnBvc190KSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGZwb3NfdCkpOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgZXhpdCAoMSk7CisgIGlmICgoKGxvbmcpIChzaXplb2YgKGZwb3NfdCkpKSA8IDApCisgICAgeworICAgICAgbG9uZyBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAoZnBvc190KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGZwb3NfdCkpKSkKKwlleGl0ICgxKTsKKyAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOworICAgIH0KKyAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19jdl9zaXplb2ZfZnBvc190PWBjYXQgY29uZnRlc3QudmFsYAorZWxzZQorICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQorZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworKCBleGl0ICRhY19zdGF0dXMgKQoreyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmcG9zX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChmcG9zX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCitybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2ZpCitybSAtZiBjb25mdGVzdC52YWwKK2Vsc2UKKyAgYWNfY3Zfc2l6ZW9mX2Zwb3NfdD0wCitmaQorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfZnBvc190IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2ZfZnBvc190IiA+JjYKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgU0laRU9GX0ZQT1NfVCAkYWNfY3Zfc2l6ZW9mX2Zwb3NfdAorX0FDRU9GCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtb2RlX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbW9kZV90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX21vZGVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgobW9kZV90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAobW9kZV90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfbW9kZV90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX21vZGVfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9tb2RlX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfbW9kZV90IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgbW9kZV90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBtb2RlX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9tb2RlX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfbW9kZV90IiA9IHllczsgdGhlbgorICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisgICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobW9kZV90KSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobW9kZV90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKG1vZGVfdCkpKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChtb2RlX3QpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKG1vZGVfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfbW9kZV90PSRhY19sbzs7CisnJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChtb2RlX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChtb2RlX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChtb2RlX3QpKTsgfQordW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAobW9kZV90KSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAobW9kZV90KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChtb2RlX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAobW9kZV90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9tb2RlX3Q9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKG1vZGVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKG1vZGVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfbW9kZV90PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9tb2RlX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9tb2RlX3QiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfTU9ERV9UICRhY19jdl9zaXplb2ZfbW9kZV90CitfQUNFT0YKKworCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9mZl90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9mZl90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX29mZl90K3NldH0iID0gc2V0OyB0aGVuCisgIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworaWYgKChvZmZfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKG9mZl90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfb2ZmX3Q9eWVzCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2N2X3R5cGVfb2ZmX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfb2ZmX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfb2ZmX3QiID4mNgorCitlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBvZmZfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2Ygb2ZmX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9vZmZfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9vZmZfdCIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKG9mZl90KSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAob2ZmX3QpKSkgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfaGk9JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCisJCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgorCQkgICAgICBhY19sbz0gYWNfaGk9CisJCSAgICAgIGJyZWFrCisJCSAgICBmaQorCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgZG9uZQorZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAob2ZmX3QpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAob2ZmX3QpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKG9mZl90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Citkb25lCitjYXNlICRhY19sbyBpbgorPyopIGFjX2N2X3NpemVvZl9vZmZfdD0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAob2ZmX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OworZXNhYworZWxzZQorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBpbnRlcm5hbCBlcnJvcjogbm90IHJlYWNoZWQgaW4gY3Jvc3MtY29tcGlsZSIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0Citsb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKG9mZl90KSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKG9mZl90KSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAob2ZmX3QpKSkgPCAwKQorICAgIHsKKyAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKG9mZl90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKG9mZl90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl9vZmZfdD1gY2F0IGNvbmZ0ZXN0LnZhbGAKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKK2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyggZXhpdCAkYWNfc3RhdHVzICkKK3sgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAob2ZmX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChvZmZfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2Zfb2ZmX3Q9MAorZmkKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX29mZl90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2Zfb2ZmX3QiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfT0ZGX1QgJGFjX2N2X3NpemVvZl9vZmZfdAorX0FDRU9GCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzc2l6ZV90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNzaXplX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3R5cGVfc3NpemVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgoc3NpemVfdCAqKSAwKQorICByZXR1cm4gMDsKK2lmIChzaXplb2YgKHNzaXplX3QpKQorICByZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3ZfdHlwZV9zc2l6ZV90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3NzaXplX3Q9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfc3NpemVfdCIgPiY1CitlY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9zc2l6ZV90IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2Ygc3NpemVfdCIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2Ygc3NpemVfdC4uLiAkRUNIT19DIiA+JjYKK2lmIHRlc3QgIiR7YWNfY3Zfc2l6ZW9mX3NzaXplX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc3NpemVfdCIgPSB5ZXM7IHRoZW4KKyAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisgICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgorY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNzaXplX3QpKSkgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89MCBhY19taWQ9MAorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzc2l6ZV90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNzaXplX3QpKSkgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0tMSBhY19taWQ9LTEKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc3NpemVfdCkpKSA+PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19oaT1gZXhwciAnKCcgJGFjX21pZCAnKScgLSAxYAorCQkgICAgICAgaWYgdGVzdCAkYWNfbWlkIC1sZSAkYWNfaGk7IHRoZW4KKwkJCSBhY19sbz0gYWNfaGk9CisJCQkgYnJlYWsKKwkJICAgICAgIGZpCisJCSAgICAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZGAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisjIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgord2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbworICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc3NpemVfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2Zfc3NpemVfdD0kYWNfbG87OworJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc3NpemVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNzaXplX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzc2l6ZV90KSk7IH0KK3Vuc2lnbmVkIGxvbmcgdWxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKHNzaXplX3QpKTsgfQorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CitpbnQKK21haW4gKCkKK3sKKworICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOworICBpZiAoISBmKQorICAgIGV4aXQgKDEpOworICBpZiAoKChsb25nKSAoc2l6ZW9mIChzc2l6ZV90KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzc2l6ZV90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsZFxuIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpID0gdWxvbmd2YWwgKCk7CisgICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKHNzaXplX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKKyAgICB9CisgIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdCRhY19leGVleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorICAoZXZhbCAkYWNfbGluaykgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfY3Zfc2l6ZW9mX3NzaXplX3Q9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNzaXplX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzc2l6ZV90KSwgNzcKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQorcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitmaQorcm0gLWYgY29uZnRlc3QudmFsCitlbHNlCisgIGFjX2N2X3NpemVvZl9zc2l6ZV90PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zc2l6ZV90IiA+JjUKK2VjaG8gIiR7RUNIT19UfSRhY19jdl9zaXplb2Zfc3NpemVfdCIgPiY2CitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9TU0laRV9UICRhY19jdl9zaXplb2Zfc3NpemVfdAorX0FDRU9GCisKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0aW1lX3QiID4mNQorZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdGltZV90Li4uICRFQ0hPX0MiID4mNgoraWYgdGVzdCAiJHthY19jdl90eXBlX3RpbWVfdCtzZXR9IiA9IHNldDsgdGhlbgorICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZWxzZQorICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK2lmICgodGltZV90ICopIDApCisgIHJldHVybiAwOworaWYgKHNpemVvZiAodGltZV90KSkKKyAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3R5cGVfdGltZV90PXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCithY19jdl90eXBlX3RpbWVfdD1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV90aW1lX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdGltZV90IiA+JjYKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgdGltZV90IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiB0aW1lX3QuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2FjX2N2X3NpemVvZl90aW1lX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfdGltZV90IiA9IHllczsgdGhlbgorICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisgICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisgICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCitjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodGltZV90KSkpID49IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2xvPTAgYWNfbWlkPTAKKyAgd2hpbGUgOjsgZG8KKyAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGNvbmZkZWZzLmguICAqLworX0FDRU9GCitjYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKK2NhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAodGltZV90KSkpIDw9ICRhY19taWQpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICRhY19taWQgKyAxYAorCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KKwkJICAgICAgYWNfbG89IGFjX2hpPQorCQkgICAgICBicmVhaworCQkgICAgZmkKKwkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHRpbWVfdCkpKSA8IDApXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK3JtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKK2lmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKKyAgYWNfc3RhdHVzPSQ/CisgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCisgIHJtIC1mIGNvbmZ0ZXN0LmVyMQorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIJCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mICh0aW1lX3QpKSkgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1CisgIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KKyAgYWNfbG89JGFjX21pZDsgYnJlYWsKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKKwkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgYWNfbG89IGFjX2hpPQorCQkJIGJyZWFrCisJCSAgICAgICBmaQorCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPSBhY19oaT0KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAoraW50CittYWluICgpCit7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHRpbWVfdCkpKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKK2FjX2xvPWBleHByICcoJyAkYWNfbWlkICcpJyArIDFgCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4KKz8qKSBhY19jdl9zaXplb2ZfdGltZV90PSRhY19sbzs7CisnJykgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh0aW1lX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mICh0aW1lX3QpLCA3NworU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKK2VzYWMKK2Vsc2UKKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW50ZXJuYWwgZXJyb3I6IG5vdCByZWFjaGVkIGluIGNyb3NzLWNvbXBpbGUiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mICh0aW1lX3QpKTsgfQordW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAodGltZV90KSk7IH0KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgoraW50CittYWluICgpCit7CisKKyAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKKyAgaWYgKCEgZikKKyAgICBleGl0ICgxKTsKKyAgaWYgKCgobG9uZykgKHNpemVvZiAodGltZV90KSkpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGkgPSBsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mICh0aW1lX3QpKSkpCisJZXhpdCAoMSk7CisgICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKKyAgICB9CisgIGVsc2UKKyAgICB7CisgICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAodGltZV90KSkpKQorCWV4aXQgKDEpOworICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7CisgICAgfQorICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2xpbmspIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCisgIGFjX2N2X3NpemVvZl90aW1lX3Q9YGNhdCBjb25mdGVzdC52YWxgCitlbHNlCisgIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1CitlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCisoIGV4aXQgJGFjX3N0YXR1cyApCit7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHRpbWVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHRpbWVfdCksIDc3CitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorZmkKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorZWxzZQorICBhY19jdl9zaXplb2ZfdGltZV90PTAKK2ZpCitmaQorZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl90aW1lX3QiID4mNQorZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl90aW1lX3QiID4mNgorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBTSVpFT0ZfVElNRV9UICRhY19jdl9zaXplb2ZfdGltZV90CitfQUNFT0YKKworCisKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCitmb3IgYWNfZnVuYyBpbiBhY2Nlc3MgYWxsb2NhIGF0ZXhpdCBhdG9pIGF0b2wgY2htb2QgY2hvd24gY2xvY2tfZ2V0Y3B1Y2xvY2tpZCBjbG9ja19nZXRyZXMgY2xvY2tfZ2V0dGltZSBjdGltZSBkaWZmdGltZSBmc3RhdCBnZXRlbnYgZ2V0cGFnZXNpemUgZ2V0cnVzYWdlIGdldHRpbWVvZmRheSBnbXRpbWUgaXNhdHR5IGxvY2FsdGltZSBsb25nam1wIGxzdGF0IG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQgbWtkaXIgbWt0aW1lIG1tYXAgbXByb3RlY3QgbXVubWFwIHFzb3J0IHJhaXNlIHJtZGlyIHNldGptcCBzaWduYWwgc25wcmludGYgc3RyY2FzZWNtcCBzdHJjaHIgc3RyZHVwIHN0cmVycm9yIHN0cmZ0aW1lIHN0cmljbXAgc3RybmNhc2VjbXAgc3RybmljbXAgc3RycmNociBzdHJzdHIgdGltZSB1bWFzayB1dGltZSB2c25wcmludGYKK2RvCithc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1CitlY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKK2lmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KKyAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2Vsc2UKKyAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBjb25mZGVmcy5oLiAgKi8KK19BQ0VPRgorY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0CitjYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisvKiBlbmQgY29uZmRlZnMuaC4gICovCisvKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KKyAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLworI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKKworLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAorICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgorICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKKyAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLworCisjaWZkZWYgX19TVERDX18KKyMgaW5jbHVkZSA8bGltaXRzLmg+CisjZWxzZQorIyBpbmNsdWRlIDxhc3NlcnQuaD4KKyNlbmRpZgorCisjdW5kZWYgJGFjX2Z1bmMKKworLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgoreworI2VuZGlmCisvKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworY2hhciAkYWNfZnVuYyAoKTsKKy8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKKyAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAorICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLworI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCitjaG9rZSBtZQorI2Vsc2UKK2NoYXIgKCpmKSAoKSA9ICRhY19mdW5jOworI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3JldHVybiBmICE9ICRhY19mdW5jOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAoraWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CisgIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQorICBhY19zdGF0dXM9JD8KKyAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKKyAgcm0gLWYgY29uZnRlc3QuZXIxCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJworICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQorICAoZXZhbCAkYWNfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCisJIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBldmFsICIkYXNfYWNfdmFyPXllcyIKK2Vsc2UKKyAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworZXZhbCAiJGFzX2FjX3Zhcj1ubyIKK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2VjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKK2VjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKK2lmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisKK2lmIHRlc3QgIlgkR0NDIiA9IFh5ZXM7IHRoZW4KK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKKyAgICAgdGVzdCAiWCRMSUJTIiAhPSAiWCIgJiYgTElCUz0iJExJQlMgIgorICAgICBMSUJTPSIke0xJQlN9LWx3aW5tbSIgOzsKKyopCisgICAgIDs7Citlc2FjCitmaQorCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gV3JpdGUgb3V0cHV0IGZpbGVzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworCittZnhfdG1wPSItSSRzcmNkaXIiCittZnhfc2F2ZV9DUFBGTEFHUz0kQ1BQRkxBR1MKK3Rlc3QgIlgkbWZ4X3RtcCIgPSAiWCIgfHwgQ1BQRkxBR1M9IiRtZnhfdG1wICRDUFBGTEFHUyIKKworZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgeW91ciBjb21waWxlciBwYXNzZXMgdGhlIEFDQyBjb25mb3JtYW5jZSB0ZXN0IiA+JjUKK2VjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB5b3VyIGNvbXBpbGVyIHBhc3NlcyB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QuLi4gJEVDSE9fQyIgPiY2CisKK2NhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogY29uZmRlZnMuaC4gICovCitfQUNFT0YKK2NhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAorY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2RlZmluZSBBQ0NfQ09ORklHX05PX0hFQURFUiAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNEX0ggMQorI2luY2x1ZGUgInNyYy9taW5pYWNjLmgiCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNpbmNsdWRlICJzcmMvbWluaWFjYy5oIgorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKyNkZWZpbmUgQUNDQ0hLX0FTU0VSVChleHByKSAgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoZXhwcikKK3N0YXRpYyB2b2lkIHRlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQodm9pZCkgeworI2luY2x1ZGUgInNyYy9taW5pYWNjLmgiCit9CisKKyN1bmRlZiBOREVCVUcKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBhc3NlcnQoZXhwcik7CitzdGF0aWMgaW50IHRlc3RfYWNjX3J1bl90aW1lX2Fzc2VydChpbnQgcikgeworI2luY2x1ZGUgInNyYy9taW5pYWNjLmgiCityZXR1cm4gcjsKK30KKworaW50CittYWluICgpCit7CisKK3Rlc3RfYWNjX2NvbXBpbGVfdGltZV9hc3NlcnQoKTsKK2lmICh0ZXN0X2FjY19ydW5fdGltZV9hc3NlcnQoMSkgIT0gMSkgcmV0dXJuIDE7CisKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCisKK21meF90bXA9RkFJTEVECitybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0CitpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCisgIGFjX3N0YXR1cz0kPworICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgorICBybSAtZiBjb25mdGVzdC5lcjEKKyAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgorCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCisgIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1CisgIChldmFsICRhY190cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKKwkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKKyAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKKyAgKGV2YWwgJGFjX3RyeSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgorICBtZnhfdG1wPXllcworZWxzZQorICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorCitmaQorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgY29uZnRlc3QuJGFjX29iamV4dAorCitDUFBGTEFHUz0kbWZ4X3NhdmVfQ1BQRkxBR1MKKworZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG1meF90bXAiID4mNQorZWNobyAiJHtFQ0hPX1R9JG1meF90bXAiID4mNgorY2FzZSB4JG1meF90bXAgaW4KKyAgeHBhc3NlZCB8IHh5ZXMpIDs7CisgICopCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogIiA+JjUKK2VjaG8gIiRhc19tZTogIiA+JjY7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFlvdXIgY29tcGlsZXIgZmFpbGVkIHRoZSBBQ0MgY29uZm9ybWFuY2UgdGVzdCAtIGZvciBkZXRhaWxzIHNlZSAiID4mNQorZWNobyAiJGFzX21lOiBZb3VyIGNvbXBpbGVyIGZhaWxlZCB0aGUgQUNDIGNvbmZvcm1hbmNlIHRlc3QgLSBmb3IgZGV0YWlscyBzZWUgIiA+JjY7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFxgY29uZmlnLmxvZycuIFBsZWFzZSBjaGVjayB0aGF0IGxvZyBmaWxlIGFuZCBjb25zaWRlciBzZW5kaW5nIiA+JjUKK2VjaG8gIiRhc19tZTogXGBjb25maWcubG9nJy4gUGxlYXNlIGNoZWNrIHRoYXQgbG9nIGZpbGUgYW5kIGNvbnNpZGVyIHNlbmRpbmciID4mNjt9CisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uIiA+JjUKK2VjaG8gIiRhc19tZTogYSBwYXRjaCBvciBidWctcmVwb3J0IHRvIDwke1BBQ0tBR0VfQlVHUkVQT1JUfT4uIiA+JjY7fQorICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFRoYW5rcyBmb3IgeW91ciBzdXBwb3J0LiIgPiY1CitlY2hvICIkYXNfbWU6IFRoYW5rcyBmb3IgeW91ciBzdXBwb3J0LiIgPiY2O30KKyAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiAiID4mNQorZWNobyAiJGFzX21lOiAiID4mNjt9CisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQUNDIGNvbmZvcm1hbmNlIHRlc3QgZmFpbGVkLiBTdG9wLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBBQ0MgY29uZm9ybWFuY2UgdGVzdCBmYWlsZWQuIFN0b3AuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgOzsKK2VzYWMKKworCitpZiB0ZXN0IC1yIC5Db25mLnNldHRpbmdzMjsgdGhlbgorICAgIC4gLi8uQ29uZi5zZXR0aW5nczIKK2ZpCisKK3Rlc3QgIlgkQ1BQRkxBR1MiICE9ICJYIiAmJiBDUFBGTEFHUz0iJENQUEZMQUdTICIKK0NQUEZMQUdTPSIke0NQUEZMQUdTfS1ETFpPX0hBVkVfQ09ORklHX0giCitpZiB0ZXN0ICJYJGVuYWJsZV9hc20iICE9IFhubzsgdGhlbgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURMWk9fVVNFX0FTTSIKK2ZpCisKKworCisKKworY29uZmlndXJlX0NQUEZMQUdTPSRDUFBGTEFHUworY29uZmlndXJlX0NGTEFHUz0kQ0ZMQUdTCisKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBNYWtlZmlsZSBleGFtcGxlcy9NYWtlZmlsZSBpbmNsdWRlL01ha2VmaWxlIGluY2x1ZGUvbHpvL01ha2VmaWxlIGx6b3Rlc3QvTWFrZWZpbGUgbWluaWx6by9NYWtlZmlsZSBzcmMvTWFrZWZpbGUgdGVzdHMvTWFrZWZpbGUiCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCBkb24ndCBwdXQgbmV3bGluZXMgaW4gY2FjaGUgdmFyaWFibGVzJyB2YWx1ZXMuCisjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKKyMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCit7CisgIChzZXQpIDI+JjEgfAorICAgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCisgICAgKmFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgICAgc2VkIC1uIFwKKwkicy8nLydcXFxcJycvZzsKKwkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKKyAgICAgIDs7CisgICAgKikKKyAgICAgICMgYHNldCcgcXVvdGVzIGNvcnJlY3RseSBhcyByZXF1aXJlZCBieSBQT1NJWCwgc28gZG8gbm90IGFkZCBxdW90ZXMuCisgICAgICBzZWQgLW4gXAorCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgOzsKKyAgICBlc2FjOworfSB8CisgIHNlZCAnCisgICAgIHQgY2xlYXIKKyAgICAgOiBjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIC9eYWNfY3ZfZW52LyFzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOiBlbmQnID4+Y29uZmNhY2hlCitpZiBkaWZmICRjYWNoZV9maWxlIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICRjYWNoZV9maWxlOyB0aGVuCisgICAgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCIgJiYgZWNobyAidXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiCisgICAgY2F0IGNvbmZjYWNoZSA+JGNhY2hlX2ZpbGUKKyAgZWxzZQorICAgIGVjaG8gIm5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIgorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCit0ZXN0ICJ4JHByZWZpeCIgPSB4Tk9ORSAmJiBwcmVmaXg9JGFjX2RlZmF1bHRfcHJlZml4CisjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KK3Rlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKKworIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCisjICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0veworcy86KlwkKHNyY2Rpcik6Ki86LzsKK3MvOipcJHtzcmNkaXJ9OiovOi87CitzLzoqQHNyY2RpckA6Ki86LzsKK3MvXlwoW149XSo9WwkgXSpcKToqL1wxLzsKK3MvOiokLy87CitzL15bXj1dKj1bCSBdKiQvLzsKK30nCitmaQorCitERUZTPS1ESEFWRV9DT05GSUdfSAorCithY19saWJvYmpzPQorYWNfbHRsaWJvYmpzPQorZm9yIGFjX2kgaW4gOiAkTElCT0JKUzsgZG8gdGVzdCAieCRhY19pIiA9IHg6ICYmIGNvbnRpbnVlCisgICMgMS4gUmVtb3ZlIHRoZSBleHRlbnNpb24sIGFuZCAkVSBpZiBhbHJlYWR5IGluc3RhbGxlZC4KKyAgYWNfaT1gZWNobyAiJGFjX2kiIHwKKwkgc2VkICdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nYAorICAjIDIuIEFkZCB0aGVtLgorICBhY19saWJvYmpzPSIkYWNfbGlib2JqcyAkYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhY19sdGxpYm9ianM9IiRhY19sdGxpYm9ianMgJGFjX2kiJyRVLmxvJworZG9uZQorTElCT0JKUz0kYWNfbGlib2JqcworCitMVExJQk9CSlM9JGFjX2x0bGlib2JqcworCisKK2lmIHRlc3QgLXogIiR7TUFJTlRBSU5FUl9NT0RFX1RSVUV9IiAmJiB0ZXN0IC16ICIke01BSU5UQUlORVJfTU9ERV9GQUxTRX0iOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTUFJTlRBSU5FUl9NT0RFXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJNQUlOVEFJTkVSX01PREVcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2lmIHRlc3QgLXogIiR7QU1ERVBfVFJVRX0iICYmIHRlc3QgLXogIiR7QU1ERVBfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcIkFNREVQXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJBTURFUFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQoraWYgdGVzdCAteiAiJHthbV9fZmFzdGRlcENDX1RSVUV9IiAmJiB0ZXN0IC16ICIke2FtX19mYXN0ZGVwQ0NfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ0NcIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorZmkKK2lmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfVFJVRX0iICYmIHRlc3QgLXogIiR7YW1fX2Zhc3RkZXBDWFhfRkFMU0V9IjsgdGhlbgorICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjb25kaXRpb25hbCBcImFtX19mYXN0ZGVwQ1hYXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY29uZGl0aW9uYWwgXCJhbV9fZmFzdGRlcENYWFwiIHdhcyBuZXZlciBkZWZpbmVkLgorVXN1YWxseSB0aGlzIG1lYW5zIHRoZSBtYWNybyB3YXMgb25seSBpbnZva2VkIGNvbmRpdGlvbmFsbHkuIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CitmaQoraWYgdGVzdCAteiAiJHtMWk9fVVNFX0FTTV9UUlVFfSIgJiYgdGVzdCAteiAiJHtMWk9fVVNFX0FTTV9GQUxTRX0iOyB0aGVuCisgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNvbmRpdGlvbmFsIFwiTFpPX1VTRV9BU01cIiB3YXMgbmV2ZXIgZGVmaW5lZC4KK1VzdWFsbHkgdGhpcyBtZWFucyB0aGUgbWFjcm8gd2FzIG9ubHkgaW52b2tlZCBjb25kaXRpb25hbGx5LiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjb25kaXRpb25hbCBcIkxaT19VU0VfQVNNXCIgd2FzIG5ldmVyIGRlZmluZWQuCitVc3VhbGx5IHRoaXMgbWVhbnMgdGhlIG1hY3JvIHdhcyBvbmx5IGludm9rZWQgY29uZGl0aW9uYWxseS4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KK2ZpCisKKzogJHtDT05GSUdfU1RBVFVTPS4vY29uZmlnLnN0YXR1c30KK2FjX2NsZWFuX2ZpbGVzX3NhdmU9JGFjX2NsZWFuX2ZpbGVzCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzICRDT05GSUdfU1RBVFVTIgoreyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgPiY2O30KK2NhdCA+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorIyBSdW4gdGhpcyBmaWxlIHRvIHJlY3JlYXRlIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uCisjIENvbXBpbGVyIG91dHB1dCBwcm9kdWNlZCBieSBjb25maWd1cmUsIHVzZWZ1bCBmb3IgZGVidWdnaW5nCisjIGNvbmZpZ3VyZSwgaXMgaW4gY29uZmlnLmxvZyBpZiBpdCBleGlzdHMuCisKK2RlYnVnPWZhbHNlCithY19jc19yZWNoZWNrPWZhbHNlCithY19jc19zaWxlbnQ9ZmFsc2UKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJworZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgc2V0IC1vIHBvc2l4CitmaQorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc191bnNldD11bnNldAorZWxzZQorICBhc191bnNldD1mYWxzZQorZmkKKworCisjIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KKyRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorUFMxPSckICcKK1BTMj0nPiAnCitQUzQ9JysgJworCisjIE5MUyBudWlzYW5jZXMuCitmb3IgYXNfdmFyIGluIFwKKyAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKKyAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKKyAgTENfVEVMRVBIT05FIExDX1RJTUUKK2RvCisgIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCisgICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgJGFzX3ZhcgorICBmaQorZG9uZQorCisjIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2V4cHI9ZXhwcgorZWxzZQorICBhc19leHByPWZhbHNlCitmaQorCitpZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCisgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCitlbHNlCisgIGFzX2Jhc2VuYW1lPWZhbHNlCitmaQorCisKKyMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KK2FzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisKKworIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgorIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgorYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCithc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKK2FzX2NyX0xldHRlcnM9JGFzX2NyX2xldHRlcnMkYXNfY3JfTEVUVEVSUworYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JworYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAorICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCisgIGNobW9kICt4IGNvbmYkJC5zaAorICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICBlbHNlCisgICAgUEFUSF9TRVBBUkFUT1I9OgorICBmaQorICBybSAtZiBjb25mJCQuc2gKK2ZpCisKKworICBhc19saW5lbm9fMT0kTElORU5PCisgIGFzX2xpbmVub18yPSRMSU5FTk8KKyAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAorICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKKyAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7CisgICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCisgICMgcmVsYXRpdmUgb3Igbm90LgorICBjYXNlICQwIGluCisgICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OworICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKK2RvbmUKKworICAgICAgIDs7CisgIGVzYWMKKyAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KKyAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICAgIGFzX215c2VsZj0kMAorICBmaQorICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIHBhdGgiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgZmkKKyAgY2FzZSAkQ09ORklHX1NIRUxMIGluCisgICcnKQorICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbworCSBjYXNlICRhc19kaXIgaW4KKwkgLyopCisJICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCisgIGFzX2xpbmVub18xPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTworICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCisgIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgorICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KKwkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9CisJICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KKwkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBleHBvcnQgQ09ORklHX1NIRUxMCisJICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQorCSAgIGZpOzsKKwkgZXNhYworICAgICAgIGRvbmUKK2RvbmUKKzs7CisgIGVzYWMKKworICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCisgICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKKyAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAorICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQorICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKKyAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KKyAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCisgICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgICAgc2VkICcKKyAgICAgIE4KKyAgICAgIHMsJCwtLAorICAgICAgOiBsb29wCisgICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIHQgbG9vcAorICAgICAgcywtJCwsCisgICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgJyA+JGFzX21lLmxpbmVubyAmJgorICBjaG1vZCAreCAkYXNfbWUubGluZW5vIHx8CisgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSAkYXNfbWUubGluZW5vOyByZXJ1biB3aXRoIGEgUE9TSVggc2hlbGwiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKworICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcworICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKKyAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgorICAuIC4vJGFzX21lLmxpbmVubworICAjIEV4aXQgc3RhdHVzIGlzIHRoYXQgb2YgdGhlIGxhc3QgY29tbWFuZC4KKyAgZXhpdAorfQorCisKK2Nhc2UgYGVjaG8gInRlc3RpbmdcYyI7IGVjaG8gMSwyLDNgLGBlY2hvIC1uIHRlc3Rpbmc7IGVjaG8gMSwyLDNgIGluCisgICpjKiwtbiopIEVDSE9fTj0gRUNIT19DPScKKycgRUNIT19UPScJJyA7OworICAqYyosKiAgKSBFQ0hPX049LW4gRUNIT19DPSBFQ0hPX1Q9IDs7CisgICopICAgICAgIEVDSE9fTj0gRUNIT19DPSdcYycgRUNIT19UPSA7OworZXNhYworCitpZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc19leHByPWV4cHIKK2Vsc2UKKyAgYXNfZXhwcj1mYWxzZQorZmkKKworcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK2VjaG8gPmNvbmYkJC5maWxlCitpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKKyAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCisgIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgorICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKKyAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxzZQorICAgIGFzX2xuX3M9J2xuIC1zJworICBmaQorZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfbG5fcz1sbgorZWxzZQorICBhc19sbl9zPSdjcCAtcCcKK2ZpCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZmlsZQorCitpZiBta2RpciAtcCAuIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX21rZGlyX3A9OgorZWxzZQorICB0ZXN0IC1kIC4vLXAgJiYgcm1kaXIgLi8tcAorICBhc19ta2Rpcl9wPWZhbHNlCitmaQorCithc19leGVjdXRhYmxlX3A9InRlc3QgLWYiCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KK2FzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCisKKyMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCB2YXJpYWJsZSBuYW1lLgorYXNfdHJfc2g9ImV2YWwgc2VkICd5JSorJXBwJTtzJVteXyRhc19jcl9hbG51bV0lXyVnJyIKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4KK2FzX25sPScKKycKK0lGUz0iIAkkYXNfbmwiCisKKyMgQ0RQQVRILgorJGFzX3Vuc2V0IENEUEFUSAorCitleGVjIDY+JjEKKworIyBPcGVuIHRoZSBsb2cgcmVhbCBzb29uLCB0byBrZWVwIFwkWzBdIGFuZCBzbyBvbiBtZWFuaW5nZnVsLCBhbmQgdG8KKyMgcmVwb3J0IGFjdHVhbCBpbnB1dCB2YWx1ZXMgb2YgQ09ORklHX0ZJTEVTIGV0Yy4gaW5zdGVhZCBvZiB0aGVpcgorIyB2YWx1ZXMgYWZ0ZXIgb3B0aW9ucyBoYW5kbGluZy4gIExvZ2dpbmcgLS12ZXJzaW9uIGV0Yy4gaXMgT0suCitleGVjIDU+PmNvbmZpZy5sb2cKK3sKKyAgZWNobworICBzZWQgJ2g7cy8uLy0vZztzL14uLi4vIyMgLztzLy4uLiQvICMjLztwO3g7cDt4JyA8PF9BU0JPWAorIyMgUnVubmluZyAkYXNfbWUuICMjCitfQVNCT1gKK30gPiY1CitjYXQgPiY1IDw8X0NTRU9GCisKK1RoaXMgZmlsZSB3YXMgZXh0ZW5kZWQgYnkgbHpvICRhc19tZSAyLjAzLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OS4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcworCisgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKKyAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCisgIENPTkZJR19MSU5LUyAgICA9ICRDT05GSUdfTElOS1MKKyAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUworICAkICQwICRACisKK19DU0VPRgorZWNobyAib24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgIiA+JjUKK2VjaG8gPiY1CitfQUNFT0YKKworIyBGaWxlcyB0aGF0IGNvbmZpZy5zdGF0dXMgd2FzIG1hZGUgZm9yLgoraWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19maWxlcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2ZpbGVzPVwiJGFjX2NvbmZpZ19maWxlc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitpZiB0ZXN0IC1uICIkYWNfY29uZmlnX2hlYWRlcnMiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19oZWFkZXJzPVwiJGFjX2NvbmZpZ19oZWFkZXJzXCIiID4+JENPTkZJR19TVEFUVVMKK2ZpCisKK2lmIHRlc3QgLW4gIiRhY19jb25maWdfbGlua3MiOyB0aGVuCisgIGVjaG8gImNvbmZpZ19saW5rcz1cIiRhY19jb25maWdfbGlua3NcIiIgPj4kQ09ORklHX1NUQVRVUworZmkKKworaWYgdGVzdCAtbiAiJGFjX2NvbmZpZ19jb21tYW5kcyI7IHRoZW4KKyAgZWNobyAiY29uZmlnX2NvbW1hbmRzPVwiJGFjX2NvbmZpZ19jb21tYW5kc1wiIiA+PiRDT05GSUdfU1RBVFVTCitmaQorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKworYWNfY3NfdXNhZ2U9IlwKK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZQorY3VycmVudCBjb25maWd1cmF0aW9uLgorCitVc2FnZTogJDAgW09QVElPTlNdIFtGSUxFXS4uLgorCisgIC1oLCAtLWhlbHAgICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgICBwcmludCB2ZXJzaW9uIG51bWJlciwgdGhlbiBleGl0CisgIC1xLCAtLXF1aWV0ICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCisgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCisgIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KKwkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCisgIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQorCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorCitDb25maWd1cmF0aW9uIGZpbGVzOgorJGNvbmZpZ19maWxlcworCitDb25maWd1cmF0aW9uIGhlYWRlcnM6CiskY29uZmlnX2hlYWRlcnMKKworQ29uZmlndXJhdGlvbiBjb21tYW5kczoKKyRjb25maWdfY29tbWFuZHMKKworUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2FjX2NzX3ZlcnNpb249IlxcCitsem8gY29uZmlnLnN0YXR1cyAyLjAzCitjb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCisgIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorCitDb3B5cmlnaHQgKEMpIDIwMDMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitUaGlzIGNvbmZpZy5zdGF0dXMgc2NyaXB0IGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KK2dpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCitzcmNkaXI9JHNyY2RpcgorSU5TVEFMTD0iJElOU1RBTEwiCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisjIElmIG5vIGZpbGUgYXJlIHNwZWNpZmllZCBieSB0aGUgdXNlciwgdGhlbiB3ZSBuZWVkIHRvIHByb3ZpZGUgZGVmYXVsdAorIyB2YWx1ZS4gIEJ5IHdlIG5lZWQgdG8ga25vdyBpZiBmaWxlcyB3ZXJlIHNwZWNpZmllZCBieSB0aGUgdXNlci4KK2FjX25lZWRfZGVmYXVsdHM9Ogord2hpbGUgdGVzdCAkIyAhPSAwCitkbworICBjYXNlICQxIGluCisgIC0tKj0qKQorICAgIGFjX29wdGlvbj1gZXhwciAieCQxIiA6ICd4XChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJ4JDEiIDogJ3hbXj1dKj1cKC4qXCknYAorICAgIGFjX3NoaWZ0PToKKyAgICA7OworICAtKikKKyAgICBhY19vcHRpb249JDEKKyAgICBhY19vcHRhcmc9JDIKKyAgICBhY19zaGlmdD1zaGlmdAorICAgIDs7CisgICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKKyAgICAgIyBhcmd1bWVudHMuCisgICAgIGFjX29wdGlvbj0kMQorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKKyAgZXNhYworCisgIGNhc2UgJGFjX29wdGlvbiBpbgorICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCisgICAgYWNfY3NfcmVjaGVjaz06IDs7CisgIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCisgICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgLS1oZSB8IC0taCkKKyAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgorICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKKyAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgICAgZGVidWc9OiA7OworICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQorICAgICRhY19zaGlmdAorICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlYWRlciB8IC0taGVhZGUgfCAtLWhlYWQgfCAtLWhlYSApCisgICAgJGFjX3NoaWZ0CisgICAgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyAkYWNfb3B0YXJnIgorICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAorICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCisgICAgYWNfY3Nfc2lsZW50PTogOzsKKworICAjIFRoaXMgaXMgYW4gZXJyb3IuCisgIC0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQorVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisKKyAgKikgYWNfY29uZmlnX3RhcmdldHM9IiRhY19jb25maWdfdGFyZ2V0cyAkMSIgOzsKKworICBlc2FjCisgIHNoaWZ0Citkb25lCisKK2FjX2NvbmZpZ3VyZV9leHRyYV9hcmdzPQorCitpZiAkYWNfY3Nfc2lsZW50OyB0aGVuCisgIGV4ZWMgNj4vZGV2L251bGwKKyAgYWNfY29uZmlndXJlX2V4dHJhX2FyZ3M9IiRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLXNpbGVudCIKK2ZpCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2lmIFwkYWNfY3NfcmVjaGVjazsgdGhlbgorICBlY2hvICJydW5uaW5nICRTSEVMTCAkMCAiICRhY19jb25maWd1cmVfYXJncyBcJGFjX2NvbmZpZ3VyZV9leHRyYV9hcmdzICIgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24iID4mNgorICBleGVjICRTSEVMTCAkMCAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorZmkKKworX0FDRU9GCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisjCisjIElOSVQtQ09NTUFORFMgc2VjdGlvbi4KKyMKKworQU1ERVBfVFJVRT0iJEFNREVQX1RSVUUiIGFjX2F1eF9kaXI9IiRhY19hdXhfZGlyIgorCitfQUNFT0YKKworCisKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCitkbworICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KKyAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCisgICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGUiIDs7CisgICJleGFtcGxlcy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZXhhbXBsZXMvTWFrZWZpbGUiIDs7CisgICJpbmNsdWRlL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBpbmNsdWRlL01ha2VmaWxlIiA7OworICAiaW5jbHVkZS9sem8vTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGluY2x1ZGUvbHpvL01ha2VmaWxlIiA7OworICAibHpvdGVzdC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbHpvdGVzdC9NYWtlZmlsZSIgOzsKKyAgIm1pbmlsem8vTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIG1pbmlsem8vTWFrZWZpbGUiIDs7CisgICJzcmMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHNyYy9NYWtlZmlsZSIgOzsKKyAgInRlc3RzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyB0ZXN0cy9NYWtlZmlsZSIgOzsKKyAgImRlcGZpbGVzIiApIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZXBmaWxlcyIgOzsKKyAgImNvbmZpZy5oIiApIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgY29uZmlnLmg6Y29uZmlnLmhpbiIgOzsKKyAgKikgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBhcmd1bWVudDogJGFjX2NvbmZpZ190YXJnZXQiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OworICBlc2FjCitkb25lCisKKyMgSWYgdGhlIHVzZXIgZGlkIG5vdCB1c2UgdGhlIGFyZ3VtZW50cyB0byBzcGVjaWZ5IHRoZSBpdGVtcyB0byBpbnN0YW50aWF0ZSwKKyMgdGhlbiB0aGUgZW52dmFyIGludGVyZmFjZSBpcyB1c2VkLiAgU2V0IG9ubHkgdGhvc2UgdGhhdCBhcmUgbm90LgorIyBXZSB1c2UgdGhlIGxvbmcgZm9ybSBmb3IgdGhlIGRlZmF1bHQgYXNzaWdubWVudCBiZWNhdXNlIG9mIGFuIGV4dHJlbWVseQorIyBiaXphcnJlIGJ1ZyBvbiBTdW5PUyA0LjEuMy4KK2lmICRhY19uZWVkX2RlZmF1bHRzOyB0aGVuCisgIHRlc3QgIiR7Q09ORklHX0ZJTEVTK3NldH0iID0gc2V0IHx8IENPTkZJR19GSUxFUz0kY29uZmlnX2ZpbGVzCisgIHRlc3QgIiR7Q09ORklHX0hFQURFUlMrc2V0fSIgPSBzZXQgfHwgQ09ORklHX0hFQURFUlM9JGNvbmZpZ19oZWFkZXJzCisgIHRlc3QgIiR7Q09ORklHX0NPTU1BTkRTK3NldH0iID0gc2V0IHx8IENPTkZJR19DT01NQU5EUz0kY29uZmlnX2NvbW1hbmRzCitmaQorCisjIEhhdmUgYSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGZvciBjb252ZW5pZW5jZS4gIE1ha2UgaXQgaW4gdGhlIGJ1aWxkIHRyZWUKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIHRvIHB1dCBpdCBoZXJlLCBhbmQgaW4gYWRkaXRpb24sCisjIGNyZWF0aW5nIGFuZCBtb3ZpbmcgZmlsZXMgZnJvbSAvdG1wIGNhbiBzb21ldGltZXMgY2F1c2UgcHJvYmxlbXMuCisjIENyZWF0ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnksIGFuZCBob29rIGZvciBpdHMgcmVtb3ZhbCB1bmxlc3MgZGVidWdnaW5nLgorJGRlYnVnIHx8Cit7CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/OyBybSAtcmYgJHRtcCAmJiBleGl0ICRleGl0X3N0YXR1cycgMAorICB0cmFwICd7IChleGl0IDEpOyBleGl0IDE7IH0nIDEgMiAxMyAxNQorfQorCisjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KKworeworICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCisgIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCit9ICB8fAoreworICB0bXA9Li9jb25mc3RhdCQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAkdG1wKQorfSB8fAoreworICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQorfQorCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKKworIworIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KKyMKKworIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCisjIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKK2lmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgorICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgorICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOworICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKK3MsQFNIRUxMQCwkU0hFTEwsO3QgdAorcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0CitzLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAorcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKK3MsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0CitzLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKK3MsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAorcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0CitzLEBwcmVmaXhALCRwcmVmaXgsO3QgdAorcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAorcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKK3MsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKK3MsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKK3MsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKK3MsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKK3MsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAorcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAorcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKK3MsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKK3MsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKK3MsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKK3MsQG1hbmRpckAsJG1hbmRpciw7dCB0CitzLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKK3MsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKK3MsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0CitzLEBERUZTQCwkREVGUyw7dCB0CitzLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAorcyxARUNIT19OQCwkRUNIT19OLDt0IHQKK3MsQEVDSE9fVEAsJEVDSE9fVCw7dCB0CitzLEBMSUJTQCwkTElCUyw7dCB0CitzLEBidWlsZEAsJGJ1aWxkLDt0IHQKK3MsQGJ1aWxkX2NwdUAsJGJ1aWxkX2NwdSw7dCB0CitzLEBidWlsZF92ZW5kb3JALCRidWlsZF92ZW5kb3IsO3QgdAorcyxAYnVpbGRfb3NALCRidWlsZF9vcyw7dCB0CitzLEBob3N0QCwkaG9zdCw7dCB0CitzLEBob3N0X2NwdUAsJGhvc3RfY3B1LDt0IHQKK3MsQGhvc3RfdmVuZG9yQCwkaG9zdF92ZW5kb3IsO3QgdAorcyxAaG9zdF9vc0AsJGhvc3Rfb3MsO3QgdAorcyxAdGFyZ2V0QCwkdGFyZ2V0LDt0IHQKK3MsQHRhcmdldF9jcHVALCR0YXJnZXRfY3B1LDt0IHQKK3MsQHRhcmdldF92ZW5kb3JALCR0YXJnZXRfdmVuZG9yLDt0IHQKK3MsQHRhcmdldF9vc0AsJHRhcmdldF9vcyw7dCB0CitzLEBNQUlOVEFJTkVSX01PREVfVFJVRUAsJE1BSU5UQUlORVJfTU9ERV9UUlVFLDt0IHQKK3MsQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAsJE1BSU5UQUlORVJfTU9ERV9GQUxTRSw7dCB0CitzLEBNQUlOVEAsJE1BSU5ULDt0IHQKK3MsQENDQCwkQ0MsO3QgdAorcyxAQ0ZMQUdTQCwkQ0ZMQUdTLDt0IHQKK3MsQExERkxBR1NALCRMREZMQUdTLDt0IHQKK3MsQENQUEZMQUdTQCwkQ1BQRkxBR1MsO3QgdAorcyxAYWNfY3RfQ0NALCRhY19jdF9DQyw7dCB0CitzLEBFWEVFWFRALCRFWEVFWFQsO3QgdAorcyxAT0JKRVhUQCwkT0JKRVhULDt0IHQKK3MsQENQUEAsJENQUCw7dCB0CitzLEBJTlNUQUxMX1BST0dSQU1ALCRJTlNUQUxMX1BST0dSQU0sO3QgdAorcyxASU5TVEFMTF9TQ1JJUFRALCRJTlNUQUxMX1NDUklQVCw7dCB0CitzLEBJTlNUQUxMX0RBVEFALCRJTlNUQUxMX0RBVEEsO3QgdAorcyxAQ1lHUEFUSF9XQCwkQ1lHUEFUSF9XLDt0IHQKK3MsQFBBQ0tBR0VALCRQQUNLQUdFLDt0IHQKK3MsQFZFUlNJT05ALCRWRVJTSU9OLDt0IHQKK3MsQEFDTE9DQUxALCRBQ0xPQ0FMLDt0IHQKK3MsQEFVVE9DT05GQCwkQVVUT0NPTkYsO3QgdAorcyxAQVVUT01BS0VALCRBVVRPTUFLRSw7dCB0CitzLEBBVVRPSEVBREVSQCwkQVVUT0hFQURFUiw7dCB0CitzLEBNQUtFSU5GT0AsJE1BS0VJTkZPLDt0IHQKK3MsQGluc3RhbGxfc2hALCRpbnN0YWxsX3NoLDt0IHQKK3MsQFNUUklQQCwkU1RSSVAsO3QgdAorcyxAYWNfY3RfU1RSSVBALCRhY19jdF9TVFJJUCw7dCB0CitzLEBJTlNUQUxMX1NUUklQX1BST0dSQU1ALCRJTlNUQUxMX1NUUklQX1BST0dSQU0sO3QgdAorcyxAbWtkaXJfcEAsJG1rZGlyX3AsO3QgdAorcyxAQVdLQCwkQVdLLDt0IHQKK3MsQFNFVF9NQUtFQCwkU0VUX01BS0UsO3QgdAorcyxAYW1fX2xlYWRpbmdfZG90QCwkYW1fX2xlYWRpbmdfZG90LDt0IHQKK3MsQEFNVEFSQCwkQU1UQVIsO3QgdAorcyxAYW1fX3RhckAsJGFtX190YXIsO3QgdAorcyxAYW1fX3VudGFyQCwkYW1fX3VudGFyLDt0IHQKK3MsQERFUERJUkAsJERFUERJUiw7dCB0CitzLEBhbV9faW5jbHVkZUAsJGFtX19pbmNsdWRlLDt0IHQKK3MsQGFtX19xdW90ZUAsJGFtX19xdW90ZSw7dCB0CitzLEBBTURFUF9UUlVFQCwkQU1ERVBfVFJVRSw7dCB0CitzLEBBTURFUF9GQUxTRUAsJEFNREVQX0ZBTFNFLDt0IHQKK3MsQEFNREVQQkFDS1NMQVNIQCwkQU1ERVBCQUNLU0xBU0gsO3QgdAorcyxAQ0NERVBNT0RFQCwkQ0NERVBNT0RFLDt0IHQKK3MsQGFtX19mYXN0ZGVwQ0NfVFJVRUAsJGFtX19mYXN0ZGVwQ0NfVFJVRSw7dCB0CitzLEBhbV9fZmFzdGRlcENDX0ZBTFNFQCwkYW1fX2Zhc3RkZXBDQ19GQUxTRSw7dCB0CitzLEBFR1JFUEAsJEVHUkVQLDt0IHQKK3MsQExOX1NALCRMTl9TLDt0IHQKK3MsQEVDSE9ALCRFQ0hPLDt0IHQKK3MsQEFSQCwkQVIsO3QgdAorcyxAYWNfY3RfQVJALCRhY19jdF9BUiw7dCB0CitzLEBSQU5MSUJALCRSQU5MSUIsO3QgdAorcyxAYWNfY3RfUkFOTElCQCwkYWNfY3RfUkFOTElCLDt0IHQKK3MsQENYWEAsJENYWCw7dCB0CitzLEBDWFhGTEFHU0AsJENYWEZMQUdTLDt0IHQKK3MsQGFjX2N0X0NYWEAsJGFjX2N0X0NYWCw7dCB0CitzLEBDWFhERVBNT0RFQCwkQ1hYREVQTU9ERSw7dCB0CitzLEBhbV9fZmFzdGRlcENYWF9UUlVFQCwkYW1fX2Zhc3RkZXBDWFhfVFJVRSw7dCB0CitzLEBhbV9fZmFzdGRlcENYWF9GQUxTRUAsJGFtX19mYXN0ZGVwQ1hYX0ZBTFNFLDt0IHQKK3MsQENYWENQUEAsJENYWENQUCw7dCB0CitzLEBGNzdALCRGNzcsO3QgdAorcyxARkZMQUdTQCwkRkZMQUdTLDt0IHQKK3MsQGFjX2N0X0Y3N0AsJGFjX2N0X0Y3Nyw7dCB0CitzLEBMSUJUT09MQCwkTElCVE9PTCw7dCB0CitzLEBMWk9fVVNFX0FTTV9UUlVFQCwkTFpPX1VTRV9BU01fVFJVRSw7dCB0CitzLEBMWk9fVVNFX0FTTV9GQUxTRUAsJExaT19VU0VfQVNNX0ZBTFNFLDt0IHQKK3MsQExaT19BU01fVlBBVEhALCRMWk9fQVNNX1ZQQVRILDt0IHQKK3MsQExaT19DUFBGTEFHU0AsJExaT19DUFBGTEFHUyw7dCB0CitzLEBMWk9fRVhUUkFfQ1BQRkxBR1NALCRMWk9fRVhUUkFfQ1BQRkxBR1MsO3QgdAorcyxATFpPX0NGTEFHU0AsJExaT19DRkxBR1MsO3QgdAorcyxATFpPX0VYVFJBX0NGTEFHU0AsJExaT19FWFRSQV9DRkxBR1MsO3QgdAorcyxAY29uZmlndXJlX0NQUEZMQUdTQCwkY29uZmlndXJlX0NQUEZMQUdTLDt0IHQKK3MsQGNvbmZpZ3VyZV9DRkxBR1NALCRjb25maWd1cmVfQ0ZMQUdTLDt0IHQKK3MsQExJQk9CSlNALCRMSUJPQkpTLDt0IHQKK3MsQExUTElCT0JKU0AsJExUTElCT0JKUyw7dCB0CitDRU9GCisKK19BQ0VPRgorCisgIGNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgorICAjIFNwbGl0IHRoZSBzdWJzdGl0dXRpb25zIGludG8gYml0ZS1zaXplZCBwaWVjZXMgZm9yIHNlZHMgd2l0aAorICAjIHNtYWxsIGNvbW1hbmQgbnVtYmVyIGxpbWl0cywgbGlrZSBvbiBEaWdpdGFsIE9TRi8xIGFuZCBIUC1VWC4KKyAgYWNfbWF4X3NlZF9saW5lcz00OAorICBhY19zZWRfZnJhZz0xICMgTnVtYmVyIG9mIGN1cnJlbnQgZmlsZS4KKyAgYWNfYmVnPTEgIyBGaXJzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX2VuZD0kYWNfbWF4X3NlZF9saW5lcyAjIExpbmUgYWZ0ZXIgbGFzdCBsaW5lIGZvciBjdXJyZW50IGZpbGUuCisgIGFjX21vcmVfbGluZXM9OgorICBhY19zZWRfY21kcz0KKyAgd2hpbGUgJGFjX21vcmVfbGluZXM7IGRvCisgICAgaWYgdGVzdCAkYWNfYmVnIC1ndCAxOyB0aGVuCisgICAgICBzZWQgIjEsJHthY19iZWd9ZDsgJHthY19lbmR9cSIgJHRtcC9zdWJzLnNlZCA+JHRtcC9zdWJzLmZyYWcKKyAgICBlbHNlCisgICAgICBzZWQgIiR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCisgICAgZmkKKyAgICBpZiB0ZXN0ICEgLXMgJHRtcC9zdWJzLmZyYWc7IHRoZW4KKyAgICAgIGFjX21vcmVfbGluZXM9ZmFsc2UKKyAgICBlbHNlCisgICAgICAjIFRoZSBwdXJwb3NlIG9mIHRoZSBsYWJlbCBhbmQgb2YgdGhlIGJyYW5jaGluZyBjb25kaXRpb24gaXMgdG8KKyAgICAgICMgc3BlZWQgdXAgdGhlIHNlZCBwcm9jZXNzaW5nIChpZiB0aGVyZSBhcmUgbm8gYEAnIGF0IGFsbCwgdGhlcmUKKyAgICAgICMgaXMgbm8gbmVlZCB0byBicm93c2UgYW55IG9mIHRoZSBzdWJzdGl0dXRpb25zKS4KKyAgICAgICMgVGhlc2UgYXJlIHRoZSB0d28gZXh0cmEgc2VkIGNvbW1hbmRzIG1lbnRpb25lZCBhYm92ZS4KKyAgICAgIChlY2hvICc6dAorICAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiJyAmJiBjYXQgJHRtcC9zdWJzLmZyYWcpID4kdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZAorICAgICAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgorCWFjX3NlZF9jbWRzPSJzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCisgICAgICBlbHNlCisJYWNfc2VkX2NtZHM9IiRhY19zZWRfY21kcyB8IHNlZCAtZiAkdG1wL3N1YnMtJGFjX3NlZF9mcmFnLnNlZCIKKyAgICAgIGZpCisgICAgICBhY19zZWRfZnJhZz1gZXhwciAkYWNfc2VkX2ZyYWcgKyAxYAorICAgICAgYWNfYmVnPSRhY19lbmQKKyAgICAgIGFjX2VuZD1gZXhwciAkYWNfZW5kICsgJGFjX21heF9zZWRfbGluZXNgCisgICAgZmkKKyAgZG9uZQorICBpZiB0ZXN0IC16ICIkYWNfc2VkX2NtZHMiOyB0aGVuCisgICAgYWNfc2VkX2NtZHM9Y2F0CisgIGZpCitmaSAjIHRlc3QgLW4gIiRDT05GSUdfRklMRVMiCisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitmb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfRklMRVM7IGRvIHRlc3QgIngkYWNfZmlsZSIgPSB4OiAmJiBjb250aW51ZQorICAjIFN1cHBvcnQgIm91dGZpbGVbOmluZmlsZVs6aW5maWxlLi4uXV0iLCBkZWZhdWx0aW5nIGluZmlsZT0ib3V0ZmlsZS5pbiIuCisgIGNhc2UgJGFjX2ZpbGUgaW4KKyAgLSB8ICo6LSB8ICo6LToqICkgIyBpbnB1dCBmcm9tIHN0ZGluCisJY2F0ID4kdG1wL3N0ZGluCisJYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqOiogKSBhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAorCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7CisgICogKSAgIGFjX2ZpbGVfaW49JGFjX2ZpbGUuaW4gOzsKKyAgZXNhYworCisgICMgQ29tcHV0ZSBAc3JjZGlyQCwgQHRvcF9zcmNkaXJALCBhbmQgQElOU1RBTExAIGZvciBzdWJkaXJlY3Rvcmllcy4KKyAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19maWxlIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICIkYWNfZGlyIgorICBlbHNlCisgICAgYXNfZGlyPSIkYWNfZGlyIgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCisgIGFjX2J1aWxkZGlyPS4KKworaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKK2Vsc2UKKyAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorZmkKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCisgICAgICAgYWNfdG9wX3NyY2Rpcj0uCisgICAgZWxzZQorICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKyAgICBmaSA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworZXNhYworCisjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCitjYXNlIGBwd2RgIGluCisuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKyopCisgIGNhc2UgIiRhY19kaXIiIGluCisgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyopCisgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY19zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworCisKKyAgY2FzZSAkSU5TVEFMTCBpbgorICBbXFwvJF0qIHwgPzpbXFwvXSogKSBhY19JTlNUQUxMPSRJTlNUQUxMIDs7CisgICopIGFjX0lOU1RBTEw9JGFjX3RvcF9idWlsZGRpciRJTlNUQUxMIDs7CisgIGVzYWMKKworICAjIExldCdzIHN0aWxsIHByZXRlbmQgaXQgaXMgYGNvbmZpZ3VyZScgd2hpY2ggaW5zdGFudGlhdGVzIChpLmUuLCBkb24ndAorICAjIHVzZSAkYXNfbWUpLCBwZW9wbGUgd291bGQgYmUgc3VycHJpc2VkIHRvIHJlYWQ6CisgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgIGlmIHRlc3QgeCIkYWNfZmlsZSIgPSB4LTsgdGhlbgorICAgIGNvbmZpZ3VyZV9pbnB1dD0KKyAgZWxzZQorICAgIGNvbmZpZ3VyZV9pbnB1dD0iJGFjX2ZpbGUuICAiCisgIGZpCisgIGNvbmZpZ3VyZV9pbnB1dD0kY29uZmlndXJlX2lucHV0IkdlbmVyYXRlZCBmcm9tIGBlY2hvICRhY19maWxlX2luIHwKKwkJCQkgICAgIHNlZCAncywuKi8sLCdgIGJ5IGNvbmZpZ3VyZS4iCisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSBlY2hvICIkZiI7OworICAgICAgKikgIyBSZWxhdGl2ZQorCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKwkgICAjIEJ1aWxkIHRyZWUKKwkgICBlY2hvICIkZiIKKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorCSAgICMgU291cmNlIHRyZWUKKwkgICBlY2hvICIkc3JjZGlyLyRmIgorCSBlbHNlCisJICAgIyAvZGV2L251bGwgdHJlZQorCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KKyAgICBybSAtZiAiJGFjX2ZpbGUiCisgIGZpCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCisgIHNlZCAiJGFjX3Zwc3ViCiskZXh0cmFzdWIKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCis6dAorL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYgorcyxAY29uZmlndXJlX2lucHV0QCwkY29uZmlndXJlX2lucHV0LDt0IHQKK3MsQHNyY2RpckAsJGFjX3NyY2Rpciw7dCB0CitzLEBhYnNfc3JjZGlyQCwkYWNfYWJzX3NyY2Rpciw7dCB0CitzLEB0b3Bfc3JjZGlyQCwkYWNfdG9wX3NyY2Rpciw7dCB0CitzLEBhYnNfdG9wX3NyY2RpckAsJGFjX2Fic190b3Bfc3JjZGlyLDt0IHQKK3MsQGJ1aWxkZGlyQCwkYWNfYnVpbGRkaXIsO3QgdAorcyxAYWJzX2J1aWxkZGlyQCwkYWNfYWJzX2J1aWxkZGlyLDt0IHQKK3MsQHRvcF9idWlsZGRpckAsJGFjX3RvcF9idWlsZGRpciw7dCB0CitzLEBhYnNfdG9wX2J1aWxkZGlyQCwkYWNfYWJzX3RvcF9idWlsZGRpciw7dCB0CitzLEBJTlNUQUxMQCwkYWNfSU5TVEFMTCw7dCB0CisiICRhY19maWxlX2lucHV0cyB8IChldmFsICIkYWNfc2VkX2NtZHMiKSA+JHRtcC9vdXQKKyAgcm0gLWYgJHRtcC9zdGRpbgorICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgbXYgJHRtcC9vdXQgJGFjX2ZpbGUKKyAgZWxzZQorICAgIGNhdCAkdG1wL291dAorICAgIHJtIC1mICR0bXAvb3V0CisgIGZpCisKK2RvbmUKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKKyMKKyMgQ09ORklHX0hFQURFUiBzZWN0aW9uLgorIworCisjIFRoZXNlIHNlZCBjb21tYW5kcyBhcmUgcGFzc2VkIHRvIHNlZCBhcyAiQSBOQU1FIEIgTkFNRSBDIFZBTFVFIEQiLCB3aGVyZQorIyBOQU1FIGlzIHRoZSBjcHAgbWFjcm8gYmVpbmcgZGVmaW5lZCBhbmQgVkFMVUUgaXMgdGhlIHZhbHVlIGl0IGlzIGJlaW5nIGdpdmVuLgorIworIyBhY19kIHNldHMgdGhlIHZhbHVlIGluICIjZGVmaW5lIE5BTUUgVkFMVUUiIGxpbmVzLgorYWNfZEE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qZGVmaW5lWwkgXVsJIF0qXCknCithY19kQj0nWwkgXS4qJCxcMSNcMicKK2FjX2RDPScgJworYWNfZEQ9Jyw7dCcKKyMgYWNfdSB0dXJucyAiI3VuZGVmIE5BTUUiIHdpdGhvdXQgdHJhaWxpbmcgYmxhbmtzIGludG8gIiNkZWZpbmUgTkFNRSBWQUxVRSIuCithY191QT0ncyxeXChbCSBdKlwpI1woWwkgXSpcKXVuZGVmXChbCSBdWwkgXSpcKScKK2FjX3VCPSckLFwxI1wyZGVmaW5lXDMnCithY191Qz0nICcKK2FjX3VEPScsO3QnCisKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19IRUFERVJTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKKyAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgorICBjYXNlICRhY19maWxlIGluCisgIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgorCWNhdCA+JHRtcC9zdGRpbgorCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCisJYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKKyAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKwlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OworICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisgIGVzYWMKKworICB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtICYmIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRhY19maWxlIiA+JjUKK2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisKKyAgIyBGaXJzdCBsb29rIGZvciB0aGUgaW5wdXQgZmlsZXMgaW4gdGhlIGJ1aWxkIHRyZWUsIG90aGVyd2lzZSBpbiB0aGUKKyAgIyBzcmMgdHJlZS4KKyAgYWNfZmlsZV9pbnB1dHM9YElGUz06CisgICAgZm9yIGYgaW4gJGFjX2ZpbGVfaW47IGRvCisgICAgICBjYXNlICRmIGluCisgICAgICAtKSBlY2hvICR0bXAvc3RkaW4gOzsKKyAgICAgIFtcXC8kXSopCisJICMgQWJzb2x1dGUgKGNhbid0IGJlIERPUy1zdHlsZSwgYXMgSUZTPTopCisJIHRlc3QgLWYgIiRmIiB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCSAjIERvIHF1b3RlICRmLCB0byBwcmV2ZW50IERPUyBwYXRocyBmcm9tIGJlaW5nIElGUydkLgorCSBlY2hvICIkZiI7OworICAgICAgKikgIyBSZWxhdGl2ZQorCSBpZiB0ZXN0IC1mICIkZiI7IHRoZW4KKwkgICAjIEJ1aWxkIHRyZWUKKwkgICBlY2hvICIkZiIKKwkgZWxpZiB0ZXN0IC1mICIkc3JjZGlyLyRmIjsgdGhlbgorCSAgICMgU291cmNlIHRyZWUKKwkgICBlY2hvICIkc3JjZGlyLyRmIgorCSBlbHNlCisJICAgIyAvZGV2L251bGwgdHJlZQorCSAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKK2VjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQorICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJIGZpOzsKKyAgICAgIGVzYWMKKyAgICBkb25lYCB8fCB7IChleGl0IDEpOyBleGl0IDE7IH0KKyAgIyBSZW1vdmUgdGhlIHRyYWlsaW5nIHNwYWNlcy4KKyAgc2VkICdzL1sJIF0qJC8vJyAkYWNfZmlsZV9pbnB1dHMgPiR0bXAvaW4KKworX0FDRU9GCisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byB0d28gc2VkIHNjcmlwdHMsIGBjb25mdGVzdC5kZWZpbmVzJyBhbmQKKyMgYGNvbmZ0ZXN0LnVuZGVmcycsIHRoYXQgc3Vic3RpdHV0ZXMgdGhlIHByb3BlciB2YWx1ZXMgaW50bworIyBjb25maWcuaC5pbiB0byBwcm9kdWNlIGNvbmZpZy5oLiAgVGhlIGZpcnN0IGhhbmRsZXMgYCNkZWZpbmUnCisjIHRlbXBsYXRlcywgYW5kIHRoZSBzZWNvbmQgYCN1bmRlZicgdGVtcGxhdGVzLgorIyBBbmQgZmlyc3Q6IFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbgorIyBjb25maWcuc3RhdHVzLiAgUHJvdGVjdCBhZ2FpbnN0IGJlaW5nIGluIGFuIHVucXVvdGVkIGhlcmUgZG9jdW1lbnQKKyMgaW4gY29uZmlnLnN0YXR1cy4KK3JtIC1mIGNvbmZ0ZXN0LmRlZmluZXMgY29uZnRlc3QudW5kZWZzCisjIFVzaW5nIGEgaGVyZSBkb2N1bWVudCBpbnN0ZWFkIG9mIGEgc3RyaW5nIHJlZHVjZXMgdGhlIHF1b3RpbmcgbmlnaHRtYXJlLgorIyBQdXR0aW5nIGNvbW1lbnRzIGluIHNlZCBzY3JpcHRzIGlzIG5vdCBwb3J0YWJsZS4KKyMKKyMgYGVuZCcgaXMgdXNlZCB0byBhdm9pZCB0aGF0IHRoZSBzZWNvbmQgbWFpbiBzZWQgY29tbWFuZCAobWVhbnQgZm9yCisjIDAtYXJ5IENQUCBtYWNyb3MpIGFwcGxpZXMgdG8gbi1hcnkgbWFjcm8gZGVmaW5pdGlvbnMuCisjIFNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiBmb3IgYGNsZWFyJy4KK2NhdCA+Y29uZmRlZjJzZWQuc2VkIDw8XF9BQ0VPRgorcy9bXFwmLF0vXFwmL2cKK3MsW1xcJGBdLFxcJixnCit0IGNsZWFyCis6IGNsZWFyCitzLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIChdW14JIChdKlwpXCgoW14pXSopXClbCSBdKlwoLipcKSQsJHthY19kQX1cMSR7YWNfZEJ9XDFcMiR7YWNfZEN9XDMke2FjX2REfSxncAordCBlbmQKK3MsXlsJIF0qI1sJIF0qZGVmaW5lWwkgXVsJIF0qXChbXgkgXVteCSBdKlwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxJHthY19kQ31cMiR7YWNfZER9LGdwCis6IGVuZAorX0FDRU9GCisjIElmIHNvbWUgbWFjcm9zIHdlcmUgY2FsbGVkIHNldmVyYWwgdGltZXMgdGhlcmUgbWlnaHQgYmUgc2V2ZXJhbCB0aW1lcworIyB0aGUgc2FtZSAjZGVmaW5lcywgd2hpY2ggaXMgdXNlbGVzcy4gIE5ldmVydGhlbGVzcywgd2UgbWF5IG5vdCB3YW50IHRvCisjIHNvcnQgdGhlbSwgc2luY2Ugd2Ugd2FudCB0aGUgKmxhc3QqIEFDLURFRklORSB0byBiZSBob25vcmVkLgordW5pcSBjb25mZGVmcy5oIHwgc2VkIC1uIC1mIGNvbmZkZWYyc2VkLnNlZCA+Y29uZnRlc3QuZGVmaW5lcworc2VkICdzL2FjX2QvYWNfdS9nJyBjb25mdGVzdC5kZWZpbmVzID5jb25mdGVzdC51bmRlZnMKK3JtIC1mIGNvbmZkZWYyc2VkLnNlZAorCisjIFRoaXMgc2VkIGNvbW1hbmQgcmVwbGFjZXMgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yCisjIGV4YW1wbGUsIGluIHRoZSBjYXNlIG9mIF9QT1NJWF9TT1VSQ0UsIHdoaWNoIGlzIHByZWRlZmluZWQgYW5kIHJlcXVpcmVkCisjIG9uIHNvbWUgc3lzdGVtcyB3aGVyZSBjb25maWd1cmUgd2lsbCBub3QgZGVjaWRlIHRvIGRlZmluZSBpdC4KK2NhdCA+PmNvbmZ0ZXN0LnVuZGVmcyA8PFxfQUNFT0YKK3MsXlsJIF0qI1sJIF0qdW5kZWZbCSBdWwkgXSpbYS16QS1aX11bYS16QS1aXzAtOV0qLC8qICYgKi8sCitfQUNFT0YKKworIyBCcmVhayB1cCBjb25mdGVzdC5kZWZpbmVzIGJlY2F1c2Ugc29tZSBzaGVsbHMgaGF2ZSBhIGxpbWl0IG9uIHRoZSBzaXplCisjIG9mIGhlcmUgZG9jdW1lbnRzLCBhbmQgb2xkIHNlZHMgaGF2ZSBzbWFsbCBsaW1pdHMgdG9vICgxMDAgY21kcykuCitlY2hvICcgICMgSGFuZGxlIGFsbCB0aGUgI2RlZmluZSB0ZW1wbGF0ZXMgb25seSBpZiBuZWNlc3NhcnkuJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgIGlmIGdyZXAgIl5bCSBdKiNbCSBdKmRlZmluZSIgJHRtcC9pbiA+L2Rldi9udWxsOyB0aGVuJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgICMgSWYgdGhlcmUgYXJlIG5vIGRlZmluZXMsIHdlIG1heSBoYXZlIGFuIGVtcHR5IGlmL2ZpJyA+PiRDT05GSUdfU1RBVFVTCitlY2hvICcgIDonID4+JENPTkZJR19TVEFUVVMKK3JtIC1mIGNvbmZ0ZXN0LnRhaWwKK3doaWxlIGdyZXAgLiBjb25mdGVzdC5kZWZpbmVzID4vZGV2L251bGwKK2RvCisgICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL2RlZmluZXMuc2VkLgorICBlY2hvICcgIGNhdCA+JHRtcC9kZWZpbmVzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI2RlZmluZScgbGluZXMuCisgIGVjaG8gJy9eWwkgXSojWwkgXSpkZWZpbmUvIWInID4+JENPTkZJR19TVEFUVVMKKyAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC5kZWZpbmVzID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnQ0VPRgorICBzZWQgLWYgJHRtcC9kZWZpbmVzLnNlZCAkdG1wL2luID4kdG1wL291dAorICBybSAtZiAkdG1wL2luCisgIG12ICR0bXAvb3V0ICR0bXAvaW4KKycgPj4kQ09ORklHX1NUQVRVUworICBzZWQgMSwke2FjX21heF9oZXJlX2xpbmVzfWQgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC5kZWZpbmVzCisgIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QuZGVmaW5lcworZG9uZQorcm0gLWYgY29uZnRlc3QuZGVmaW5lcworZWNobyAnICBmaSAjIGdyZXAnID4+JENPTkZJR19TVEFUVVMKK2VjaG8gPj4kQ09ORklHX1NUQVRVUworCisjIEJyZWFrIHVwIGNvbmZ0ZXN0LnVuZGVmcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQorIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgorZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICN1bmRlZiB0ZW1wbGF0ZXMnID4+JENPTkZJR19TVEFUVVMKK3JtIC1mIGNvbmZ0ZXN0LnRhaWwKK3doaWxlIGdyZXAgLiBjb25mdGVzdC51bmRlZnMgPi9kZXYvbnVsbAorZG8KKyAgIyBXcml0ZSBhIGxpbWl0ZWQtc2l6ZSBoZXJlIGRvY3VtZW50IHRvICR0bXAvdW5kZWZzLnNlZC4KKyAgZWNobyAnICBjYXQgPiR0bXAvdW5kZWZzLnNlZCA8PENFT0YnID4+JENPTkZJR19TVEFUVVMKKyAgIyBTcGVlZCB1cDogZG9uJ3QgY29uc2lkZXIgdGhlIG5vbiBgI3VuZGVmJworICBlY2hvICcvXlsJIF0qI1sJIF0qdW5kZWYvIWInID4+JENPTkZJR19TVEFUVVMKKyAgIyBXb3JrIGFyb3VuZCB0aGUgZm9yZ2V0LXRvLXJlc2V0LXRoZS1mbGFnIGJ1Zy4KKyAgZWNobyAndCBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgZWNobyAnOiBjbHInID4+JENPTkZJR19TVEFUVVMKKyAgc2VkICR7YWNfbWF4X2hlcmVfbGluZXN9cSBjb25mdGVzdC51bmRlZnMgPj4kQ09ORklHX1NUQVRVUworICBlY2hvICdDRU9GCisgIHNlZCAtZiAkdG1wL3VuZGVmcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKKyAgcm0gLWYgJHRtcC9pbgorICBtdiAkdG1wL291dCAkdG1wL2luCisnID4+JENPTkZJR19TVEFUVVMKKyAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LnVuZGVmcyA+Y29uZnRlc3QudGFpbAorICBybSAtZiBjb25mdGVzdC51bmRlZnMKKyAgbXYgY29uZnRlc3QudGFpbCBjb25mdGVzdC51bmRlZnMKK2RvbmUKK3JtIC1mIGNvbmZ0ZXN0LnVuZGVmcworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKyAgIyBMZXQncyBzdGlsbCBwcmV0ZW5kIGl0IGlzIGBjb25maWd1cmUnIHdoaWNoIGluc3RhbnRpYXRlcyAoaS5lLiwgZG9uJ3QKKyAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAjICAgIC8qIGNvbmZpZy5oLiAgR2VuZXJhdGVkIGJ5IGNvbmZpZy5zdGF0dXMuICAqLworICBpZiB0ZXN0IHgiJGFjX2ZpbGUiID0geC07IHRoZW4KKyAgICBlY2hvICIvKiBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCisgIGVsc2UKKyAgICBlY2hvICIvKiAkYWNfZmlsZS4gIEdlbmVyYXRlZCBieSBjb25maWd1cmUuICAqLyIgPiR0bXAvY29uZmlnLmgKKyAgZmkKKyAgY2F0ICR0bXAvaW4gPj4kdG1wL2NvbmZpZy5oCisgIHJtIC1mICR0bXAvaW4KKyAgaWYgdGVzdCB4IiRhY19maWxlIiAhPSB4LTsgdGhlbgorICAgIGlmIGRpZmYgJGFjX2ZpbGUgJHRtcC9jb25maWcuaCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CitlY2hvICIkYXNfbWU6ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY2O30KKyAgICBlbHNlCisgICAgICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhY19maWxlIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhY19maWxlIiA6ICdYXCgvXCknIFx8IFwKKwkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8CitlY2hvIFgiJGFjX2ZpbGUiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICIkYWNfZGlyIgorICBlbHNlCisgICAgYXNfZGlyPSIkYWNfZGlyIgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCisgICAgICBybSAtZiAkYWNfZmlsZQorICAgICAgbXYgJHRtcC9jb25maWcuaCAkYWNfZmlsZQorICAgIGZpCisgIGVsc2UKKyAgICBjYXQgJHRtcC9jb25maWcuaAorICAgIHJtIC1mICR0bXAvY29uZmlnLmgKKyAgZmkKKyMgQ29tcHV0ZSAkYWNfZmlsZSdzIGluZGV4IGluICRjb25maWdfaGVhZGVycy4KK19hbV9zdGFtcF9jb3VudD0xCitmb3IgX2FtX2hlYWRlciBpbiAkY29uZmlnX2hlYWRlcnMgOjsgZG8KKyAgY2FzZSAkX2FtX2hlYWRlciBpbgorICAgICRhY19maWxlIHwgJGFjX2ZpbGU6KiApCisgICAgICBicmVhayA7OworICAgICogKQorICAgICAgX2FtX3N0YW1wX2NvdW50PWBleHByICRfYW1fc3RhbXBfY291bnQgKyAxYCA7OworICBlc2FjCitkb25lCitlY2hvICJ0aW1lc3RhbXAgZm9yICRhY19maWxlIiA+YChkaXJuYW1lICRhY19maWxlKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCRhY19maWxlIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgkYWNfZmlsZSA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYJGFjX2ZpbGUgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCRhY19maWxlIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCRhY19maWxlIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYC9zdGFtcC1oJF9hbV9zdGFtcF9jb3VudAorZG9uZQorX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKKworIworIyBDT05GSUdfQ09NTUFORFMgc2VjdGlvbi4KKyMKK2ZvciBhY19maWxlIGluIDogJENPTkZJR19DT01NQU5EUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCisgIGFjX2Rlc3Q9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgCisgIGFjX3NvdXJjZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKKyAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2Rlc3QiKSAyPi9kZXYvbnVsbCB8fAorJGFzX2V4cHIgWCIkYWNfZGVzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYWNfZGVzdCIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhY19kZXN0IiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICIkYWNfZGlyIgorICBlbHNlCisgICAgYXNfZGlyPSIkYWNfZGlyIgorICAgIGFzX2RpcnM9CisgICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KKyAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIHMvLiovLi87IHEnYAorICAgIGRvbmUKKyAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycworICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1CitlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KKyAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorCisgIGFjX2J1aWxkZGlyPS4KKworaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgorICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCisgICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCisgIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKK2Vsc2UKKyAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorZmkKKworY2FzZSAkc3JjZGlyIGluCisgIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgICBhY19zcmNkaXI9LgorICAgIGlmIHRlc3QgLXogIiRhY190b3BfYnVpbGRkaXIiOyB0aGVuCisgICAgICAgYWNfdG9wX3NyY2Rpcj0uCisgICAgZWxzZQorICAgICAgIGFjX3RvcF9zcmNkaXI9YGVjaG8gJGFjX3RvcF9idWlsZGRpciB8IHNlZCAncywvJCwsJ2AKKyAgICBmaSA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIHBhdGguCisgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKKyAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBwYXRoLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4CisgICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworZXNhYworCisjIERvIG5vdCB1c2UgYGNkIGZvbyAmJiBwd2RgIHRvIGNvbXB1dGUgYWJzb2x1dGUgcGF0aHMsIGJlY2F1c2UKKyMgdGhlIGRpcmVjdG9yaWVzIG1heSBub3QgZXhpc3QuCitjYXNlIGBwd2RgIGluCisuKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKKyopCisgIGNhc2UgIiRhY19kaXIiIGluCisgIC4pIGFjX2Fic19idWlsZGRpcj1gcHdkYDs7CisgIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7CisgICopIGFjX2Fic19idWlsZGRpcj1gcHdkYC8iJGFjX2RpciI7OworICBlc2FjOzsKK2VzYWMKK2Nhc2UgJGFjX2Fic19idWlsZGRpciBpbgorLikgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyopCisgIGNhc2UgJHthY190b3BfYnVpbGRkaXJ9LiBpbgorICAuKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7CisgICopIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpci8ke2FjX3RvcF9idWlsZGRpcn0uOzsKKyAgZXNhYzs7Citlc2FjCitjYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KKy4pIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY19zcmNkaXIgaW4KKyAgLikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKKyAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OworICAqKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCisuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7CisqKQorICBjYXNlICRhY190b3Bfc3JjZGlyIGluCisgIC4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OworICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKKyAgKikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfdG9wX3NyY2Rpcjs7CisgIGVzYWM7OworZXNhYworCisKKyAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjUKK2VjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjY7fQorICBjYXNlICRhY19kZXN0IGluCisgICAgZGVwZmlsZXMgKSB0ZXN0IHgiJEFNREVQX1RSVUUiICE9IHgiIiB8fCBmb3IgbWYgaW4gJENPTkZJR19GSUxFUzsgZG8KKyAgIyBTdHJpcCBNRiBzbyB3ZSBlbmQgdXAgd2l0aCB0aGUgbmFtZSBvZiB0aGUgZmlsZS4KKyAgbWY9YGVjaG8gIiRtZiIgfCBzZWQgLWUgJ3MvOi4qJC8vJ2AKKyAgIyBDaGVjayB3aGV0aGVyIHRoaXMgaXMgYW4gQXV0b21ha2UgZ2VuZXJhdGVkIE1ha2VmaWxlIG9yIG5vdC4KKyAgIyBXZSB1c2VkIHRvIG1hdGNoIG9ubHkgdGhlIGZpbGVzIG5hbWVkIGBNYWtlZmlsZS5pbicsIGJ1dAorICAjIHNvbWUgcGVvcGxlIHJlbmFtZSB0aGVtOyBzbyBpbnN0ZWFkIHdlIGxvb2sgYXQgdGhlIGZpbGUgY29udGVudC4KKyAgIyBHcmVwJ2luZyB0aGUgZmlyc3QgbGluZSBpcyBub3QgZW5vdWdoOiBzb21lIHBlb3BsZSBwb3N0LXByb2Nlc3MKKyAgIyBlYWNoIE1ha2VmaWxlLmluIGFuZCBhZGQgYSBuZXcgbGluZSBvbiB0b3Agb2YgZWFjaCBmaWxlIHRvIHNheSBzby4KKyAgIyBTbyBsZXQncyBncmVwIHdob2xlIGZpbGUuCisgIGlmIGdyZXAgJ14jLipnZW5lcmF0ZWQgYnkgYXV0b21ha2UnICRtZiA+IC9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgZGlycGFydD1gKGRpcm5hbWUgIiRtZiIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRtZiIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkbWYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJG1mIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRtZiIgOiAnWFwoL1wpJyBcfCBcCisJIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAorZWNobyBYIiRtZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgIGVsc2UKKyAgICBjb250aW51ZQorICBmaQorICAjIEV4dHJhY3QgdGhlIGRlZmluaXRpb24gb2YgREVQRElSLCBhbV9faW5jbHVkZSwgYW5kIGFtX19xdW90ZQorICAjIGZyb20gdGhlIE1ha2VmaWxlIHdpdGhvdXQgcnVubmluZyBgbWFrZScuCisgIERFUERJUj1gc2VkIC1uICdzL15ERVBESVIgPSAvL3AnIDwgIiRtZiJgCisgIHRlc3QgLXogIiRERVBESVIiICYmIGNvbnRpbnVlCisgIGFtX19pbmNsdWRlPWBzZWQgLW4gJ3MvXmFtX19pbmNsdWRlID0gLy9wJyA8ICIkbWYiYAorICB0ZXN0IC16ICJhbV9faW5jbHVkZSIgJiYgY29udGludWUKKyAgYW1fX3F1b3RlPWBzZWQgLW4gJ3MvXmFtX19xdW90ZSA9IC8vcCcgPCAiJG1mImAKKyAgIyBXaGVuIHVzaW5nIGFuc2kya25yLCBVIG1heSBiZSBlbXB0eSBvciBhbiB1bmRlcnNjb3JlOyBleHBhbmQgaXQKKyAgVT1gc2VkIC1uICdzL15VID0gLy9wJyA8ICIkbWYiYAorICAjIEZpbmQgYWxsIGRlcGVuZGVuY3kgb3V0cHV0IGZpbGVzLCB0aGV5IGFyZSBpbmNsdWRlZCBmaWxlcyB3aXRoCisgICMgJChERVBESVIpIGluIHRoZWlyIG5hbWVzLiAgV2UgaW52b2tlIHNlZCB0d2ljZSBiZWNhdXNlIGl0IGlzIHRoZQorICAjIHNpbXBsZXN0IGFwcHJvYWNoIHRvIGNoYW5naW5nICQoREVQRElSKSB0byBpdHMgYWN0dWFsIHZhbHVlIGluIHRoZQorICAjIGV4cGFuc2lvbi4KKyAgZm9yIGZpbGUgaW4gYHNlZCAtbiAiCisgICAgcy9eJGFtX19pbmNsdWRlICRhbV9fcXVvdGVcKC4qKERFUERJUikuKlwpJGFtX19xdW90ZSInJC9cMS9wJyA8IiRtZiIgfCBcCisgICAgICAgc2VkIC1lICdzL1wkKERFUERJUikvJyIkREVQRElSIicvZycgLWUgJ3MvXCRVLyciJFUiJy9nJ2A7IGRvCisgICAgIyBNYWtlIHN1cmUgdGhlIGRpcmVjdG9yeSBleGlzdHMuCisgICAgdGVzdCAtZiAiJGRpcnBhcnQvJGZpbGUiICYmIGNvbnRpbnVlCisgICAgZmRpcj1gKGRpcm5hbWUgIiRmaWxlIikgMj4vZGV2L251bGwgfHwKKyRhc19leHByIFgiJGZpbGUiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGZpbGUiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKVteL10uKi97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KKyAgCSAgL15YXChcL1wpLioveyBzLy9cMS87IHE7IH0KKyAgCSAgcy8uKi8uLzsgcSdgCisgICAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgorICAgIG1rZGlyIC1wICRkaXJwYXJ0LyRmZGlyCisgIGVsc2UKKyAgICBhc19kaXI9JGRpcnBhcnQvJGZkaXIKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCisgICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8CiskYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAorCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKK2VjaG8gWCIkYXNfZGlyIiB8CisgICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9CisgIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQorICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQorICAJICBzLy4qLy4vOyBxJ2AKKyAgICBkb25lCisgICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKKyAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mNQorZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgJGRpcnBhcnQvJGZkaXIiID4mMjt9CisgICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KKworICAgICMgZWNobyAiY3JlYXRpbmcgJGRpcnBhcnQvJGZpbGUiCisgICAgZWNobyAnIyBkdW1teScgPiAiJGRpcnBhcnQvJGZpbGUiCisgIGRvbmUKK2RvbmUKKyA7OworICBlc2FjCitkb25lCitfQUNFT0YKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisKK3sgKGV4aXQgMCk7IGV4aXQgMDsgfQorX0FDRU9GCitjaG1vZCAreCAkQ09ORklHX1NUQVRVUworYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKKworCisjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCisjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KKyMgVW5mb3J0dW5hdGVseSwgb24gRE9TIHRoaXMgZmFpbHMsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdCBvcGVuCisjIGJ5IGNvbmZpZ3VyZSwgc28gY29uZmlnLnN0YXR1cyB3b24ndCBiZSBhYmxlIHRvIHdyaXRlIHRvIGl0OyBpdHMKKyMgb3V0cHV0IGlzIHNpbXBseSBkaXNjYXJkZWQuICBTbyB3ZSBleGVjIHRoZSBGRCB0byAvZGV2L251bGwsCisjIGVmZmVjdGl2ZWx5IGNsb3NpbmcgY29uZmlnLmxvZywgc28gaXQgY2FuIGJlIHByb3Blcmx5IChyZSlvcGVuZWQgYW5kCisjIGFwcGVuZGVkIHRvIGJ5IGNvbmZpZy5zdGF0dXMuICBXaGVuIGNvbWluZyBiYWNrIHRvIGNvbmZpZ3VyZSwgd2UKKyMgbmVlZCB0byBtYWtlIHRoZSBGRCBhdmFpbGFibGUgYWdhaW4uCitpZiB0ZXN0ICIkbm9fY3JlYXRlIiAhPSB5ZXM7IHRoZW4KKyAgYWNfY3Nfc3VjY2Vzcz06CisgIGFjX2NvbmZpZ19zdGF0dXNfYXJncz0KKyAgdGVzdCAiJHNpbGVudCIgPSB5ZXMgJiYKKyAgICBhY19jb25maWdfc3RhdHVzX2FyZ3M9IiRhY19jb25maWdfc3RhdHVzX2FyZ3MgLS1xdWlldCIKKyAgZXhlYyA1Pi9kZXYvbnVsbAorICAkU0hFTEwgJENPTkZJR19TVEFUVVMgJGFjX2NvbmZpZ19zdGF0dXNfYXJncyB8fCBhY19jc19zdWNjZXNzPWZhbHNlCisgIGV4ZWMgNT4+Y29uZmlnLmxvZworICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAorICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KKyAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CitmaQorCisKKworIyMgICBlbmFibGUgQU1ENjQgYXNzZW1ibHkgY29kZSA6ICR7YXNtX21zZ19hbWQ2NH0KK2NhdCA8PEVPRgorCisgICBMWk8gY29uZmlndXJhdGlvbiBzdW1tYXJ5CisgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBMWk8gdmVyc2lvbiAgICAgICAgICAgICAgICA6ICR7UEFDS0FHRV9WRVJTSU9OfQorICAgY29uZmlndXJlZCBmb3IgaG9zdCAgICAgICAgOiAke2hvc3RfY3B1fS0ke2hvc3RfdmVuZG9yfS0ke2hvc3Rfb3N9CisgICBzb3VyY2UgY29kZSBsb2NhdGlvbiAgICAgICA6ICR7c3JjZGlyfQorICAgY29tcGlsZXIgICAgICAgICAgICAgICAgICAgOiAke0NDfQorICAgcHJlcHJvY2Vzc29yIGZsYWdzICAgICAgICAgOiAke0NQUEZMQUdTfQorICAgY29tcGlsZXIgZmxhZ3MgICAgICAgICAgICAgOiAke0NGTEFHU30KKyAgIGJ1aWxkIHN0YXRpYyBsaWJyYXJ5ICAgICAgIDogJHtlbmFibGVfc3RhdGljfQorICAgYnVpbGQgc2hhcmVkIGxpYnJhcnkgICAgICAgOiAke2VuYWJsZV9zaGFyZWR9CisgICBlbmFibGUgaTM4NiBhc3NlbWJseSBjb2RlICA6ICR7YXNtX21zZ19pMzg2fQorCisKKyAgIExaTyAke1BBQ0tBR0VfVkVSU0lPTn0gY29uZmlndXJlZC4KKworICAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKworCitUeXBlIFxgbWFrZScgdG8gYnVpbGQgTFpPLiBUeXBlIFxgbWFrZSBpbnN0YWxsJyB0byBpbnN0YWxsIExaTy4KK0FmdGVyIGluc3RhbGxpbmcgTFpPLCBwbGVhc2UgcmVhZCB0aGUgYWNjb21wYW5pZWQgZG9jdW1lbnRhdGlvbi4KKworRU9GCisKKyMgdmk6dHM9NDpldApkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvY29uZmlndXJlLmFjIGIvbHpvLTIuMDMvY29uZmlndXJlLmFjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3YzI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9jb25maWd1cmUuYWMKQEAgLTAsMCArMSwyMjIgQEAKKyMKKyMgIGNvbmZpZ3VyZS5hYyAtLSBhdXRvY29uZiBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPIGxpYnJhcnkKKyMKKyMgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorIworIyAgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorIyAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisjICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisjICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyMgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyMgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIworIyAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyMgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyMKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBJbml0CisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfQ09QWVJJR0hUKFtDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK1RoaXMgY29uZmlndXJlIHNjcmlwdCBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhlCit0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2U7IHNlZSBDT1BZSU5HIGZvciBtb3JlIGRldGFpbHMuXSkKKworQUNfUFJFUkVRKDIuNTkpCitBQ19JTklUKFtsem9dLFsyLjAzXSxbbWFya3VzQG9iZXJodW1lci5jb21dKQorQUNfTVNHX05PVElDRShbQ29uZmlndXJpbmcgTFpPICRQQUNLQUdFX1ZFUlNJT05dKQorQUNfQ09ORklHX1NSQ0RJUihzcmMvbHpvX2luaXQuYykKK0FDX0NPTkZJR19BVVhfRElSKGF1dG9jb25mKQorQUNfUFJFRklYX0RFRkFVTFQoL3Vzci9sb2NhbCkKK0FDX0NBTk9OSUNBTF9CVUlMRAorQUNfQ0FOT05JQ0FMX0hPU1QKK0FDX0NBTk9OSUNBTF9UQVJHRVQKK0FNX01BSU5UQUlORVJfTU9ERQorCitpZiB0ZXN0IC16ICIkYWNfYWJzX3RvcF9zcmNkaXIiOyB0aGVuCisgICAgX0FDX1NSQ1BBVEhTKC4pCitmaQoraWYgdGVzdCAtciAuQ29uZi5zZXR0aW5nczE7IHRoZW4KKyAgICAuIC4vLkNvbmYuc2V0dGluZ3MxCitmaQorCitBQ19QUk9HX0NDCitBQ19QUk9HX0NQUAorbWZ4X1BST0dfQ1BQRkxBR1MKK0FDX0NfQ09OU1QKK21meF9MWk9fQ0hFQ0tfRU5ESUFOCitBQ19TWVNfTEFSR0VGSUxFCisKK0FNX0lOSVRfQVVUT01BS0UKK0FDX0NPTkZJR19IRUFERVJTKFtjb25maWcuaDpjb25maWcuaGluXSkKKworQUNfRU5BQkxFX1NUQVRJQworQUNfRElTQUJMRV9TSEFSRUQKK0FDX1BST0dfTElCVE9PTAorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrcyBmb3IgYXNzZW1ibGVyCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfQVJHX0VOQUJMRShhc20sIEFTX0hFTFBfU1RSSU5HKC0tZGlzYWJsZS1hc20sZGlzYWJsZSBhc3NlbWJseSB2ZXJzaW9ucykpCisKK2FzbV9hcmNoPQorYXNtX2Rpcj0KK2FzbV9tc2dfYW1kNjQ9bm8KK2FzbV9tc2dfaTM4Nj1ubworCitjYXNlICRob3N0X2NwdSBpbgorICAgIGFtZDY0IHwgeDg2XzY0KSBhc21fYXJjaD0iYW1kNjQiOyBhc21fZGlyPSJhc20vYW1kNjQvc3JjX2dhcy9lbGY2NCIgOzsKKyAgICBpPzg2KSBhc21fYXJjaD0iaTM4NiI7IGFzbV9kaXI9ImFzbS9pMzg2L3NyY19nYXMiIDs7CisgICAgKikgZW5hYmxlX2FzbT1ubyA7OworZXNhYworTFpPX0FTTV9WUEFUSD0KKworQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIGFzc2VtYmx5IHZlcnNpb25zXSkKK2lmIHRlc3QgIlgkZW5hYmxlX2FzbSIgIT0gWG5vOyB0aGVuCittZnhfY29tcGlsZV9TPScke0NDLWNjfSAtYyBjb25mdGVzdC5TIDE+JkFTX01FU1NBR0VfTE9HX0ZEJworY2F0ID4gY29uZnRlc3QuUyA8PEVPRgorI2luY2x1ZGUgIiRhY19hYnNfdG9wX3NyY2Rpci8kYXNtX2Rpci9sem8xeF9mMS5TIgorRU9GCitlbmFibGVfYXNtPW5vCitpZiBBQ19UUllfRVZBTChtZnhfY29tcGlsZV9TKTsgdGhlbgorICAgIGlmIEFDX1RSWV9DT01NQU5EKFt0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHRdKTsgdGhlbgorICAgICAgICBlbmFibGVfYXNtPXllcworICAgICAgICBldmFsIGFzbV9tc2dfJGFzbV9hcmNoPSIneWVzIFtbJGFzbV9kaXJdXSciCisgICAgICAgIExaT19BU01fVlBBVEg9IjokYWNfYWJzX3RvcF9zcmNkaXIvJGFzbV9kaXIiCisgICAgZmkKK2ZpCitpZiB0ZXN0ICJYJGVuYWJsZV9hc20iID0gWG5vOyB0aGVuCisgICAgZWNobyAiY29uZmlndXJlOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgY2F0IGNvbmZ0ZXN0LlMgPiZBU19NRVNTQUdFX0xPR19GRAorZmkKK3JtIC1yZiBjb25mdGVzdCoKK2ZpCitBQ19NU0dfUkVTVUxUKFskZW5hYmxlX2FzbV0pCisKK0FNX0NPTkRJVElPTkFMKExaT19VU0VfQVNNLCBbdGVzdCAiWCRlbmFibGVfYXNtIiAhPSBYbm9dKQorQUNfU1VCU1QoTFpPX0FTTV9WUEFUSCkKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK21meF9BQ0NfQ0hFQ0tfSEVBREVSUworZG5sIEFDX0NIRUNLX0hFQURFUlMoW3N5cy9wYXJhbS5oIHN5cy9yZXNvdXJjZS5oIHN5cy90aW1lcy5oXSkKK2lmIHRlc3QgIlgkYWNfY3ZfaGVhZGVyX2xpbWl0c19oIiAhPSBYeWVzOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFs8bGltaXRzLmg+IGhlYWRlciBub3QgZm91bmRdKQorZmkKK21meF9DSEVDS19IRUFERVJfU0FORV9MSU1JVFNfSAoraWYgdGVzdCAiWCRtZnhfY3ZfaGVhZGVyX3NhbmVfbGltaXRzX2giICE9IFh5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoW3lvdXIgPGxpbWl0cy5oPiBoZWFkZXIgaXMgYnJva2VuIC0gZm9yIGRldGFpbHMgc2VlIGNvbmZpZy5sb2ddKQorZmkKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLyBDaGVja3MgZm9yIHR5cGVkZWZzIGFuZCBzdHJ1Y3R1cmVzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworQUNfVFlQRV9PRkZfVAorQUNfQ0hFQ0tfVFlQRShwdHJkaWZmX3QsbG9uZykKK0FDX1RZUEVfU0laRV9UCitBQ19UWVBFX1NJR05BTAorCittZnhfQUNDX0NIRUNLX1NJWkVPRgorbWZ4X0NIRUNLX1NJWkVPRgorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCittZnhfQUNDX0NIRUNLX0ZVTkNTCittZnhfQ0hFQ0tfTElCX1dJTk1NCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gV3JpdGUgb3V0cHV0IGZpbGVzCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbWZ4X01JTklBQ0NfQUNDQ0hLKFsiLUkkc3JjZGlyIl0sWyJzcmMvbWluaWFjYy5oIl0pCisKK2lmIHRlc3QgLXIgLkNvbmYuc2V0dGluZ3MyOyB0aGVuCisgICAgLiAuLy5Db25mLnNldHRpbmdzMgorZmkKKwordGVzdCAiWCRDUFBGTEFHUyIgIT0gIlgiICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgIgorQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9LURMWk9fSEFWRV9DT05GSUdfSCIKK2lmIHRlc3QgIlgkZW5hYmxlX2FzbSIgIT0gWG5vOyB0aGVuCisgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtRExaT19VU0VfQVNNIgorZmkKK0FDX1NVQlNUKExaT19DUFBGTEFHUykKK0FDX1NVQlNUKExaT19FWFRSQV9DUFBGTEFHUykKK0FDX1NVQlNUKExaT19DRkxBR1MpCitBQ19TVUJTVChMWk9fRVhUUkFfQ0ZMQUdTKQorCitjb25maWd1cmVfQ1BQRkxBR1M9JENQUEZMQUdTCitjb25maWd1cmVfQ0ZMQUdTPSRDRkxBR1MKK0FDX1NVQlNUKGNvbmZpZ3VyZV9DUFBGTEFHUykKK0FDX1NVQlNUKGNvbmZpZ3VyZV9DRkxBR1MpCisKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGUgZXhhbXBsZXMvTWFrZWZpbGUgaW5jbHVkZS9NYWtlZmlsZSBpbmNsdWRlL2x6by9NYWtlZmlsZSBsem90ZXN0L01ha2VmaWxlIG1pbmlsem8vTWFrZWZpbGUgc3JjL01ha2VmaWxlIHRlc3RzL01ha2VmaWxlXSkKK0FDX09VVFBVVAorCisKKyMjICAgZW5hYmxlIEFNRDY0IGFzc2VtYmx5IGNvZGUgOiAke2FzbV9tc2dfYW1kNjR9CitjYXQgPDxFT0YKKworICAgTFpPIGNvbmZpZ3VyYXRpb24gc3VtbWFyeQorICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgTFpPIHZlcnNpb24gICAgICAgICAgICAgICAgOiAke1BBQ0tBR0VfVkVSU0lPTn0KKyAgIGNvbmZpZ3VyZWQgZm9yIGhvc3QgICAgICAgIDogJHtob3N0X2NwdX0tJHtob3N0X3ZlbmRvcn0tJHtob3N0X29zfQorICAgc291cmNlIGNvZGUgbG9jYXRpb24gICAgICAgOiAke3NyY2Rpcn0KKyAgIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgIDogJHtDQ30KKyAgIHByZXByb2Nlc3NvciBmbGFncyAgICAgICAgIDogJHtDUFBGTEFHU30KKyAgIGNvbXBpbGVyIGZsYWdzICAgICAgICAgICAgIDogJHtDRkxBR1N9CisgICBidWlsZCBzdGF0aWMgbGlicmFyeSAgICAgICA6ICR7ZW5hYmxlX3N0YXRpY30KKyAgIGJ1aWxkIHNoYXJlZCBsaWJyYXJ5ICAgICAgIDogJHtlbmFibGVfc2hhcmVkfQorICAgZW5hYmxlIGkzODYgYXNzZW1ibHkgY29kZSAgOiAke2FzbV9tc2dfaTM4Nn0KKworCisgICBMWk8gJHtQQUNLQUdFX1ZFUlNJT059IGNvbmZpZ3VyZWQuCisKKyAgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisKKworVHlwZSBcYG1ha2UnIHRvIGJ1aWxkIExaTy4gVHlwZSBcYG1ha2UgaW5zdGFsbCcgdG8gaW5zdGFsbCBMWk8uCitBZnRlciBpbnN0YWxsaW5nIExaTywgcGxlYXNlIHJlYWQgdGhlIGFjY29tcGFuaWVkIGRvY3VtZW50YXRpb24uCisKK0VPRgorCisjIHZpOnRzPTQ6ZXQKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2RvYy9MWk8uRkFRIGIvbHpvLTIuMDMvZG9jL0xaTy5GQVEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA0Yzk4ZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2RvYy9MWk8uRkFRCkBAIC0wLDAgKzEsMjEzIEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMWk8gRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitJIGhhdGUgcmVhZGluZyBkb2NzIC0ganVzdCB0ZWxsIG1lIGhvdyB0byBhZGQgY29tcHJlc3Npb24gdG8gbXkgcHJvZ3JhbQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBpcyBmb3IgdGhlIGltcGF0aWVudDogdGFrZSBhIGxvb2sgYXQgZXhhbXBsZXMvc2ltcGxlLmMgYW5kCitleGFtcGxlcy9sem9wYWNrLmMgYW5kIHNlZSBob3cgZWFzeSB0aGlzIGlzLgorCitCdXQgeW91IHdpbGwgY29tZSBiYWNrIHRvIHJlYWQgdGhlIGRvY3VtZW50YXRpb24gbGF0ZXIsIHdvbid0IHlvdSA/CisKKworQ2FuIHlvdSBleHBsYWluIHRoZSBuYW1pbmcgY29udmVudGlvbnMgb2YgdGhlIGFsZ29yaXRobXMgPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMZXQncyB0YWtlIGEgbG9vayBhdCBMWk8xWDoKKworICAgICBUaGUgYWxnb3JpdGhtIG5hbWUgaXMgTFpPMVguCisgICAgIFRoZSBhbGdvcml0aG0gY2F0ZWdvcnkgaXMgTFpPMS4KKyAgICAgVmFyaW91cyBjb21wcmVzc2lvbiBsZXZlbHMgYXJlIGltcGxlbWVudGVkLgorCisgICAgIExaTzFYLTk5OQorICAgICAgICAhLS0tLS0tLS0tLSBhbGdvcml0aG0gY2F0ZWdvcnkKKyAgICAgICAgICEtLS0tLS0tLS0gYWxnb3JpdGhtIHR5cGUKKyAgICAgICAgICAgISEhLS0tLS0gY29tcHJlc3Npb24gbGV2ZWwgKDEtOSwgOTksIDk5OSkKKworICAgICBMWk8xWC0xKDExKQorICAgICAgICAhLS0tLS0tLS0tLSBhbGdvcml0aG0gY2F0ZWdvcnkKKyAgICAgICAgICEtLS0tLS0tLS0gYWxnb3JpdGhtIHR5cGUKKyAgICAgICAgICAgIS0tLS0tLS0gY29tcHJlc3Npb24gbGV2ZWwgKDEtOSwgOTksIDk5OSkKKyAgICAgICAgICAgICAhIS0tLS0gbWVtb3J5IGxldmVsIChtZW1vcnkgcmVxdWlyZW1lbnRzIGZvciBjb21wcmVzc2lvbikKKworQWxsIGNvbXByZXNzaW9uL21lbW9yeSBsZXZlbHMgZ2VuZXJhdGUgdGhlIHNhbWUgY29tcHJlc3NlZCBkYXRhIGZvcm1hdCwKK3NvIGUuZy4gdGhlIExaTzFYIGRlY29tcHJlc3NvciBoYW5kbGVzIGFsbCBMWk8xWC0qIGNvbXByZXNzaW9uIGxldmVscworKGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBkZWNvbXByZXNzb3JzIHNlZSBiZWxvdykuCisKK0NhdGVnb3J5IExaTzEgYWxnb3JpdGhtczogY29tcHJlc3NlZCBkYXRhIGZvcm1hdCBpcyBzdHJpY3RseSBieXRlIGFsaWduZWQKK0NhdGVnb3J5IExaTzIgYWxnb3JpdGhtczogdXNlcyBiaXQtc2hpZnRpbmcsIHNsb3dlciBkZWNvbXByZXNzaW9uCisKKworV2h5IGFyZSB0aGVyZSBzbyBtYW55IGFsZ29yaXRobXMgPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCZWNhdXNlIG9mIGhpc3RvcmljYWwgcmVhc29ucyAtIEkgd2FudCB0byBzdXBwb3J0IHVubGltaXRlZAorYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KKworRG9uJ3QgZ2V0IG1pc2xlZCBieSB0aGUgc2l6ZSBvZiB0aGUgbGlicmFyeSAtIHVzaW5nIG9uZSBhbGdvcml0aG0KK2luY3JlYXNlcyB0aGUgc2l6ZSBvZiB5b3VyIGFwcGxpY2F0aW9uIGJ5IG9ubHkgYSBmZXcga0IuCisKK0lmIHlvdSBqdXN0IHdhbnQgdG8gYWRkIGEgbGl0dGxlIGJpdCBvZiBkYXRhIGNvbXByZXNzaW9uIHRvIHlvdXIKK2FwcGxpY2F0aW9uIHlvdSBtYXkgYmUgbG9va2luZyBmb3IgbWluaUxaTy4KK1NlZSBtaW5pbHpvL1JFQURNRS5MWk8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworV2hpY2ggYWxnb3JpdGhtIHNob3VsZCBJIHVzZSA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworTFpPMVggc2VlbXMgdG8gYmUgYmVzdCBjaG9pY2UgaW4gbWFueSBjYXNlcywgc286CistIHdoZW4gZ29pbmcgZm9yIHNwZWVkIHVzZSBMWk8xWC0xCistIHdoZW4gZ2VuZXJhdGluZyBwcmUtY29tcHJlc3NlZCBkYXRhIHVzZSBMWk8xWC05OTkKKy0gaWYgeW91IGhhdmUgbGl0dGxlIG1lbW9yeSBhdmFpbGFibGUgZm9yIGNvbXByZXNzaW9uIHVzZSBMWk8xWC0xKDExKQorICBvciBMWk8xWC0xKDEyKQorCitPZiBjb3Vyc2UsIHlvdXIgbWlsZWFnZSBtYXkgdmFyeSwgYW5kIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBydW4geW91cgorb3duIGV4cGVyaW1lbnRzLiBUcnkgTFpPMVkgYW5kIExaTzFGIG5leHQuCisKKworV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIGRlY29tcHJlc3NvcnMgcGVyIGFsZ29yaXRobSA/Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworT25jZSBhZ2FpbiBsZXQncyB1c2UgTFpPMVggZm9yIGV4cGxhbmF0aW9uOgorCistIGx6bzF4X2RlY29tcHJlc3MKKyAgICBUaGUgYHN0YW5kYXJkJyBkZWNvbXByZXNzb3IuIFByZXR0eSBmYXN0IC0gdXNlIHRoaXMgd2hlbmV2ZXIgcG9zc2libGUuCisKKyAgICBUaGlzIGRlY29tcHJlc3NvciBleHBlY3RzIHZhbGlkIGNvbXByZXNzZWQgZGF0YS4KKyAgICBJZiB0aGUgY29tcHJlc3NlZCBkYXRhIGdldHMgY29ycnVwdGVkIHNvbWVob3cgKGUuZy4gdHJhbnNtaXNzaW9uCisgICAgdmlhIGFuIGVycm9uZW91cyBjaGFubmVsLCBkaXNrIGVycm9ycywgLi4uKSBpdCB3aWxsIHByb2JhYmx5IGNyYXNoCisgICAgeW91ciBhcHBsaWNhdGlvbiBiZWNhdXNlIGFic29sdXRlbHkgbm8gYWRkaXRpb25hbCBjaGVja3MgYXJlIGRvbmUuCisKKy0gbHpvMXhfZGVjb21wcmVzc19zYWZlCisgICAgVGhlIGBzYWZlJyBkZWNvbXByZXNzb3IuIFNvbWV3aGF0IHNsb3dlci4KKworICAgIFRoaXMgZGVjb21wcmVzc29yIHdpbGwgY2F0Y2ggYWxsIGNvbXByZXNzZWQgZGF0YSB2aW9sYXRpb25zIGFuZAorICAgIHJldHVybiBhbiBlcnJvciBjb2RlIGluIHRoaXMgY2FzZSAtIGl0IHdpbGwgbmV2ZXIgY3Jhc2guCisKKy0gbHpvMXhfZGVjb21wcmVzc19hc20KKyAgICBTYW1lIGFzIGx6bzF4X2RlY29tcHJlc3MgLSB3cml0dGVuIGluIGFzc2VtYmxlci4KKworLSBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlCisgICAgU2FtZSBhcyBsem8xeF9kZWNvbXByZXNzX3NhZmUgLSB3cml0dGVuIGluIGFzc2VtYmxlci4KKworLSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0CisgICAgU2ltaWxhciB0byBsem8xeF9kZWNvbXByZXNzX2FzbSAtIGJ1dCBldmVuIGZhc3Rlci4KKworICAgIEZvciByZWFzb25zIG9mIHNwZWVkIHRoaXMgZGVjb21wcmVzc29yIGNhbiB3cml0ZSB1cCB0byAzIGJ5dGVzCisgICAgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQgKG91dHB1dCkgYmxvY2suCisgICAgWyB0ZWNobmljYWwgbm90ZTogYmVjYXVzZSBkYXRhIGlzIHRyYW5zZmVycmVkIGluIDMyLWJpdCB1bml0cyBdCisKKyAgICBVc2UgdGhpcyB3aGVuIHlvdSBhcmUgZGVjb21wcmVzc2luZyBmcm9tIG9uZSBtZW1vcnkgYmxvY2sgdG8KKyAgICBhbm90aGVyIG1lbW9yeSBibG9jayAtIGp1c3QgcHJvdmlkZSBvdXRwdXQgc3BhY2UgZm9yIDMgZXh0cmEgYnl0ZXMuCisgICAgWW91IHNob3VsZG4ndCB1c2UgaXQgaWYgZS5nLiB5b3UgYXJlIGRpcmVjdGx5IGRlY29tcHJlc3NpbmcgdG8gdmlkZW8KKyAgICBtZW1vcnkgKGJlY2F1c2UgdGhlIGV4dHJhIGJ5dGVzIHdpbGwgYmUgc2hvdyB1cCBvbiB0aGUgc2NyZWVuKS4KKworLSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUKKyAgICBUaGlzIGlzIHRoZSBzYWZlIHZlcnNpb24gb2YgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdC4KKworCitOb3RlczoKKy0tLS0tLQorLSBXaGVuIHVzaW5nIGEgc2FmZSBkZWNvbXByZXNzb3IgeW91IG11c3QgcGFzcyB0aGUgbnVtYmVyIG9mCisgIGJ5dGVzIGF2YWlsYWJsZSBpbiBgZHN0JyB2aWEgdGhlIHBhcmFtZXRlciBgZHN0X2xlbicuCisKKy0gSWYgeW91IHdhbnQgdG8gYmUgc3VyZSB0aGF0IHlvdXIgZGF0YSBpcyBub3QgY29ycnVwdGVkIHlvdSBtdXN0CisgIHVzZSBhIGNoZWNrc3VtIC0ganVzdCB1c2luZyB0aGUgc2FmZSBkZWNvbXByZXNzb3IgaXMgbm90IGVub3VnaCwKKyAgYmVjYXVzZSBtYW55IGRhdGEgZXJyb3JzIHdpbGwgbm90IHJlc3VsdCBpbiBhIGNvbXByZXNzZWQgZGF0YSB2aW9sYXRpb24uCisKKy0gQXNzZW1ibGVyIHZlcnNpb25zIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgdGhlIGkzODYgZmFtaWx5IHlldC4KKyAgUGxlYXNlIHNlZSBhbHNvIGFzbS9pMzg2LzAwUkVBRE1FLlRYVAorCistIFlvdSBzaG91bGQgdGVzdCBpZiB0aGUgYXNzZW1ibGVyIHZlcnNpb25zIGFyZSBhY3R1YWxseSBmYXN0ZXIKKyAgdGhhbiB0aGUgQyB2ZXJzaW9uIG9uIHlvdXIgbWFjaGluZSAtIHNvbWUgY29tcGlsZXJzIGNhbiBkbyBhIHZlcnkKKyAgZ29vZCBvcHRpbWl6YXRpb24gam9iIGFuZCB0aGV5IGFsc28gY2FuIG9wdGltaXplIHRoZSBjb2RlCisgIGZvciBhIHNwZWNpZmljIHByb2Nlc3Nvci4KKworCitXaGF0IGlzIHRoaXMgb3B0aW1pemF0aW9uIHRoaW5nID8KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGUgY29tcHJlc3NvcnMgdXNlIGEgaGV1cmlzdGljIGFwcHJvYWNoIC0gdGhleSBzb21ldGltZXMgY29kZQoraW5mb3JtYXRpb24gdGhhdCBkb2Vzbid0IGltcHJvdmUgY29tcHJlc3Npb24gcmF0aW8uCisKK09wdGltaXphdGlvbiByZW1vdmVzIHRoaXMgc3VwZXJmbHVvcyBpbmZvcm1hdGlvbiBpbiBvcmRlciB0bworaW5jcmVhc2UgZGVjb21wcmVzc2lvbiBzcGVlZC4KKworT3B0aW1pemF0aW9uIHdvcmtzIHNpbWlsYXIgdG8gZGVjb21wcmVzc2lvbiBleGNlcHQgdGhhdCB0aGUKK2NvbXByZXNzZWQgZGF0YSBpcyBtb2RpZmllZCBhcyB3ZWxsLiBUaGUgbGVuZ3RoIG9mIHRoZSBjb21wcmVzc2VkCitkYXRhIGJsb2NrIHdpbGwgbm90IGNoYW5nZSAtIG9ubHkgdGhlIGNvbXByZXNzZWQgZGF0YS1ieXRlcyB3aWxsCitnZXQgcmVhcnJhbmdlZCBhIGxpdHRsZSBiaXQuCisKK0Rvbid0IGV4cGVjdCB0b28gbXVjaCwgdGhvdWdoIC0gbXkgdGVzdHMgaGF2ZSBzaG93biB0aGF0IHRoZQorb3B0aW1pemF0aW9uIHN0ZXAgaW1wcm92ZXMgZGVjb21wcmVzc2lvbiBzcGVlZCBieSBhYm91dCAxLTMlLgorCisKK0kgbmVlZCBldmVuIG1vcmUgZGVjb21wcmVzc2lvbiBzcGVlZC4uLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK01hbnkgUklTQyBwcm9jZXNzb3JzIChsaWtlIE1JUFMpIGNhbiB0cmFuc2ZlciAzMi1iaXQgd29yZHMgbXVjaAorZmFzdGVyIHRoYW4gYnl0ZXMgLSB0aGlzIGNhbiBzaWduaWZpY2FudGx5IHNwZWVkIHVwIGRlY29tcHJlc3Npb24uCitTbyBhZnRlciB2ZXJpZnlpbmcgdGhhdCBldmVyeXRoaW5nIHdvcmtzIGZpbmUgeW91IGNhbiB0cnkgaWYgYWN0aXZhdGluZwordGhlIExaT19BTElHTkVEX09LXzQgbWFjcm8gaW1wcm92ZXMgTFpPMVggYW5kIExaTzFZIGRlY29tcHJlc3Npb24KK3BlcmZvcm1hbmNlLiBDaGFuZ2UgdGhlIGZpbGUgY29uZmlnLmggYWNjb3JkaW5nbHkgYW5kIHJlY29tcGlsZSBldmVyeXRoaW5nLgorCitPbiBhIGkzODYgYXJjaGl0ZWN0dXJlIHlvdSBzaG91bGQgZXZhbHVhdGUgdGhlIGFzc2VtYmxlciB2ZXJzaW9ucy4KKworCitIb3cgY2FuIEkgcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMgd2hlbiAoZGUpY29tcHJlc3NpbmcgPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworSWYgeW91IGNsZXZlcmx5IGFycmFuZ2UgeW91ciBkYXRhLCB5b3UgY2FuIGRvIGFuIG92ZXJsYXBwaW5nIChpbi1wbGFjZSkKK2RlY29tcHJlc3Npb24gd2hpY2ggbWVhbnMgdGhhdCB5b3UgY2FuIGRlY29tcHJlc3MgdG8gdGhlICpzYW1lKgorYmxvY2sgd2hlcmUgdGhlIGNvbXByZXNzZWQgZGF0YSByZXNpZGVzLiBUaGlzIGVmZmVjdGl2ZWx5IHJlbW92ZXMKK3RoZSBzcGFjZSByZXF1aXJlbWVudHMgZm9yIGhvbGRpbmcgdGhlIGNvbXByZXNzZWQgZGF0YSBibG9jay4KKworVGhpcyB0ZWNobmlxdWUgaXMgZXNzZW50aWFsIGUuZy4gZm9yIHVzYWdlIGluIGFuIGV4ZWN1dGFibGUgcGFja2VyLgorCitZb3UgY2FuIGFsc28gcGFydGx5IG92ZXJsYXkgdGhlIGJ1ZmZlcnMgd2hlbiBkb2luZyBjb21wcmVzc2lvbi4KKworU2VlIGV4YW1wbGVzL292ZXJsYXAuYyBmb3IgYSB3b3JraW5nIGV4YW1wbGUuCisKKworQ2FuIHlvdSBnaXZlIGEgY29va2Jvb2sgZm9yIHVzaW5nIHByZS1jb21wcmVzc2VkIGRhdGEgPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMZXQncyBhc3N1bWUgeW91IHVzZSBMWk8xWC05OTkuCisKKzEpIHByZS1jb21wcmVzc2lvbiBzdGVwCisgICAtIGNhbGwgbHpvX2luaXQoKQorICAgLSBjYWxsIGx6bzF4Xzk5OV9jb21wcmVzcygpCisgICAtIGNhbGwgbHpvMXhfb3B0aW1pemUoKQorICAgLSBjb21wdXRlIGFuIGFkbGVyMzIgY2hlY2tzdW0gb2YgdGhlICpjb21wcmVzc2VkKiBkYXRhCisgICAtIHN0b3JlIHRoZSBjb21wcmVzc2VkIGRhdGEgYW5kIHRoZSBjaGVja3N1bSBpbiBhIGZpbGUKKyAgIC0gaWYgeW91IGFyZSBwYXJhbm9pZCB5b3Ugc2hvdWxkIHZlcmlmeSBkZWNvbXByZXNzaW9uIG5vdworCisyKSBkZWNvbXByZXNzaW9uIHN0ZXAgd2l0aGluIHlvdXIgYXBwbGljYXRpb24KKyAgIC0gY2FsbCBsem9faW5pdCgpCisgICAtIGxvYWQgeW91ciBjb21wcmVzc2VkIGRhdGEgYW5kIHRoZSBjaGVja3N1bQorICAgLSBvcHRpb25hbGx5IHZlcmlmeSB0aGUgY2hlY2tzdW0gb2YgdGhlIGNvbXByZXNzZWQgZGF0YQorICAgICAoc28gdGhhdCB5b3UgY2FuIHVzZSB0aGUgc3RhbmRhcmQgZGVjb21wcmVzc29yKQorICAgLSBkZWNvbXByZXNzCisKK1NlZSBleGFtcGxlcy9wcmVjb21wLmMgYW5kIGV4YW1wbGVzL3ByZWNvbXAyLmMgZm9yIGEgd29ya2luZyBleGFtcGxlLgorCisKK0hvdyBtdWNoIGNhbiBteSBkYXRhIGV4cGFuZCBkdXJpbmcgY29tcHJlc3Npb24gPworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0xaTyB3aWxsIGV4cGFuZCBpbmNvbXByZXNzaWJsZSBkYXRhIGJ5IGEgbGl0dGxlIGFtb3VudC4KK0kgc3RpbGwgaGF2ZW4ndCBjb21wdXRlZCB0aGUgZXhhY3QgdmFsdWVzLCBidXQgSSBzdWdnZXN0IHVzaW5nCit0aGVzZSBmb3JtdWxhcyBmb3IgYSB3b3JzdC1jYXNlIGV4cGFuc2lvbiBjYWxjdWxhdGlvbjoKKworICBBbGdvcml0aG0gTFpPMSwgTFpPMUEsIExaTzFCLCBMWk8xQywgTFpPMUYsIExaTzFYLCBMWk8xWSwgTFpPMVo6CisgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBvdXRwdXRfYmxvY2tfc2l6ZSA9IGlucHV0X2Jsb2NrX3NpemUgKyAoaW5wdXRfYmxvY2tfc2l6ZSAvIDE2KSArIDY0ICsgMworCisgICAgW1RoaXMgaXMgYWJvdXQgMTA2JSBmb3IgYSBsYXJnZSBibG9jayBzaXplLl0KKworICBBbGdvcml0aG0gTFpPMkE6CisgIC0tLS0tLS0tLS0tLS0tLS0KKyAgICBvdXRwdXRfYmxvY2tfc2l6ZSA9IGlucHV0X2Jsb2NrX3NpemUgKyAoaW5wdXRfYmxvY2tfc2l6ZSAvIDgpICsgMTI4ICsgMworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9kb2MvTFpPLlRYVCBiL2x6by0yLjAzL2RvYy9MWk8uVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkZGY0MzAKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9kb2MvTFpPLlRYVApAQCAtMCwwICsxLDI5MSBAQAorCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIExaTyAtLSBhIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyBBdXRob3IgIDogTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgICAgICAgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICAgICAgICAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyBWZXJzaW9uIDogMi4wMworIERhdGUgICAgOiAzMCBBcHIgMjAwOAorCisKKyBBYnN0cmFjdAorIC0tLS0tLS0tCisgTFpPIGlzIGEgcG9ydGFibGUgbG9zc2xlc3MgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5IHdyaXR0ZW4gaW4gQU5TSSBDLgorIEl0IG9mZmVycyBwcmV0dHkgZmFzdCBjb21wcmVzc2lvbiBhbmQgdmVyeSBmYXN0IGRlY29tcHJlc3Npb24uCisgRGVjb21wcmVzc2lvbiByZXF1aXJlcyBubyBtZW1vcnkuCisKKyBJbiBhZGRpdGlvbiB0aGVyZSBhcmUgc2xvd2VyIGNvbXByZXNzaW9uIGxldmVscyBhY2hpZXZpbmcgYSBxdWl0ZQorIGNvbXBldGl0aXZlIGNvbXByZXNzaW9uIHJhdGlvIHdoaWxlIHN0aWxsIGRlY29tcHJlc3NpbmcgYXQKKyB0aGlzIHZlcnkgaGlnaCBzcGVlZC4KKworIFRoZSBMWk8gYWxnb3JpdGhtcyBhbmQgaW1wbGVtZW50YXRpb25zIGFyZSBjb3B5cmlnaHRlZCBPcGVuU291cmNlCisgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisKKyBJbnRyb2R1Y3Rpb24KKyAtLS0tLS0tLS0tLS0KKyBMWk8gaXMgYSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgd2hpY2ggaXMgc3VpdGFibGUgZm9yIGRhdGEKKyBkZS0vY29tcHJlc3Npb24gaW4gcmVhbC10aW1lLiBUaGlzIG1lYW5zIGl0IGZhdm91cnMgc3BlZWQKKyBvdmVyIGNvbXByZXNzaW9uIHJhdGlvLgorCisgVGhlIGFjcm9ueW0gTFpPIGlzIHN0YW5kaW5nIGZvciBMZW1wZWwtWml2LU9iZXJodW1lci4KKworIExaTyBpcyB3cml0dGVuIGluIEFOU0kgQy4gQm90aCB0aGUgc291cmNlIGNvZGUgYW5kIHRoZSBjb21wcmVzc2VkCisgZGF0YSBmb3JtYXQgYXJlIGRlc2lnbmVkIHRvIGJlIHBvcnRhYmxlIGFjcm9zcyBwbGF0Zm9ybXMuCisKKyBMWk8gaW1wbGVtZW50cyBhIG51bWJlciBvZiBhbGdvcml0aG1zIHdpdGggdGhlIGZvbGxvd2luZyBmZWF0dXJlczoKKworIC0gRGVjb21wcmVzc2lvbiBpcyBzaW1wbGUgYW5kICp2ZXJ5KiBmYXN0LgorIC0gUmVxdWlyZXMgbm8gbWVtb3J5IGZvciBkZWNvbXByZXNzaW9uLgorIC0gQ29tcHJlc3Npb24gaXMgcHJldHR5IGZhc3QuCisgLSBSZXF1aXJlcyA2NCBrQiBvZiBtZW1vcnkgZm9yIGNvbXByZXNzaW9uLgorIC0gQWxsb3dzIHlvdSB0byBkaWFsIHVwIGV4dHJhIGNvbXByZXNzaW9uIGF0IGEgc3BlZWQgY29zdCBpbiB0aGUKKyAgIGNvbXByZXNzb3IuIFRoZSBzcGVlZCBvZiB0aGUgZGVjb21wcmVzc29yIGlzIG5vdCByZWR1Y2VkLgorIC0gSW5jbHVkZXMgY29tcHJlc3Npb24gbGV2ZWxzIGZvciBnZW5lcmF0aW5nIHByZS1jb21wcmVzc2VkCisgICBkYXRhIHdoaWNoIGFjaGlldmUgYSBxdWl0ZSBjb21wZXRpdGl2ZSBjb21wcmVzc2lvbiByYXRpby4KKyAtIFRoZXJlIGlzIGFsc28gYSBjb21wcmVzc2lvbiBsZXZlbCB3aGljaCBuZWVkcyBvbmx5IDgga0IgZm9yIGNvbXByZXNzaW9uLgorIC0gQWxnb3JpdGhtIGlzIHRocmVhZCBzYWZlLgorIC0gQWxnb3JpdGhtIGlzIGxvc3NsZXNzLgorCisgTFpPIHN1cHBvcnRzIG92ZXJsYXBwaW5nIGNvbXByZXNzaW9uIGFuZCBpbi1wbGFjZSBkZWNvbXByZXNzaW9uLgorCisKKyBEZXNpZ24gY3JpdGVyaWEKKyAtLS0tLS0tLS0tLS0tLS0KKyBMWk8gd2FzIGRlc2lnbmVkIHdpdGggc3BlZWQgaW4gbWluZC4gRGVjb21wcmVzc29yIHNwZWVkIGhhcyBiZWVuCisgZmF2b3VyZWQgb3ZlciBjb21wcmVzc29yIHNwZWVkLiBSZWFsLXRpbWUgZGVjb21wcmVzc2lvbiBzaG91bGQgYmUKKyBwb3NzaWJsZSBmb3IgdmlydHVhbGx5IGFueSBhcHBsaWNhdGlvbi4gVGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorIExaTzFYIGRlY29tcHJlc3NvciBpbiBvcHRpbWl6ZWQgaTM4NiBhc3NlbWJsZXIgY29kZSBydW5zIGFib3V0IGF0CisgdGhlIHRoaXJkIG9mIHRoZSBzcGVlZCBvZiBhIG1lbWNweSgpIC0gYW5kIGV2ZW4gZmFzdGVyIGZvciBtYW55IGZpbGVzLgorCisgSW4gZmFjdCBJIGZpcnN0IHdyb3RlIHRoZSBkZWNvbXByZXNzb3Igb2YgZWFjaCBhbGdvcml0aG0gdGhlcmVieQorIGRlZmluaW5nIHRoZSBjb21wcmVzc2VkIGRhdGEgZm9ybWF0LCB2ZXJpZmllZCBpdCB3aXRoIG1hbnVhbGx5CisgY3JlYXRlZCB0ZXN0IGRhdGEgYW5kIGF0IGxhc3QgYWRkZWQgdGhlIGNvbXByZXNzb3IuCisKKworIFBlcmZvcm1hbmNlCisgLS0tLS0tLS0tLS0KKyBUbyBrZWVwIHlvdSBpbnRlcmVzdGVkLCBoZXJlIGlzIGFuIG92ZXJ2aWV3IG9mIHRoZSBhdmVyYWdlIHJlc3VsdHMKKyB3aGVuIGNvbXByZXNzaW5nIHRoZSBDYWxnYXJ5IENvcnB1cyB0ZXN0IHN1aXRlIHdpdGggYSBibG9ja3NpemUKKyBvZiAyNTYga0IsIG9yaWdpbmFsbHkgZG9uZSBvbiBhbiBhbmNpZW50IEludGVsIFBlbnRpdW0gMTMzLgorCisgVGhlIG5hbWluZyBjb252ZW50aW9uIG9mIHRoZSB2YXJpb3VzIGFsZ29yaXRobXMgZ29lcyBMWk94eC1OLCB3aGVyZSBOIGlzCisgdGhlIGNvbXByZXNzaW9uIGxldmVsLiBSYW5nZSAxLTkgaW5kaWNhdGVzIHRoZSBmYXN0IHN0YW5kYXJkIGxldmVscyB1c2luZworIDY0IGtCIG1lbW9yeSBmb3IgY29tcHJlc3Npb24uIExldmVsIDk5IG9mZmVycyBiZXR0ZXIgY29tcHJlc3Npb24gYXQgdGhlCisgY29zdCBvZiBtb3JlIG1lbW9yeSAoMjU2IGtCKSwgYW5kIGlzIHN0aWxsIHJlYXNvbmFibHkgZmFzdC4KKyBMZXZlbCA5OTkgYWNoaWV2ZXMgbmVhcmx5IG9wdGltYWwgY29tcHJlc3Npb24gLSBidXQgaXQgaXMgc2xvdworIGFuZCB1c2VzIG11Y2ggbWVtb3J5LCBhbmQgaXMgbWFpbmx5IGludGVuZGVkIGZvciBnZW5lcmF0aW5nCisgcHJlLWNvbXByZXNzZWQgZGF0YS4KKworIFRoZSBDIHZlcnNpb24gb2YgTFpPMVgtMSBpcyBhYm91dCA0LTUgdGltZXMgZmFzdGVyIHRoYW4gdGhlIGZhc3Rlc3QKKyB6bGliIGNvbXByZXNzaW9uIGxldmVsLCBhbmQgaXQgYWxzbyBvdXRwZXJmb3JtcyBvdGhlciBhbGdvcml0aG1zCisgbGlrZSBMWlJXMS1BIGFuZCBMWlYgaW4gYm90aCBjb21wcmVzc2lvbiByYXRpbyBhbmQgY29tcHJlc3Npb24gc3BlZWQKKyBhbmQgZGVjb21wcmVzc2lvbiBzcGVlZC4KKworICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgfCBBbGdvcml0aG0gICAgICAgIExlbmd0aCAgQ3hCICAgQ29tTGVuICAlUmVtbiAgQml0cyAgIENvbSBLL3MgICBEZWMgSy9zIHwKKyB8IC0tLS0tLS0tLSAgICAgICAgLS0tLS0tICAtLS0gICAtLS0tLS0gIC0tLS0tICAtLS0tICAgLS0tLS0tLSAgIC0tLS0tLS0gfAorIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgfCBtZW1jcHkoKSAgICAgICAgIDIyNDQwMSAgICAxICAgMjI0NDAxICAxMDAuMCAgOC4wMCAgNjA5NTYuODMgIDU5MTI0LjU4IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMS0xICAgICAgICAgICAyMjQ0MDEgICAgMSAgIDExNzM2MiAgIDUzLjEgIDQuMjUgICA0NjY1LjI0ICAxMzM0MS45OCB8CisgfCBMWk8xLTk5ICAgICAgICAgIDIyNDQwMSAgICAxICAgMTAxNTYwICAgNDYuNyAgMy43MyAgIDEzNzMuMjkgIDEzODIzLjQwIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMUEtMSAgICAgICAgICAyMjQ0MDEgICAgMSAgIDExNTE3NCAgIDUxLjcgIDQuMTQgICA0OTM3LjgzICAxNDQxMC4zNSB8CisgfCBMWk8xQS05OSAgICAgICAgIDIyNDQwMSAgICAxICAgIDk5OTU4ICAgNDUuNSAgMy42NCAgIDEzNjIuNzIgIDE0NzM0LjE3IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMUItMSAgICAgICAgICAyMjQ0MDEgICAgMSAgIDEwOTU5MCAgIDQ5LjYgIDMuOTcgICA0NTY1LjUzICAxNTQzOC4zNCB8CisgfCBMWk8xQi0yICAgICAgICAgIDIyNDQwMSAgICAxICAgMTA2MjM1ICAgNDguNCAgMy44OCAgIDQyOTcuMzMgIDE1NDkyLjc5IHwKKyB8IExaTzFCLTMgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDQzOTUgICA0Ny44ICAzLjgzICAgNDAxOC4yMSAgMTUzNzMuNTIgfAorIHwgTFpPMUItNCAgICAgICAgICAyMjQ0MDEgICAgMSAgIDEwNDgyOCAgIDQ3LjQgIDMuNzkgICAzMDI0LjQ4ICAxNTEwMC4xMSB8CisgfCBMWk8xQi01ICAgICAgICAgIDIyNDQwMSAgICAxICAgMTAyNzI0ICAgNDYuNyAgMy43MyAgIDI4MjcuODIgIDE1NDI3LjYyIHwKKyB8IExaTzFCLTYgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDEyMTAgICA0Ni4wICAzLjY4ICAgMjYxNS45NiAgMTUzMjUuNjggfAorIHwgTFpPMUItNyAgICAgICAgICAyMjQ0MDEgICAgMSAgIDEwMTM4OCAgIDQ2LjAgIDMuNjggICAyNDMwLjg5ICAxNTM2MS40NyB8CisgfCBMWk8xQi04ICAgICAgICAgIDIyNDQwMSAgICAxICAgIDk5NDUzICAgNDUuMiAgMy42MiAgIDIxODMuODcgIDE1NDAyLjc3IHwKKyB8IExaTzFCLTkgICAgICAgICAgMjI0NDAxICAgIDEgICAgOTkxMTggICA0NS4wICAzLjYwICAgMTY3Ny4wNiAgMTUwNjkuNjAgfAorIHwgTFpPMUItOTkgICAgICAgICAyMjQ0MDEgICAgMSAgICA5NTM5OSAgIDQzLjYgIDMuNDggICAxMjg2Ljg3ICAxNTY1Ni4xMSB8CisgfCBMWk8xQi05OTkgICAgICAgIDIyNDQwMSAgICAxICAgIDgzOTM0ICAgMzkuMSAgMy4xMyAgICAyMzIuNDAgIDE2NDQ1LjA1IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMUMtMSAgICAgICAgICAyMjQ0MDEgICAgMSAgIDExMTczNSAgIDUwLjQgIDQuMDMgICA0ODgzLjA4ICAxNTU3MC45MSB8CisgfCBMWk8xQy0yICAgICAgICAgIDIyNDQwMSAgICAxICAgMTA4NjUyICAgNDkuMyAgMy45NCAgIDQ0MjQuMjQgIDE1NzMzLjE0IHwKKyB8IExaTzFDLTMgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDY4MTAgICA0OC43ICAzLjg5ICAgNDEyNy42NSAgMTU2NDUuNjkgfAorIHwgTFpPMUMtNCAgICAgICAgICAyMjQ0MDEgICAgMSAgIDEwNTcxNyAgIDQ3LjcgIDMuODIgICAzMDA3LjkyICAxNTM0Ni40NCB8CisgfCBMWk8xQy01ICAgICAgICAgIDIyNDQwMSAgICAxICAgMTAzNjA1ICAgNDcuMCAgMy43NiAgIDI4MjkuMTUgIDE1MTUzLjg4IHwKKyB8IExaTzFDLTYgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDI1ODUgICA0Ni41ICAzLjcyICAgMjYzMS4zNyAgMTUyNTcuNTggfAorIHwgTFpPMUMtNyAgICAgICAgICAyMjQ0MDEgICAgMSAgIDEwMTkzNyAgIDQ2LjIgIDMuNzAgICAyMzc4LjU3ICAxNTQ5Mi40OSB8CisgfCBMWk8xQy04ICAgICAgICAgIDIyNDQwMSAgICAxICAgMTAwNzc5ICAgNDUuNiAgMy42NSAgIDIxNzEuOTMgIDE1Mzg2LjA3IHwKKyB8IExaTzFDLTkgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDAyNTUgICA0NS40ICAzLjYzICAgMTY5MS40NCAgMTUxOTQuNjggfAorIHwgTFpPMUMtOTkgICAgICAgICAyMjQ0MDEgICAgMSAgICA5NzI1MiAgIDQ0LjEgIDMuNTMgICAxNDYyLjg4ICAxNTM0MS4zNyB8CisgfCBMWk8xQy05OTkgICAgICAgIDIyNDQwMSAgICAxICAgIDg3NzQwICAgNDAuMiAgMy4yMSAgICAzMDYuNDQgIDE2NDExLjk0IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMUYtMSAgICAgICAgICAyMjQ0MDEgICAgMSAgIDExMzQxMiAgIDUwLjggIDQuMDcgICA0NzU1Ljk3ICAxNjA3NC4xMiB8CisgfCBMWk8xRi05OTkgICAgICAgIDIyNDQwMSAgICAxICAgIDg5NTk5ICAgNDAuMyAgMy4yMyAgICAyODAuNjggIDE2NTUzLjkwIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMVgtMSgxMSkgICAgICAyMjQ0MDEgICAgMSAgIDExODgxMCAgIDUyLjYgIDQuMjEgICA0NTQ0LjQyICAxNTg3OS4wNCB8CisgfCBMWk8xWC0xKDEyKSAgICAgIDIyNDQwMSAgICAxICAgMTEzNjc1ICAgNTAuNiAgNC4wNSAgIDQ0MTEuMTUgIDE1NzIxLjU5IHwKKyB8IExaTzFYLTEgICAgICAgICAgMjI0NDAxICAgIDEgICAxMDkzMjMgICA0OS40ICAzLjk1ICAgNDk5MS43NiAgMTU1ODQuODkgfAorIHwgTFpPMVgtMSgxNSkgICAgICAyMjQ0MDEgICAgMSAgIDEwODUwMCAgIDQ5LjEgIDMuOTMgICA1MDc3LjUwICAxNTc0NC41NiB8CisgfCBMWk8xWC05OTkgICAgICAgIDIyNDQwMSAgICAxICAgIDgyODU0ICAgMzguMCAgMy4wNCAgICAxMzUuNzcgIDE2NTQ4LjQ4IHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMVktMSAgICAgICAgICAyMjQ0MDEgICAgMSAgIDExMDgyMCAgIDQ5LjggIDMuOTggICA0OTUyLjUyICAxNTYzOC44MiB8CisgfCBMWk8xWS05OTkgICAgICAgIDIyNDQwMSAgICAxICAgIDgzNjE0ICAgMzguMiAgMy4wNSAgICAxMzUuMDcgIDE2Mzg1LjQwIHwKKyB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIHwgTFpPMVotOTk5ICAgICAgICAyMjQ0MDEgICAgMSAgICA4MzAzNCAgIDM4LjAgIDMuMDQgICAgMTMzLjMxICAxMDU1My43NCB8CisgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyB8IExaTzJBLTk5OSAgICAgICAgMjI0NDAxICAgIDEgICAgODc4ODAgICA0MC4wICAzLjIwICAgIDMwMS4yMSAgIDgxMTUuNzUgfAorICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKKyBOb3RlczoKKyAgLSBDeEIgaXMgdGhlIG51bWJlciBvZiBibG9ja3MKKyAgLSBLL3MgaXMgdGhlIHNwZWVkIG1lYXN1cmVkIGluIDEwMDAgdW5jb21wcmVzc2VkIGJ5dGVzIHBlciBzZWNvbmQKKyAgLSB0aGUgYXNzZW1ibGVyIGRlY29tcHJlc3NvcnMgYXJlIGV2ZW4gZmFzdGVyCisKKworIFNob3J0IGRvY3VtZW50YXRpb24KKyAtLS0tLS0tLS0tLS0tLS0tLS0tCisgTFpPIGlzIGEgYmxvY2sgY29tcHJlc3Npb24gYWxnb3JpdGhtIC0gaXQgY29tcHJlc3NlcyBhbmQgZGVjb21wcmVzc2VzCisgYSBibG9jayBvZiBkYXRhLiBCbG9jayBzaXplIG11c3QgYmUgdGhlIHNhbWUgZm9yIGNvbXByZXNzaW9uCisgYW5kIGRlY29tcHJlc3Npb24uCisKKyBMWk8gY29tcHJlc3NlcyBhIGJsb2NrIG9mIGRhdGEgaW50byBtYXRjaGVzIChhIHNsaWRpbmcgZGljdGlvbmFyeSkKKyBhbmQgcnVucyBvZiBub24tbWF0Y2hpbmcgbGl0ZXJhbHMuIExaTyB0YWtlcyBjYXJlIGFib3V0IGxvbmcgbWF0Y2hlcworIGFuZCBsb25nIGxpdGVyYWwgcnVucyBzbyB0aGF0IGl0IHByb2R1Y2VzIGdvb2QgcmVzdWx0cyBvbiBoaWdobHkKKyByZWR1bmRhbnQgZGF0YSBhbmQgZGVhbHMgYWNjZXB0YWJseSB3aXRoIG5vbi1jb21wcmVzc2libGUgZGF0YS4KKworIFdoZW4gZGVhbGluZyB3aXRoIHVuY29tcHJlc3NpYmxlIGRhdGEsIExaTyBleHBhbmRzIHRoZSBpbnB1dAorIGJsb2NrIGJ5IGEgbWF4aW11bSBvZiAxNiBieXRlcyBwZXIgMTAyNCBieXRlcyBpbnB1dC4KKworIEkgaGF2ZSB2ZXJpZmllZCBMWk8gdXNpbmcgc3VjaCB0b29scyBhcyB2YWxncmluZCBhbmQgb3RoZXIgbWVtb3J5IGNoZWNrZXJzLgorIEFuZCBpbiBhZGRpdGlvbiB0byBjb21wcmVzc2luZyBnaWdhYnl0ZXMgb2YgZmlsZXMgd2hlbiB0dW5pbmcgc29tZSBwYXJhbWV0ZXJzCisgSSBoYXZlIGFsc28gY29uc3VsdGVkIHZhcmlvdXMgYGxpbnQnIHByb2dyYW1zIHRvIHNwb3QgcG90ZW50aWFsIHBvcnRhYmlsaXR5CisgcHJvYmxlbXMuIExaTyBpcyBmcmVlIG9mIGFueSBrbm93biBidWdzLgorCisKKyBUaGUgYWxnb3JpdGhtcworIC0tLS0tLS0tLS0tLS0tCisgVGhlcmUgYXJlIHRvbyBtYW55IGFsZ29yaXRobXMgaW1wbGVtZW50ZWQuIEJ1dCBJIHdhbnQgdG8gc3VwcG9ydAorIHVubGltaXRlZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCBzbyBJIHdpbGwgbm90IHJlZHVjZSB0aGUgTFpPCisgZGlzdHJpYnV0aW9uIGluIHRoZSBmdXR1cmUuCisKKyBBcyB0aGUgbWFueSBvYmplY3QgZmlsZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudCBvZiBlYWNoIG90aGVyLCB0aGUKKyBzaXplIG92ZXJoZWFkIGZvciBhbiBleGVjdXRhYmxlIHN0YXRpY2FsbHkgbGlua2VkIHdpdGggdGhlIExaTyBsaWJyYXJ5CisgaXMgdXN1YWxseSBwcmV0dHkgbG93IChqdXN0IGEgZmV3IGtCKSBiZWNhdXNlIHRoZSBsaW5rZXIgd2lsbCBvbmx5IGFkZAorIHRoZSBtb2R1bGVzIHRoYXQgeW91IGFyZSBhY3R1YWxseSB1c2luZy4KKworIEkgZmlyc3QgcHVibGlzaGVkIExaTzEgYW5kIExaTzFBIGluIHRoZSBJbnRlcm5ldCBuZXdzZ3JvdXBzCisgY29tcC5jb21wcmVzc2lvbiBhbmQgY29tcC5jb21wcmVzc2lvbi5yZXNlYXJjaCBpbiBNYXJjaCAxOTk2LgorIFRoZXkgYXJlIG1haW5seSBpbmNsdWRlZCBmb3IgY29tcGF0aWJpbGl0eSByZWFzb25zLiBUaGUgTFpPMkEKKyBkZWNvbXByZXNzb3IgaXMgdG9vIHNsb3csIGFuZCB0aGVyZSBpcyBubyBmYXN0IGNvbXByZXNzb3IgYW55d2F5LgorCisgTXkgZXhwZXJpbWVudHMgaGF2ZSBzaG93biB0aGF0IExaTzFCIGlzIGdvb2Qgd2l0aCBhIGxhcmdlIGJsb2Nrc2l6ZQorIG9yIHdpdGggdmVyeSByZWR1bmRhbnQgZGF0YSwgTFpPMUYgaXMgZ29vZCB3aXRoIGEgc21hbGwgYmxvY2tzaXplIG9yCisgd2l0aCBiaW5hcnkgZGF0YSBhbmQgdGhhdCBMWk8xWCBpcyBvZnRlbiB0aGUgYmVzdCBjaG9pY2Ugb2YgYWxsLgorIExaTzFZIGFuZCBMWk8xWiBhcmUgYWxtb3N0IGlkZW50aWNhbCB0byBMWk8xWCAtIHRoZXkgY2FuIGFjaGlldmUgYQorIGJldHRlciBjb21wcmVzc2lvbiByYXRpbyBvbiBzb21lIGZpbGVzLgorIEJld2FyZSwgeW91ciBtaWxlYWdlIG1heSB2YXJ5LgorCisKKyBVc2FnZSBvZiB0aGUgbGlicmFyeQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisgRGVzcGl0ZSBvZiBpdHMgc2l6ZSwgdGhlIGJhc2ljIHVzYWdlIG9mIExaTyBpcyByZWFsbHkgdmVyeSBzaW1wbGUuCisKKyBMZXQncyBhc3N1bWUgeW91IHdhbnQgdG8gY29tcHJlc3Mgc29tZSBkYXRhIHdpdGggTFpPMVgtMToKKyAgIEEpIGNvbXByZXNzaW9uCisgICAgICAqIGluY2x1ZGUgPGx6by9sem8xeC5oPgorICAgICAgICBjYWxsIGx6b19pbml0KCkKKyAgICAgICAgY29tcHJlc3MgeW91ciBkYXRhIHdpdGggbHpvMXhfMV9jb21wcmVzcygpCisgICAgICAqIGxpbmsgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBMWk8gbGlicmFyeQorICAgQikgZGVjb21wcmVzc2lvbgorICAgICAgKiBpbmNsdWRlIDxsem8vbHpvMXguaD4KKyAgICAgICAgY2FsbCBsem9faW5pdCgpCisgICAgICAgIGRlY29tcHJlc3MgeW91ciBkYXRhIHdpdGggbHpvMXhfZGVjb21wcmVzcygpCisgICAgICAqIGxpbmsgeW91ciBhcHBsaWNhdGlvbiB3aXRoIHRoZSBMWk8gbGlicmFyeQorCisgVGhlIHByb2dyYW0gZXhhbXBsZXMvc2ltcGxlLmMgc2hvd3MgYSBmdWxseSB3b3JraW5nIGV4YW1wbGUuCisgU2VlIGFsc28gTFpPLkZBUSBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworCisgQnVpbGRpbmcgTFpPCisgLS0tLS0tLS0tLS0tCisgQXMgTFpPIHVzZXMgQXV0b2NvbmYrQXV0b21ha2UrTGlidG9vbCB0aGUgYnVpbGRpbmcgcHJvY2VzcyB1bmRlcgorIFVOSVggc3lzdGVtcyBzaG91bGQgYmUgdmVyeSB1bnByb2JsZW1hdGljLiBTaGFyZWQgbGlicmFyaWVzIGFyZQorIHN1cHBvcnRlZCBvbiBtYW55IGFyY2hpdGVjdHVyZXMgYXMgd2VsbC4KKyBGb3IgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIHNlZSB0aGUgZmlsZSBJTlNUQUxMLgorCisgUGxlYXNlIG5vdGUgdGhhdCBkdWUgdG8gdGhlIGRlc2lnbiBvZiB0aGUgRUxGIGV4ZWN1dGFibGUgZm9ybWF0CisgdGhlIHBlcmZvcm1hbmNlIG9mIGEgc2hhcmVkIGxpYnJhcnkgb24gaTM4NiBzeXN0ZW1zIChlLmcuIExpbnV4KQorIGlzIGEgbGl0dGxlIGJpdCBzbG93ZXIsIHNvIHlvdSBtYXkgd2FudCB0byBsaW5rIHlvdXIgYXBwbGljYXRpb25zCisgd2l0aCB0aGUgc3RhdGljIHZlcnNpb24gKGxpYmx6bzIuYSkgYW55d2F5LgorCisgRm9yIGJ1aWxkaW5nIHVuZGVyIERPUywgV2luMTYsIFdpbjMyLCBPUy8yIGFuZCBvdGhlciBzeXN0ZW1zCisgdGFrZSBhIGxvb2sgYXQgdGhlIGZpbGUgQi8wMHJlYWRtZS50eHQuCisKKyBJbiBjYXNlIG9mIHRyb3VibGVzIChsaWtlIGRlY29tcHJlc3Npb24gZGF0YSBlcnJvcnMpIHRyeSByZWNvbXBpbGluZworIGV2ZXJ5dGhpbmcgd2l0aG91dCBvcHRpbWl6YXRpb25zIC0gTFpPIG1heSBicmVhayB0aGUgb3B0aW1pemVyCisgb2YgeW91ciBjb21waWxlci4gU2VlIHRoZSBmaWxlIEJVR1MuCisKKyBMWk8gaXMgd3JpdHRlbiBpbiBBTlNJIEMuIEluIHBhcnRpY3VsYXIgdGhpcyBtZWFuczoKKyAgIC0geW91ciBjb21waWxlciBtdXN0IHVuZGVyc3RhbmQgcHJvdG90eXBlcworICAgLSB5b3VyIGNvbXBpbGVyIG11c3QgdW5kZXJzdGFuZCBwcm90b3R5cGVzIGluIGZ1bmN0aW9uIHBvaW50ZXJzCisgICAtIHlvdXIgY29tcGlsZXIgbXVzdCBjb3JyZWN0bHkgcHJvbW90ZSBpbnRlZ3JhbHMgKCJ2YWx1ZS1wcmVzZXJ2aW5nIikKKyAgIC0geW91ciBwcmVwcm9jZXNzb3IgbXVzdCBpbXBsZW1lbnQgI2VsaWYsICNlcnJvciBhbmQgc3RyaW5naXppbmcKKyAgIC0geW91IG11c3QgaGF2ZSBhIGNvbmZvcm1pbmcgYW5kIGNvcnJlY3QgPGxpbWl0cy5oPiBoZWFkZXIKKyAgIC0geW91IG11c3QgaGF2ZSA8c3RkZGVmLmg+LCA8c3RyaW5nLmg+IGFuZCBvdGhlciBBTlNJIEMgaGVhZGVycworICAgLSB5b3Ugc2hvdWxkIGhhdmUgc2l6ZV90IGFuZCBwdHJkaWZmX3QKKworCisgUG9ydGFiaWxpdHkKKyAtLS0tLS0tLS0tLQorIEkgaGF2ZSBidWlsdCBhbmQgdGVzdGVkIExaTyBzdWNjZXNzZnVsbHkgb24gYSB2YXJpZXR5IG9mIHBsYXRmb3JtcworIGluY2x1ZGluZyBET1MgKDE2ICsgMzIgYml0KSwgV2luZG93cyAzLnggKDE2LWJpdCksIFdpbjMyLCBXaW42NCwKKyBMaW51eCwgKkJTRCwgSFAtVVggYW5kIG1hbnkgbW9yZS4KKworIExaTyBpcyBhbHNvIHJlcG9ydGVkIHRvIHdvcmsgdW5kZXIgQUlYLCBDb252ZXhPUywgSVJJWCwgTWFjT1MsIFBhbG1PUyAoUGlsb3QpLAorIFBTWCAoU29ueSBQbGF5c3RhdGlvbiksIFNvbGFyaXMsIFN1bk9TLCBUT1MgKEF0YXJpIFNUKSBhbmQgVnhXb3Jrcy4KKyBGdXJ0aGVybW9yZSBpdCBpcyBzYWlkIHRoYXQgaXRzIHBlcmZvcm1hbmNlIG9uIGEgQ3JheSBpcyBzdXBlcmlvcgorIHRvIGFsbCBvdGhlciBtYWNoaW5lcy4uLgorCisgQW5kIEkgdGhpbmsgaXQgd291bGQgYmUgbXVjaCBmdW4gdG8gdHJhbnNsYXRlIHRoZSBkZWNvbXByZXNzb3JzCisgdG8gWi04MCBvciA2NTAyIGFzc2VtYmx5LgorCisKKyBUaGUgZnV0dXJlCisgLS0tLS0tLS0tLQorIEhlcmUgaXMgd2hhdCBJJ20gcGxhbm5pbmcgZm9yIHRoZSBuZXh0IG1vbnRocy4gTm8gcHJvbWlzZXMsIHRob3VnaC4uLgorCisgLSBpbnRlcmZhY2VzIHRvIC5ORVQgYW5kIE1vbm8KKyAtIGludGVyZmFjZXMgdG8gUGVybCwgSmF2YSwgUHl0aG9uLCBEZWxwaGksIFZpc3VhbCBCYXNpYywgLi4uCisgLSBpbXByb3ZlIGRvY3VtZW50YXRpb24gYW5kIEFQSSByZWZlcmVuY2UKKworCisgU29tZSBjb21tZW50cyBhYm91dCB0aGUgc291cmNlIGNvZGUKKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEJlIHdhcm5lZDogdGhlIG1haW4gc291cmNlIGNvZGUgaW4gdGhlIGBzcmMnIGRpcmVjdG9yeSBpcyBhCisgcmVhbCBwYWluIHRvIHVuZGVyc3RhbmQgYXMgSSd2ZSBleHBlcmltZW50ZWQgd2l0aCBodW5kcmVkcyBvZiBzbGlnaHRseQorIGRpZmZlcmVudCB2ZXJzaW9ucy4gSXQgY29udGFpbnMgbWFueSAjaWYgYW5kIHNvbWUgZ290b3MsIGFuZAorIGlzICpjb21wbGV0ZWx5IG9wdGltaXplZCBmb3Igc3BlZWQqIGFuZCBub3QgZm9yIHJlYWRhYmlsaXR5LgorIENvZGUgc2hhcmluZyBvZiB0aGUgZGlmZmVyZW50IGFsZ29yaXRobXMgaXMgaW1wbGVtZW50ZWQgYnkgc3RyZXNzaW5nCisgdGhlIHByZXByb2Nlc3NvciAtIHRoaXMgY2FuIGJlIHJlYWxseSBjb25mdXNpbmcuIExvdHMgb2YgbWFyY29zIGFuZAorIGFzc2VydGlvbnMgZG9uJ3QgbWFrZSB0aGluZ3MgYmV0dGVyLgorCisgTmV2ZXJ0aGVsZXNzIExaTyBjb21waWxlcyB2ZXJ5IHF1aWV0bHkgb24gYSB2YXJpZXR5IG9mCisgY29tcGlsZXJzIHdpdGggdGhlIGhpZ2hlc3Qgd2FybmluZyBsZXZlbHMgdHVybmVkIG9uLCBldmVuCisgaW4gQysrIG1vZGUuCisKKworIENvcHlyaWdodAorIC0tLS0tLS0tLQorIExaTyBpcyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCisgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisKKyBMWk8gaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKS4KKyBTZWUgdGhlIGZpbGUgQ09QWUlORy4KKworIFNwZWNpYWwgbGljZW5zZXMgZm9yIGNvbW1lcmNpYWwgYW5kIG90aGVyIGFwcGxpY2F0aW9ucyB3aGljaAorIGFyZSBub3Qgd2lsbGluZyB0byBhY2NlcHQgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYXJlIGF2YWlsYWJsZSBieSBjb250YWN0aW5nIHRoZSBhdXRob3IuCisKKworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9kb2MvTFpPQVBJLlRYVCBiL2x6by0yLjAzL2RvYy9MWk9BUEkuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjg1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9kb2MvTFpPQVBJLlRYVApAQCAtMCwwICsxLDI4NSBAQAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitMWk8gLS0gYSByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICAgICAgICAgICAgICAgIExJQlJBUlkgUkVGRVJFTkNFCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworWyBwbGVhc2UgcmVhZCBMWk8uRkFRIGZpcnN0IF0KKworCitUYWJsZSBvZiBDb250ZW50cworPT09PT09PT09PT09PT09PT0KKworMSAgICAgIEludHJvZHVjdGlvbiB0byB0aGUgTFpPIExpYnJhcnkgUmVmZXJlbmNlCisxLjEgICAgICBQcmVsaW1pbmFyeSBub3RlcworMS4yICAgICAgSGVhZGVycworMiAgICAgIEdlbmVyYWwKKzIuMSAgICAgIFRoZSBtZW1vcnkgbW9kZWwKKzIuMiAgICAgIFB1YmxpYyBpbnRlZ3JhbCB0eXBlcworMi4zICAgICAgUHVibGljIHBvaW50ZXIgdHlwZXMKKzIuNCAgICAgIFB1YmxpYyBmdW5jdGlvbiB0eXBlcworMyAgICAgIEZ1bmN0aW9uIHJlZmVyZW5jZQorMy4xICAgICAgSW5pdGlhbGl6YXRpb24KKzMuMiAgICAgIENvbXByZXNzaW9uCiszLjMgICAgICBEZWNvbXByZXNzaW9uCiszLjQgICAgICBPcHRpbWl6YXRpb24KKzMuNSAgICAgIFN0cmluZyBmdW5jdGlvbnMKKzMuNiAgICAgIENoZWNrc3VtIGZ1bmN0aW9ucworMy43ICAgICAgVmVyc2lvbiBmdW5jdGlvbnMKKzQgICAgICBWYXJpYWJsZSByZWZlcmVuY2UKKworCisKKzEgSW50cm9kdWN0aW9uIHRvIHRoZSBMWk8gTGlicmFyeSBSZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisKKzEuMSBQcmVsaW1pbmFyeSBub3RlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0gYEM5MCcgaXMgc2hvcnQgZm9yIElTTyA5ODk5LTE5OTAsIHRoZSBBTlNJL0lTTyBzdGFuZGFyZCBmb3IgdGhlIEMKKyAgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2UKKworCisxLjIgSGVhZGVycworLS0tLS0tLS0tLS0KKworVGhpcyBzZWN0aW9uIGJyaWVmbHkgZGVzY3JpYmVzIHRoZSBoZWFkZXJzLgorCis8bHpvL2x6b2NvbmYuaD4KKworICAgIENvbnRhaW5zIGRlZmluaXRpb25zIGZvciB0aGUgYmFzaWMgaW50ZWdyYWwgYW5kIHBvaW50ZXIgdHlwZXMsCisgICAgcHJvdmlkZXMgd3JhcHBlcnMgZm9yIHRoZSBsaWJyYXJ5IGNhbGxpbmcgY29udmVudGlvbnMsIGRlZmluZXMKKyAgICBlcnJvciBjb2RlcyBhbmQgY29udGFpbnMgcHJvdG90eXBlcyBmb3IgdGhlIGdlbmVyaWMgZnVuY3Rpb25zLgorICAgIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVkIGJ5IGFsbCBMWk8gaGVhZGVycy4KKworPGx6by9sem8xLmg+Cis8bHpvL2x6bzFhLmg+Cis8bHpvL2x6bzFiLmg+Cis8bHpvL2x6bzFjLmg+Cis8bHpvL2x6bzFmLmg+Cis8bHpvL2x6bzF4Lmg+Cis8bHpvL2x6bzF5Lmg+Cis8bHpvL2x6bzF6Lmg+Cis8bHpvL2x6bzJhLmg+CisKKyAgICBUaGVzZSBmaWxlcyBwcm92aWRlIGRlZmluaXRpb25zIGFuZCBwcm90b3R5cGVzIGZvciB0aGUKKyAgICBhY3R1YWwgKGRlLSljb21wcmVzc2lvbiBmdW5jdGlvbnMuCisKKworCisyIEdlbmVyYWwKKz09PT09PT09PQorCisKKzIuMSBUaGUgbWVtb3J5IG1vZGVsCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgZG9jdW1lbnRhdGlvbiBpbmRpY2F0ZXMgdGhhdCBMWk8gcmVxdWlyZXMgMzItYml0IGludGVnZXJzLiBJdCdzCitub3QgdGhlIGludGVnZXIgc2l6ZSB0aGF0IHJlYWxseSBtYXR0ZXJzLCB0aG91Z2gsIGJ1dCB0aGUgbWVtb3J5Cittb2RlbC4gSWYgeW91ciBtZW1vcnkgbW9kZWwgYWxsb3dzIHRvIGFjY2VzcyBwb2ludGVycyBhdCAzMi1iaXQKK29mZnNldHMsIHRoZW4gdGhlcmUgaXMgbm8gcHJvYmxlbSBhdCBhbGwgLSBMWk8gd29ya3MgZmluZSBvbiBteQorb2xkIEF0YXJpIFNULCB3aGljaCBoYXMgMTYgYml0IGludGVnZXJzIGFuZCBhIGZsYXQgMzItYml0IG1lbW9yeSBtb2RlbC4KK1VzaW5nICdodWdlJyAzMi1iaXQgcG9pbnRlcnMgdW5kZXIgMTYtYml0IERPUyBpcyBhIHdvcmthcm91bmQgZm9yIHRoaXMuCisKK1doaWxlIExaTyBhbHNvIHdvcmtzIHdpdGggYSBzdHJpY3QgMTYtYml0IG1lbW9yeSBtb2RlbCwgSSBkb24ndCBvZmZpY2lhbGx5CitzdXBwb3J0IHRoaXMgYmVjYXVzZSB0aGlzIGxpbWl0cyB0aGUgbWF4aW11bSBibG9jayBzaXplIHRvIDY0IGtCIC0gYW5kIHRoaXMKK21ha2VzIHRoZSBsaWJyYXJ5IGluY29tcGF0aWJsZSB3aXRoIG90aGVyIHBsYXRmb3JtcywgaS5lLiB5b3UgY2Fubm90CitkZWNvbXByZXNzIGxhcmdlciBibG9ja3MgY29tcHJlc3NlZCBvbiB0aG9zZSBwbGF0Zm9ybXMuCisKKworMi4yIFB1YmxpYyBpbnRlZ3JhbCB0eXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsem9fdWludAorCisgICAgdXNlZCBhcyBzaXplX3QsIG11c3QgYmUgMzIgYml0cyBvciBtb3JlIGZvciBjb21wYXRpYmlsaXR5IHJlYXNvbnMKKworbHpvX3VpbnQzMgorCisgICAgKm11c3QqIGJlIDMyIGJpdHMgb3IgbW9yZQorCitsem9fYm9vbAorCisgICAgY2FuIHN0b3JlIHRoZSB2YWx1ZXMgMCAoImZhbHNlIikgYW5kIDEgKCJ0cnVlIikKKworbHpvX2J5dGUKKworICAgIHVuc2lnbmVkIGNoYXIgKG1lbW9yeSBtb2RlbCBzcGVjaWZpYykKKworCisyLjMgUHVibGljIHBvaW50ZXIgdHlwZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgcG9pbnRlciB0eXBlcyBhcmUgbWVtb3J5IG1vZGVsIHNwZWNpZmljLgorCitsem9fdm9pZHAKKworICAgIHBvaW50ZXIgdG8gdm9pZAorCitsem9fYnl0ZXAKKworICAgIHBvaW50ZXIgdG8gdW5zaWduZWQgY2hhcgorCitsem9fYnl0ZXBwCisKKyAgICBhcnJheSBvZiBwb2ludGVycyB0byB1bnNpZ25lZCBjaGFyCisKKworMi40IFB1YmxpYyBmdW5jdGlvbiB0eXBlcworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitsem9fY29tcHJlc3NfdAorCitsem9fZGVjb21wcmVzc190CisKK2x6b19vcHRpbWl6ZV90CisKK2x6b19jYWxsYmFja190CisKKworCiszIEZ1bmN0aW9uIHJlZmVyZW5jZQorPT09PT09PT09PT09PT09PT09PT0KKworCiszLjEgSW5pdGlhbGl6YXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLQorCitpbnQgbHpvX2luaXQgKCB2b2lkICk7CisKKyAgVGhpcyBmdW5jdGlvbiBpbml0aWFsaXplcyB0aGUgTFpPIGxpYnJhcnkuIEl0IG11c3QgYmUgdGhlIGZpcnN0IExaTworICBmdW5jdGlvbiB5b3UgY2FsbCwgYW5kIHlvdSBjYW5ub3QgdXNlIGFueSBvZiB0aGUgb3RoZXIgTFpPIGxpYnJhcnkKKyAgZnVuY3Rpb25zIGlmIHRoZSBjYWxsIGZhaWxzLgorCisgIFJldHVybiB2YWx1ZToKKyAgICBSZXR1cm5zIExaT19FX09LIG9uIHN1Y2Nlc3MsIGVycm9yIGNvZGUgb3RoZXJ3aXNlLgorCisgIE5vdGU6CisgICAgVGhpcyBmdW5jdGlvbiBpcyBhY3R1YWxseSBpbXBsZW1lbnRlZCB1c2luZyBhIG1hY3JvLgorCisKKzMuMiBDb21wcmVzc2lvbgorLS0tLS0tLS0tLS0tLS0tCisKK0FsbCBjb21wcmVzc29ycyBjb21wcmVzcyB0aGUgbWVtb3J5IGJsb2NrIGF0IGBzcmMnIHdpdGggdGhlIHVuY29tcHJlc3NlZAorbGVuZ3RoIGBzcmNfbGVuJyB0byB0aGUgYWRkcmVzcyBnaXZlbiBieSBgZHN0Jy4KK1RoZSBsZW5ndGggb2YgdGhlIGNvbXByZXNzZWQgYmxvY2tlZCB3aWxsIGJlIHJldHVybmVkIGluIHRoZSB2YXJpYWJsZQorcG9pbnRlZCBieSBgZHN0X2xlbicuCisKK1RoZSB0d28gYmxvY2tzIG1heSBvdmVybGFwIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9ucyAoc2VlIGV4YW1wbGVzL292ZXJsYXAuYyksCit0aGVyZWJ5IGFsbG93aW5nICJpbi1wbGFjZSIgY29tcHJlc3Npb24uCisKKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorI2luY2x1ZGUgPGx6by9sem8xeC5oPgorCitpbnQgbHpvMXhfMV9jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisgIEFsZ29yaXRobTogICAgICAgICAgICBMWk8xWAorICBDb21wcmVzc2lvbiBsZXZlbDogICAgTFpPMVgtMQorICBNZW1vcnkgcmVxdWlyZW1lbnRzOiAgTFpPMVhfMV9NRU1fQ09NUFJFU1MgICAgKDY0IGtCIG9uIDMyLWJpdCBtYWNoaW5lcykKKworICBUaGlzIGNvbXByZXNzb3IgaXMgcHJldHR5IGZhc3QuCisKKyAgUmV0dXJuIHZhbHVlOgorICAgIEFsd2F5cyByZXR1cm5zIExaT19FX09LICh0aGlzIGZ1bmN0aW9uIGNhbiBuZXZlciBmYWlsKS4KKworfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorI2luY2x1ZGUgPGx6by9sem8xeC5oPgorCitpbnQgbHpvMXhfOTk5X2NvbXByZXNzICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisgIEFsZ29yaXRobTogICAgICAgICAgICBMWk8xWAorICBDb21wcmVzc2lvbiBsZXZlbDogICAgTFpPMVgtOTk5CisgIE1lbW9yeSByZXF1aXJlbWVudHM6ICBMWk8xWF85OTlfTUVNX0NPTVBSRVNTICAoNDQ4IGtCIG9uIDMyLWJpdCBtYWNoaW5lcykKKworICBUaGlzIGNvbXByZXNzb3IgaXMgcXVpdGUgc2xvdyBidXQgYWNoaWV2ZXMgYSBnb29kIGNvbXByZXNzaW9uCisgIHJhdGlvLiBJdCBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIGdlbmVyYXRpbmcgcHJlLWNvbXByZXNzZWQgZGF0YS4KKworICBSZXR1cm4gdmFsdWU6CisgICAgQWx3YXlzIHJldHVybnMgTFpPX0VfT0sgKHRoaXMgZnVuY3Rpb24gY2FuIG5ldmVyIGZhaWwpLgorCisKK1sgLi4uIGxvdHMgb2Ygb3RoZXIgY29tcHJlc3NvcnMgd2hpY2ggYWxsIGZvbGxvdyB0aGUgc2FtZSBwcmluY2lwbGUgLi4uIF0KKworCisKKzMuMyBEZWNvbXByZXNzaW9uCistLS0tLS0tLS0tLS0tLS0tLQorCitBbGwgZGVjb21wcmVzc29ycyBkZWNvbXByZXNzIHRoZSBtZW1vcnkgYmxvY2sgYXQgYHNyYycgd2l0aCB0aGUgY29tcHJlc3NlZAorbGVuZ3RoIGBzcmNfbGVuJyB0byB0aGUgYWRkcmVzcyBnaXZlbiBieSBgZHN0Jy4KK1RoZSBsZW5ndGggb2YgdGhlIGRlY29tcHJlc3NlZCBibG9jayB3aWxsIGJlIHJldHVybmVkIGluIHRoZSB2YXJpYWJsZQorcG9pbnRlZCBieSBgZHN0X2xlbicgLSBvbiBlcnJvciB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgaGF2ZQorYmVlbiBkZWNvbXByZXNzZWQgc28gZmFyIHdpbGwgYmUgcmV0dXJuZWQuCisKK1RoZSBzYWZlIGRlY29tcHJlc3NvcnMgZXhwZWN0IHRoYXQgdGhlIG51bWJlciBvZiBieXRlcyBhdmFpbGFibGUgaW4KK3RoZSBgZHN0JyBibG9jayBpcyBwYXNzZWQgdmlhIHRoZSB2YXJpYWJsZSBwb2ludGVkIGJ5IGBkc3RfbGVuJy4KKworVGhlIHR3byBibG9ja3MgbWF5IG92ZXJsYXAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zIChzZWUgZXhhbXBsZXMvb3ZlcmxhcC5jKSwKK3RoZXJlYnkgYWxsb3dpbmcgImluLXBsYWNlIiBkZWNvbXByZXNzaW9uLgorCisKK0Rlc2NyaXB0aW9uIG9mIHJldHVybiB2YWx1ZXM6CisKKyAgTFpPX0VfT0sKKyAgICBTdWNjZXNzLgorCisgIExaT19FX0lOUFVUX05PVF9DT05TVU1FRAorICAgIFRoZSBlbmQgb2YgdGhlIGNvbXByZXNzZWQgYmxvY2sgaGFzIGJlZW4gZGV0ZWN0ZWQgYmVmb3JlIGFsbAorICAgIGJ5dGVzIGluIHRoZSBjb21wcmVzc2VkIGJsb2NrIGhhdmUgYmVlbiB1c2VkLgorICAgIFRoaXMgbWF5IGFjdHVhbGx5IG5vdCBiZSBhbiBlcnJvciAoaWYgYHNyY19sZW4nIGlzIHRvbyBsYXJnZSkuCisKKyAgTFpPX0VfSU5QVVRfT1ZFUlJVTgorICAgIFRoZSBkZWNvbXByZXNzb3IgcmVxdWVzdGVkIG1vcmUgYnl0ZXMgZnJvbSB0aGUgY29tcHJlc3NlZAorICAgIGJsb2NrIHRoYW4gYXZhaWxhYmxlLgorICAgIFlvdXIgZGF0YSBpcyBjb3JydXB0ZWQgKG9yIGBzcmNfbGVuJyBpcyB0b28gc21hbGwpLgorCisgIExaT19FX09VVFBVVF9PVkVSUlVOCisgICAgVGhlIGRlY29tcHJlc3NvciByZXF1ZXN0ZWQgdG8gd3JpdGUgbW9yZSBieXRlcyB0byB0aGUgdW5jb21wcmVzc2VkCisgICAgYmxvY2sgdGhhbiBhdmFpbGFibGUuCisgICAgRWl0aGVyIHlvdXIgZGF0YSBpcyBjb3JydXB0ZWQsIG9yIHlvdSBzaG91bGQgaW5jcmVhc2UgdGhlIG51bWJlciBvZgorICAgIGF2YWlsYWJsZSBieXRlcyBwYXNzZWQgaW4gdGhlIHZhcmlhYmxlIHBvaW50ZWQgYnkgYGRzdF9sZW4nLgorCisgIExaT19FX0xPT0tCRUhJTkRfT1ZFUlJVTgorICAgIFlvdXIgZGF0YSBpcyBjb3JydXB0ZWQuCisKKyAgTFpPX0VfRU9GX05PVF9GT1VORAorICAgIE5vIEVPRiBjb2RlIHdhcyBmb3VuZCBpbiB0aGUgY29tcHJlc3NlZCBibG9jay4KKyAgICBZb3VyIGRhdGEgaXMgY29ycnVwdGVkIChvciBgc3JjX2xlbicgaXMgdG9vIHNtYWxsKS4KKworICBMWk9fRV9FUlJPUgorICAgIEFueSBvdGhlciBlcnJvciAoZGF0YSBjb3JydXB0ZWQpLgorCisKK35+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KKyNpbmNsdWRlIDxsem8xeC5oPgorCitpbnQgbHpvMXhfZGVjb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisgIEFsZ29yaXRobTogICAgICAgICAgICBMWk8xWAorICBNZW1vcnkgcmVxdWlyZW1lbnRzOiAgMAorCisKK1sgLi4uIGxvdHMgb2Ygb3RoZXIgZGVjb21wcmVzc29ycyB3aGljaCBhbGwgZm9sbG93IHRoZSBzYW1lIHByaW5jaXBsZSAuLi4gXQorCisKKworNCBWYXJpYWJsZSByZWZlcmVuY2UKKz09PT09PT09PT09PT09PT09PT09CisKK1RoZSB2YXJpYWJsZXMgYXJlIGxpc3RlZCBhbHBoYWJldGljYWxseS4KKworWyBubyBwdWJsaWMgdmFyaWFibGVzIHlldCBdCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRU5EIE9GIExaT0FQSS5UWFQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2RvYy9MWk9URVNULlRYVCBiL2x6by0yLjAzL2RvYy9MWk9URVNULlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWVjNTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvZG9jL0xaT1RFU1QuVFhUCkBAIC0wLDAgKzEsNzUgQEAKK1RoZSB0ZXN0IGRyaXZlciBgbHpvdGVzdCcgaGFzIGdyb3duIGludG8gYSBmYWlybHkgcG93ZXJmdWwgcHJvZ3JhbQorb2YgaXQncyBvd24uIEhlcmUgaXMgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB0aGUgdmFyaW91cyBvcHRpb25zLgorCitbIHRvIGJlIHdyaXR0ZW4gLSB0aGlzIGlzIG9ubHkgYSB2ZXJ5IGZpcnN0IGRyYWZ0IF0KKworCitVc2FnZToKKz09PT09PQorCitsem90ZXN0IFtvcHRpb24uLl0gZmlsZS4uLgorCisKK0Jhc2ljIG9wdGlvbnM6Cis9PT09PT09PT09PT09PQorCisgIC1tIyAgICAgY29tcHJlc3Npb24gbWV0aG9kCisgIC1iIyAgICAgc2V0IGlucHV0IGJsb2NrIHNpemUgKGRlZmF1bHQgMjYyMTQ0LCBtYXggMTMxMDcyMCkKKyAgLW4jICAgICBudW1iZXIgb2YgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBydW5zCisgIC1jIyAgICAgbnVtYmVyIG9mIGNvbXByZXNzaW9uIHJ1bnMKKyAgLWQjICAgICBudW1iZXIgb2YgZGVjb21wcmVzc2lvbiBydW5zCisgIC1TICAgICAgdXNlIHNhZmUgZGVjb21wcmVzc29yIChpZiBhdmFpbGFibGUpCisgIC1BICAgICAgdXNlIGFzc2VtYmxlciBkZWNvbXByZXNzb3IgKGlmIGF2YWlsYWJsZSkKKyAgLUYgICAgICB1c2UgZmFzdCBhc3NlbWJsZXIgZGVjb21wcmVzc29yIChpZiBhdmFpbGFibGUpCisgIC1PICAgICAgb3B0aW1pemUgY29tcHJlc3NlZCBkYXRhIChpZiBhdmFpbGFibGUpCisgIC1zIERJUiAgcHJvY2VzcyBDYWxnYXJ5IENvcnB1cyB0ZXN0IHN1aXRlIGluIGRpcmVjdG9yeSBgRElSJworICAtQCAgICAgIHJlYWQgbGlzdCBvZiBmaWxlcyB0byBjb21wcmVzcyBmcm9tIHN0ZGluCisgIC1xICAgICAgYmUgcXVpZXQKKyAgLUwgICAgICBkaXNwbGF5IHNvZnR3YXJlIGxpY2Vuc2UKKworCitNb3JlIGFib3V0IGAtbSc6Cis9PT09PT09PT09PT09PT09CisKK1VzZSBgLW0nIHRvIGxpc3QgYWxsIGF2YWlsYWJsZSBtZXRob2RzLgorCitZb3UgY2FuIHNlbGVjdCBtZXRob2RzIGJ5IG51bWJlcjoKKy1tNzEKKworWW91IGNhbiBzZWxlY3QgbWV0aG9kcyBieSBuYW1lOgorLW1sem8xeC0xCistbWx6bzF4LTk5OQorLW1sem8xeC0xKDExKQorCitZb3UgY2FuIHNlbGVjdCBzb21lIHByZWRlZmluZWQgbWV0aG9kIGdyb3VwczoKKy1tYWxsCistbWx6bworLW1tMQorLW1tOTkKKy1tbTk5OQorLW0xeDk5OQorLW0xeTk5OQorCitZb3UgY2FuIHNwZWNpZnkgbXVsdGlwbGUgbWV0aG9kcy9ncm91cHMgc2VwYXJhdGVkIGJ5ICcsJzoKKy1tMSwyLDMsNAorLW0xLDIsMyw0LGx6bzF4LTEsbTk5LDgxCisKK0FuZCBmaW5hbGx5IHlvdSBjYW4gdXNlIG11bHRpcGxlIGAtbScgb3B0aW9uczoKKy1tOTYyLDk3MiAtbW05OSw5ODIsbTEKKworCitPdGhlciBvcHRpb25zOgorPT09PT09PT09PT09PT0KKworLS1tYXgtZGF0YS1sZW5ndGg9TEVOCisKKy0tZGljdD1GSUxFTkFNRQorLS1tYXgtZGljdC1sZW5ndGg9TEVOCisKKy0tZHVtcD1GSUxFTkFNRQorCistLWFkbGVyMzIKKy0tY3JjMzIKKy0tZXhlY3V0aW9uLXRpbWUKKy0tdG90YWxzCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2V4YW1wbGVzL01ha2VmaWxlLmFtIGIvbHpvLTIuMDMvZXhhbXBsZXMvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM1YjUyNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2V4YW1wbGVzL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMjEgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCisKK0lOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9zcmNkaXIpCisKK25vaW5zdF9QUk9HUkFNUyA9IGRpY3QgbHpvcGFjayBvdmVybGFwIHByZWNvbXAgcHJlY29tcDIgc2ltcGxlCisKK2RpY3RfU09VUkNFUyA9IGRpY3QuYworbHpvcGFja19TT1VSQ0VTID0gbHpvcGFjay5jCitvdmVybGFwX1NPVVJDRVMgPSBvdmVybGFwLmMKK3ByZWNvbXBfU09VUkNFUyA9IHByZWNvbXAuYworcHJlY29tcDJfU09VUkNFUyA9IHByZWNvbXAyLmMKK3NpbXBsZV9TT1VSQ0VTID0gc2ltcGxlLmMKKworTERBREQgPSAuLi9zcmMvbGlibHpvMi5sYQorREVQRU5ERU5DSUVTID0gLi4vc3JjL2xpYmx6bzIubGEKKworRVhUUkFfRElTVCA9IHBvcnRhYi5oIHBvcnRhYl9hLmgKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvZXhhbXBsZXMvTWFrZWZpbGUuaW4gYi9sem8tMi4wMy9leGFtcGxlcy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTk5MDc4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvZXhhbXBsZXMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0OTEgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACit0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACitub2luc3RfUFJPR1JBTVMgPSBkaWN0JChFWEVFWFQpIGx6b3BhY2skKEVYRUVYVCkgb3ZlcmxhcCQoRVhFRVhUKSBcCisJcHJlY29tcCQoRVhFRVhUKSBwcmVjb21wMiQoRVhFRVhUKSBzaW1wbGUkKEVYRUVYVCkKK3N1YmRpciA9IGV4YW1wbGVzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX2RpY3RfT0JKRUNUUyA9IGRpY3QuJChPQkpFWFQpCitkaWN0X09CSkVDVFMgPSAkKGFtX2RpY3RfT0JKRUNUUykKK2RpY3RfTERBREQgPSAkKExEQUREKQorZGljdF9ERVBFTkRFTkNJRVMgPSAuLi9zcmMvbGlibHpvMi5sYQorYW1fbHpvcGFja19PQkpFQ1RTID0gbHpvcGFjay4kKE9CSkVYVCkKK2x6b3BhY2tfT0JKRUNUUyA9ICQoYW1fbHpvcGFja19PQkpFQ1RTKQorbHpvcGFja19MREFERCA9ICQoTERBREQpCitsem9wYWNrX0RFUEVOREVOQ0lFUyA9IC4uL3NyYy9saWJsem8yLmxhCithbV9vdmVybGFwX09CSkVDVFMgPSBvdmVybGFwLiQoT0JKRVhUKQorb3ZlcmxhcF9PQkpFQ1RTID0gJChhbV9vdmVybGFwX09CSkVDVFMpCitvdmVybGFwX0xEQUREID0gJChMREFERCkKK292ZXJsYXBfREVQRU5ERU5DSUVTID0gLi4vc3JjL2xpYmx6bzIubGEKK2FtX3ByZWNvbXBfT0JKRUNUUyA9IHByZWNvbXAuJChPQkpFWFQpCitwcmVjb21wX09CSkVDVFMgPSAkKGFtX3ByZWNvbXBfT0JKRUNUUykKK3ByZWNvbXBfTERBREQgPSAkKExEQUREKQorcHJlY29tcF9ERVBFTkRFTkNJRVMgPSAuLi9zcmMvbGlibHpvMi5sYQorYW1fcHJlY29tcDJfT0JKRUNUUyA9IHByZWNvbXAyLiQoT0JKRVhUKQorcHJlY29tcDJfT0JKRUNUUyA9ICQoYW1fcHJlY29tcDJfT0JKRUNUUykKK3ByZWNvbXAyX0xEQUREID0gJChMREFERCkKK3ByZWNvbXAyX0RFUEVOREVOQ0lFUyA9IC4uL3NyYy9saWJsem8yLmxhCithbV9zaW1wbGVfT0JKRUNUUyA9IHNpbXBsZS4kKE9CSkVYVCkKK3NpbXBsZV9PQkpFQ1RTID0gJChhbV9zaW1wbGVfT0JKRUNUUykKK3NpbXBsZV9MREFERCA9ICQoTERBREQpCitzaW1wbGVfREVQRU5ERU5DSUVTID0gLi4vc3JjL2xpYmx6bzIubGEKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2F1dG9jb25mL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGRpY3RfU09VUkNFUykgJChsem9wYWNrX1NPVVJDRVMpICQob3ZlcmxhcF9TT1VSQ0VTKSBcCisJJChwcmVjb21wX1NPVVJDRVMpICQocHJlY29tcDJfU09VUkNFUykgJChzaW1wbGVfU09VUkNFUykKK0RJU1RfU09VUkNFUyA9ICQoZGljdF9TT1VSQ0VTKSAkKGx6b3BhY2tfU09VUkNFUykgJChvdmVybGFwX1NPVVJDRVMpIFwKKwkkKHByZWNvbXBfU09VUkNFUykgJChwcmVjb21wMl9TT1VSQ0VTKSAkKHNpbXBsZV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMREZMQUdTID0gQExERkxBR1NACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFpPX0FTTV9WUEFUSCA9IEBMWk9fQVNNX1ZQQVRIQAorTFpPX0NGTEFHUyA9IEBMWk9fQ0ZMQUdTQAorTFpPX0NQUEZMQUdTID0gQExaT19DUFBGTEFHU0AKK0xaT19FWFRSQV9DRkxBR1MgPSBATFpPX0VYVFJBX0NGTEFHU0AKK0xaT19FWFRSQV9DUFBGTEFHUyA9IEBMWk9fRVhUUkFfQ1BQRkxBR1NACitMWk9fVVNFX0FTTV9GQUxTRSA9IEBMWk9fVVNFX0FTTV9GQUxTRUAKK0xaT19VU0VfQVNNX1RSVUUgPSBATFpPX1VTRV9BU01fVFJVRUAKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitPQkpFWFQgPSBAT0JKRVhUQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFOTElCID0gQFJBTkxJQkAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACithY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKK2FtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorY29uZmlndXJlX0NGTEFHUyA9IEBjb25maWd1cmVfQ0ZMQUdTQAorY29uZmlndXJlX0NQUEZMQUdTID0gQGNvbmZpZ3VyZV9DUFBGTEFHU0AKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAorSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKK2RpY3RfU09VUkNFUyA9IGRpY3QuYworbHpvcGFja19TT1VSQ0VTID0gbHpvcGFjay5jCitvdmVybGFwX1NPVVJDRVMgPSBvdmVybGFwLmMKK3ByZWNvbXBfU09VUkNFUyA9IHByZWNvbXAuYworcHJlY29tcDJfU09VUkNFUyA9IHByZWNvbXAyLmMKK3NpbXBsZV9TT1VSQ0VTID0gc2ltcGxlLmMKK0xEQUREID0gLi4vc3JjL2xpYmx6bzIubGEKK0RFUEVOREVOQ0lFUyA9IC4uL3NyYy9saWJsem8yLmxhCitFWFRSQV9ESVNUID0gcG9ydGFiLmggcG9ydGFiX2EuaAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgZXhhbXBsZXMvTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgZXhhbXBsZXMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworY2xlYW4tbm9pbnN0UFJPR1JBTVM6CisJQGxpc3Q9JyQobm9pbnN0X1BST0dSQU1TKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj1gZWNobyAkJHB8c2VkICdzLyQoRVhFRVhUKSQkLy8nYDsgXAorCSAgZWNobyAiIHJtIC1mICQkcCAkJGYiOyBcCisJICBybSAtZiAkJHAgJCRmIDsgXAorCWRvbmUKK2RpY3QkKEVYRUVYVCk6ICQoZGljdF9PQkpFQ1RTKSAkKGRpY3RfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgZGljdCQoRVhFRVhUKQorCSQoTElOSykgJChkaWN0X0xERkxBR1MpICQoZGljdF9PQkpFQ1RTKSAkKGRpY3RfTERBREQpICQoTElCUykKK2x6b3BhY2skKEVYRUVYVCk6ICQobHpvcGFja19PQkpFQ1RTKSAkKGx6b3BhY2tfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgbHpvcGFjayQoRVhFRVhUKQorCSQoTElOSykgJChsem9wYWNrX0xERkxBR1MpICQobHpvcGFja19PQkpFQ1RTKSAkKGx6b3BhY2tfTERBREQpICQoTElCUykKK292ZXJsYXAkKEVYRUVYVCk6ICQob3ZlcmxhcF9PQkpFQ1RTKSAkKG92ZXJsYXBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgb3ZlcmxhcCQoRVhFRVhUKQorCSQoTElOSykgJChvdmVybGFwX0xERkxBR1MpICQob3ZlcmxhcF9PQkpFQ1RTKSAkKG92ZXJsYXBfTERBREQpICQoTElCUykKK3ByZWNvbXAkKEVYRUVYVCk6ICQocHJlY29tcF9PQkpFQ1RTKSAkKHByZWNvbXBfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcHJlY29tcCQoRVhFRVhUKQorCSQoTElOSykgJChwcmVjb21wX0xERkxBR1MpICQocHJlY29tcF9PQkpFQ1RTKSAkKHByZWNvbXBfTERBREQpICQoTElCUykKK3ByZWNvbXAyJChFWEVFWFQpOiAkKHByZWNvbXAyX09CSkVDVFMpICQocHJlY29tcDJfREVQRU5ERU5DSUVTKSAKKwlAcm0gLWYgcHJlY29tcDIkKEVYRUVYVCkKKwkkKExJTkspICQocHJlY29tcDJfTERGTEFHUykgJChwcmVjb21wMl9PQkpFQ1RTKSAkKHByZWNvbXAyX0xEQUREKSAkKExJQlMpCitzaW1wbGUkKEVYRUVYVCk6ICQoc2ltcGxlX09CSkVDVFMpICQoc2ltcGxlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNpbXBsZSQoRVhFRVhUKQorCSQoTElOSykgJChzaW1wbGVfTERGTEFHUykgJChzaW1wbGVfT0JKRUNUUykgJChzaW1wbGVfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2RpY3QuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6b3BhY2suUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL292ZXJsYXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByZWNvbXAuUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3ByZWNvbXAyLlBvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9zaW1wbGUuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvZXhhbXBsZXMvZGljdC5jIGIvbHpvLTIuMDMvZXhhbXBsZXMvZGljdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlYzc2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9leGFtcGxlcy9kaWN0LmMKQEAgLTAsMCArMSwyNzggQEAKKy8qIGRpY3QuYyAtLSBleGFtcGxlIHByb2dyYW06IGhvdyB0byB1c2UgcHJlc2V0IGRpY3Rpb25hcmllcworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGhpcyBwcm9ncmFtIHNob3dzIGhvdyB0byB1c2UgcHJlc2V0IGRpY3Rpb25hcmllcy4KKy8vCisvLyBQbGVhc2Ugc3R1ZHkgTFpPLkZBUSBhbmQgc2ltcGxlLmMgZmlyc3QuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzF4LmgiCisKKy8qIHBvcnRhYmlsaXR5IGxheWVyICovCisjZGVmaW5lIFdBTlRfTFpPX01BTExPQyAxCisjZGVmaW5lIFdBTlRfTFpPX0ZSRUFEIDEKKyNkZWZpbmUgV0FOVF9MWk9fV0lMREFSR1YgMQorI2luY2x1ZGUgImV4YW1wbGVzL3BvcnRhYi5oIgorCisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CisKKyNkZWZpbmUgRElDVF9MRU4gICAgMHhiZmZmCitzdGF0aWMgbHpvX2J5dGVwICAgIGRpY3Q7CitzdGF0aWMgbHpvX3VpbnQgICAgIGRpY3RfbGVuID0gMDsKK3N0YXRpYyBsem9fdWludDMyICAgZGljdF9hZGxlcjMyOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBsem9fdWludCB0b3RhbF9uID0gMDsKK3N0YXRpYyBsem9fdWludCB0b3RhbF9jX2xlbiA9IDA7CitzdGF0aWMgbHpvX3VpbnQgdG90YWxfZF9sZW4gPSAwOworCitzdGF0aWMgdm9pZCBwcmludF9maWxlICggY29uc3QgY2hhciAqbmFtZSwgbHpvX3VpbnQgZF9sZW4sIGx6b191aW50IGNfbGVuICkKK3sKKyAgICBkb3VibGUgcGVyYzsKKworICAgIHBlcmMgPSAoZF9sZW4gPiAwKSA/IGNfbGVuICogMTAwLjAgLyBkX2xlbiA6IDA7CisgICAgcHJpbnRmKCIgIHwgICUtMzBzICAgJTlsZCAtPiAlOWxkICAgJTcuMmYlJSAgfFxuIiwKKyAgICAgICAgICAgIG5hbWUsIChsb25nKSBkX2xlbiwgKGxvbmcpIGNfbGVuLCBwZXJjKTsKKworICAgIHRvdGFsX24rKzsKKyAgICB0b3RhbF9jX2xlbiArPSBjX2xlbjsKKyAgICB0b3RhbF9kX2xlbiArPSBkX2xlbjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG9fZmlsZSAoIGNvbnN0IGNoYXIgKmluX25hbWUsIGludCBsZXZlbCApCit7CisgICAgaW50IHI7CisgICAgbHpvX2J5dGVwIGluOworICAgIGx6b19ieXRlcCBvdXQ7CisgICAgbHpvX2J5dGVwIG5ld2I7CisgICAgbHpvX2J5dGVwIHdya21lbTsKKyAgICBsem9fdWludCBpbl9sZW47CisgICAgbHpvX3VpbnQgb3V0X2xlbjsKKyAgICBsem9fdWludCBuZXdfbGVuOworICAgIGxvbmcgbDsKKyAgICBGSUxFICpmOworCisvKgorICogU3RlcCAxOiBvcGVuIHRoZSBpbnB1dCBmaWxlCisgKi8KKyAgICBmID0gZm9wZW4oaW5fbmFtZSwicmIiKTsKKyAgICBpZiAoZiA9PSAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogY2Fubm90IG9wZW4gZmlsZSAlc1xuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICByZXR1cm4gMDsgICAvKiBubyBlcnJvciAqLworICAgIH0KKyAgICBmc2VlayhmLDAsU0VFS19FTkQpOworICAgIGwgPSBmdGVsbChmKTsKKyAgICBmc2VlayhmLDAsU0VFS19TRVQpOworICAgIGlmIChsIDw9IDApCisgICAgeworICAgICAgICBwcmludGYoIiVzOiAlczogZW1wdHkgZmlsZSAtLSBza2lwcGluZ1xuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpbl9sZW4gPSAobHpvX3VpbnQpIGw7CisKKy8qCisgKiBTdGVwIDI6IGFsbG9jYXRlIGNvbXByZXNzaW9uIGJ1ZmZlcnMgYW5kIHJlYWQgdGhlIGZpbGUKKyAqLworICAgIGluID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhpbl9sZW4pOworICAgIG91dCA9IChsem9fYnl0ZXApIGx6b19tYWxsb2MoaW5fbGVuICsgaW5fbGVuIC8gMTYgKyA2NCArIDMpOworICAgIG5ld2IgPSAobHpvX2J5dGVwKSBsem9fbWFsbG9jKGluX2xlbik7CisgICAgd3JrbWVtID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhMWk8xWF85OTlfTUVNX0NPTVBSRVNTKTsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCBvdXQgPT0gTlVMTCB8fCBuZXdiID09IE5VTEwgfHwgd3JrbWVtID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGluX2xlbiA9IChsem9fdWludCkgbHpvX2ZyZWFkKGYsaW4saW5fbGVuKTsKKyAgICBmY2xvc2UoZik7CisKKy8qCisgKiBTdGVwIDM6IGNvbXByZXNzIGZyb20gYGluJyB0byBgb3V0JyB3aXRoIExaTzFYLTk5OQorICovCisgICAgciA9IGx6bzF4Xzk5OV9jb21wcmVzc19sZXZlbChpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QsIGRpY3RfbGVuLCAwLCBsZXZlbCk7CisgICAgaWYgKHIgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICAvKiB0aGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KKyAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIGNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludF9maWxlKGluX25hbWUsaW5fbGVuLG91dF9sZW4pOworCisvKgorICogU3RlcCA0OiBkZWNvbXByZXNzIGFnYWluLCBub3cgZ29pbmcgZnJvbSBgb3V0JyB0byBgbmV3YicKKyAqLworICAgIG5ld19sZW4gPSBpbl9sZW47CisgICAgciA9IGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlKG91dCxvdXRfbGVuLG5ld2IsJm5ld19sZW4sTlVMTCxkaWN0LGRpY3RfbGVuKTsKKyAgICBpZiAociAhPSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gZGVjb21wcmVzc2lvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisvKgorICogU3RlcCA1OiB2ZXJpZnkgZGVjb21wcmVzc2lvbgorICovCisgICAgaWYgKG5ld19sZW4gIT0gaW5fbGVuIHx8IGx6b19tZW1jbXAoaW4sbmV3Yixpbl9sZW4pICE9IDApCisgICAgeworICAgICAgICAvKiB0aGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KKyAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIGRlY29tcHJlc3Npb24gZGF0YSBlcnJvclxuIik7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIC8qIGZyZWUgYnVmZmVycyBpbiByZXZlcnNlIG9yZGVyIHRvIGhlbHAgbWFsbG9jKCkgKi8KKyAgICBsem9fZnJlZSh3cmttZW0pOworICAgIGx6b19mcmVlKG5ld2IpOworICAgIGx6b19mcmVlKG91dCk7CisgICAgbHpvX2ZyZWUoaW4pOworICAgIHJldHVybiAwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBfX2x6b19jZGVjbF9tYWluIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgaSA9IDE7CisgICAgaW50IHI7CisgICAgY29uc3QgY2hhciAqZGljdF9uYW1lOworICAgIEZJTEUgKmY7CisgICAgdGltZV90IHRfdG90YWw7CisgICAgaW50IGxldmVsID0gNzsKKworICAgIGx6b193aWxkYXJndigmYXJnYywgJmFyZ3YpOworCisgICAgcHJpbnRmKCJcbkxaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICh2JXMsICVzKS5cbiIsCisgICAgICAgICAgIGx6b192ZXJzaW9uX3N0cmluZygpLCBsem9fdmVyc2lvbl9kYXRlKCkpOworICAgIHByaW50ZigiQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuIik7CisKKyAgICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisKKyAgICBpZiAoaSA8IGFyZ2MgJiYgYXJndltpXVswXSA9PSAnLScgJiYgaXNkaWdpdChhcmd2W2ldWzFdKSkKKyAgICAgICAgbGV2ZWwgPSBhdG9pKCZhcmd2W2krK11bMV0pOworCisgICAgaWYgKGkgKyAxID49IGFyZ2MgfHwgbGV2ZWwgPCAxIHx8IGxldmVsID4gOSkKKyAgICB7CisgICAgICAgIHByaW50ZigidXNhZ2U6ICVzIFstbGV2ZWxdIFsgZGljdGlvbmFyeS1maWxlIHwgLW4gXSAgZmlsZS4uLlxuIiwgcHJvZ25hbWUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoIkNvbXByZXNzaW9uIGxldmVsIGlzIExaTzFYLTk5OS8lZFxuIiwgbGV2ZWwpOworCisvKgorICogU3RlcCAxOiBpbml0aWFsaXplIHRoZSBMWk8gbGlicmFyeQorICovCisgICAgaWYgKGx6b19pbml0KCkgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gbHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcHJpbnRmKCIodGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNvbXBpbGVyIGJ1ZyAtIHRyeSByZWNvbXBpbGluZ1xud2l0aG91dCBvcHRpbWl6YXRpb25zLCBhbmQgZW5hYmxlIGAtRExaT19ERUJVRycgZm9yIGRpYWdub3N0aWNzKVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAyOiBwcmVwYXJlIHRoZSBkaWN0aW9uYXJ5CisgKi8KKyAgICBkaWN0ID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhESUNUX0xFTik7CisgICAgaWYgKGRpY3QgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZGljdF9uYW1lID0gYXJndltpKytdOworICAgIGlmIChzdHJjbXAoZGljdF9uYW1lLCItbiIpID09IDApCisgICAgeworICAgICAgICBkaWN0X25hbWUgPSAiZW1wdHkiOworICAgICAgICBkaWN0X2xlbiA9IDA7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGYgPSBmb3BlbihkaWN0X25hbWUsInJiIik7CisgICAgICAgIGlmICghZikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIlczogY2Fubm90IG9wZW4gZGljdGlvbmFyeSBmaWxlICVzXG4iLCBwcm9nbmFtZSwgZGljdF9uYW1lKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgZGljdF9sZW4gPSAobHpvX3VpbnQpIGx6b19mcmVhZChmLGRpY3QsRElDVF9MRU4pOworICAgICAgICBmY2xvc2UoZik7CisgICAgfQorCisgICAgZGljdF9hZGxlcjMyID0gbHpvX2FkbGVyMzIoMCxOVUxMLDApOworICAgIGRpY3RfYWRsZXIzMiA9IGx6b19hZGxlcjMyKGRpY3RfYWRsZXIzMixkaWN0LGRpY3RfbGVuKTsKKyAgICBwcmludGYoIlVzaW5nIGRpY3Rpb25hcnkgJyVzJywgJWxkIGJ5dGVzLCBJRCAweCUwOGx4LlxuIiwKKyAgICAgICAgICAgIGRpY3RfbmFtZSwgKGxvbmcpIGRpY3RfbGVuLCAobG9uZykgZGljdF9hZGxlcjMyKTsKKworLyoKKyAqIFN0ZXAgMzogcHJvY2VzcyBmaWxlcworICovCisgICAgdF90b3RhbCA9IHRpbWUoTlVMTCk7CisgICAgZm9yIChyID0gMDsgciA9PSAwICYmIGkgPCBhcmdjOyBpKyspCisgICAgICAgIHIgPSBkb19maWxlKGFyZ3ZbaV0sIGxldmVsKTsKKyAgICB0X3RvdGFsID0gdGltZShOVUxMKSAtIHRfdG90YWw7CisKKyAgICBsem9fZnJlZShkaWN0KTsKKworICAgIGlmICh0b3RhbF9uID4gMSkKKyAgICAgICAgcHJpbnRfZmlsZSgiKioqVE9UQUxTKioqIix0b3RhbF9kX2xlbix0b3RhbF9jX2xlbik7CisKKyAgICBwcmludGYoIkRpY3Rpb25hcnkgY29tcHJlc3Npb24gdGVzdCAlcywgZXhlY3V0aW9uIHRpbWUgJWx1IHNlY29uZHMuXG4iLAorICAgICAgICAgICAgciA9PSAwID8gInBhc3NlZCIgOiAiRkFJTEVEIiwgKHVuc2lnbmVkIGxvbmcpIHRfdG90YWwpOworICAgIHJldHVybiByOworfQorCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvZXhhbXBsZXMvbHpvcGFjay5jIGIvbHpvLTIuMDMvZXhhbXBsZXMvbHpvcGFjay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhM2Q4NDgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9leGFtcGxlcy9sem9wYWNrLmMKQEAgLTAsMCArMSw2NDIgQEAKKy8qIGx6b3BhY2suYyAtLSBMWk8gZXhhbXBsZSBwcm9ncmFtOiBhIHNpbXBsZSBmaWxlIHBhY2tlcgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTk9URTogdGhpcyBpcyBhbiBleGFtcGxlIHByb2dyYW0sIHNvIGRvIG5vdCB1c2UgdG8gYmFja3VwIHlvdXIgZGF0YS4KKy8vCisvLyBUaGlzIHByb2dyYW0gbGFja3MgdGhpbmdzIGxpa2Ugc29waGlzdGljYXRlZCBmaWxlIGhhbmRsaW5nIGJ1dCBpcworLy8gcHJldHR5IGNvbXBsZXRlIHJlZ2FyZGluZyBjb21wcmVzc2lvbiAtIGl0IHNob3VsZCBwcm92aWRlIGEgZ29vZAorLy8gc3RhcnRpbmcgcG9pbnQgZm9yIGFkYXB0aW9uIGZvciB5b3VyIGFwcGxpY2F0aW9ucy4KKy8vCisvLyBQbGVhc2Ugc3R1ZHkgTFpPLkZBUSBhbmQgc2ltcGxlLmMgZmlyc3QuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzF4LmgiCisKKy8qIHBvcnRhYmlsaXR5IGxheWVyICovCisjZGVmaW5lIFdBTlRfTFpPX01BTExPQyAxCisjZGVmaW5lIFdBTlRfTFpPX0ZSRUFEIDEKKyNkZWZpbmUgV0FOVF9MWk9fV0lMREFSR1YgMQorI2luY2x1ZGUgImV4YW1wbGVzL3BvcnRhYi5oIgorCisKK3N0YXRpYyBjb25zdCBjaGFyICpwcm9nbmFtZSA9IE5VTEw7CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX2luID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX291dCA9IDA7CitzdGF0aWMgbHpvX2Jvb2wgb3B0X2RlYnVnID0gMDsKKworLyogbWFnaWMgZmlsZSBoZWFkZXIgZm9yIGx6b3BhY2stY29tcHJlc3NlZCBmaWxlcyAqLworc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFnaWNbN10gPQorICAgIHsgMHgwMCwgMHhlOSwgMHg0YywgMHg1YSwgMHg0ZiwgMHhmZiwgMHgxYSB9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBmaWxlIElPCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbHpvX3VpbnQgeHJlYWQoRklMRSAqZnAsIGx6b192b2lkcCBidWYsIGx6b191aW50IGxlbiwgbHpvX2Jvb2wgYWxsb3dfZW9mKQoreworICAgIGx6b191aW50IGw7CisKKyAgICBsID0gKGx6b191aW50KSBsem9fZnJlYWQoZnAsIGJ1ZiwgbGVuKTsKKyAgICBpZiAobCA+IGxlbikKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG5zb21ldGhpbmcncyB3cm9uZyB3aXRoIHlvdXIgQyBsaWJyYXJ5ICEhIVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGlmIChsICE9IGxlbiAmJiAhYWxsb3dfZW9mKQorICAgIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJcbnJlYWQgZXJyb3IgLSBwcmVtYXR1cmUgZW5kIG9mIGZpbGVcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICB0b3RhbF9pbiArPSAodW5zaWduZWQgbG9uZykgbDsKKyAgICByZXR1cm4gbDsKK30KKworbHpvX3VpbnQgeHdyaXRlKEZJTEUgKmZwLCBjb25zdCBsem9fdm9pZHAgYnVmLCBsem9fdWludCBsZW4pCit7CisgICAgaWYgKGZwICE9IE5VTEwgJiYgbHpvX2Z3cml0ZShmcCwgYnVmLCBsZW4pICE9IGxlbikKKyAgICB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiXG53cml0ZSBlcnJvciAgKGRpc2sgZnVsbCA/KVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHRvdGFsX291dCArPSAodW5zaWduZWQgbG9uZykgbGVuOworICAgIHJldHVybiBsZW47Cit9CisKKworaW50IHhnZXRjKEZJTEUgKmZwKQoreworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICB4cmVhZChmcCwgKGx6b192b2lkcCkgJmMsIDEsIDApOworICAgIHJldHVybiBjOworfQorCit2b2lkIHhwdXRjKEZJTEUgKmZwLCBpbnQgYykKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGNjID0gKHVuc2lnbmVkIGNoYXIpIChjICYgMHhmZik7CisgICAgeHdyaXRlKGZwLCAoY29uc3QgbHpvX3ZvaWRwKSAmY2MsIDEpOworfQorCisvKiByZWFkIGFuZCB3cml0ZSBwb3J0YWJsZSAzMi1iaXQgaW50ZWdlcnMgKi8KKworbHpvX3VpbnQzMiB4cmVhZDMyKEZJTEUgKmZwKQoreworICAgIHVuc2lnbmVkIGNoYXIgYls0XTsKKyAgICBsem9fdWludDMyIHY7CisKKyAgICB4cmVhZChmcCwgYiwgNCwgMCk7CisgICAgdiAgPSAobHpvX3VpbnQzMikgYlszXSA8PCAgMDsKKyAgICB2IHw9IChsem9fdWludDMyKSBiWzJdIDw8ICA4OworICAgIHYgfD0gKGx6b191aW50MzIpIGJbMV0gPDwgMTY7CisgICAgdiB8PSAobHpvX3VpbnQzMikgYlswXSA8PCAyNDsKKyAgICByZXR1cm4gdjsKK30KKwordm9pZCB4d3JpdGUzMihGSUxFICpmcCwgbHpvX3hpbnQgdikKK3sKKyAgICB1bnNpZ25lZCBjaGFyIGJbNF07CisKKyAgICBiWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAxNikgJiAweGZmKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAyNCkgJiAweGZmKTsKKyAgICB4d3JpdGUoZnAsIGIsIDQpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21wcmVzcworLy8KKy8vIHBvc3NpYmxlIGltcHJvdmVtZW50OiB3ZSBjb3VsZCB1c2Ugb3ZlcmxhcHBpbmcgY29tcHJlc3Npb24gdG8KKy8vICAgc2F2ZSBzb21lIG1lbW9yeSAtIHNlZSBvdmVybGFwLmMuIFRoaXMgd291bGQgcmVxdWlyZSBzb21lIG1pbm9yCisvLyAgIGNoYW5nZXMgaW4gdGhlIGRlY29tcHJlc3Npb24gY29kZSBhcyB3ZWxsLCBiZWNhdXNlIGlmIGEgYmxvY2sKKy8vICAgdHVybnMgb3V0IHRvIGJlIGluY29tcHJlc3NpYmxlIHdlIHdvdWxkIHN0aWxsIGhhdmUgdG8gc3RvcmUgaXQgaW4gaXRzCisvLyAgICJjb21wcmVzc2VkIiAoaS5lLiB0aGVuIHNsaWdodGx5IGVubGFyZ2VkKSBmb3JtIGJlY2F1c2UgdGhlIG9yaWdpbmFsCisvLyAgICh1bmNvbXByZXNzZWQpIGRhdGEgd291bGQgaGF2ZSBiZWVuIGxvc3QgZHVyaW5nIHRoZSBvdmVybGFwcGluZworLy8gICBjb21wcmVzc2lvbi4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgZG9fY29tcHJlc3MoRklMRSAqZmksIEZJTEUgKmZvLCBpbnQgbGV2ZWwsIGx6b191aW50IGJsb2NrX3NpemUpCit7CisgICAgaW50IHIgPSAwOworICAgIGx6b19ieXRlcCBpbiA9IE5VTEw7CisgICAgbHpvX2J5dGVwIG91dCA9IE5VTEw7CisgICAgbHpvX2J5dGVwIHdya21lbSA9IE5VTEw7CisgICAgbHpvX3VpbnQgaW5fbGVuOworICAgIGx6b191aW50IG91dF9sZW47CisgICAgbHpvX3VpbnQzMiB3cmtfbGVuID0gMDsKKyAgICBsem9fdWludDMyIGZsYWdzID0gMTsgICAgICAgLyogZG8gY29tcHV0ZSBhIGNoZWNrc3VtICovCisgICAgaW50IG1ldGhvZCA9IDE7ICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIG1ldGhvZDogTFpPMVggKi8KKyAgICBsem9fdWludDMyIGNoZWNrc3VtOworCisgICAgdG90YWxfaW4gPSB0b3RhbF9vdXQgPSAwOworCisvKgorICogU3RlcCAxOiB3cml0ZSBtYWdpYyBoZWFkZXIsIGZsYWdzICYgYmxvY2sgc2l6ZSwgaW5pdCBjaGVja3N1bQorICovCisgICAgeHdyaXRlKGZvLCBtYWdpYywgc2l6ZW9mKG1hZ2ljKSk7CisgICAgeHdyaXRlMzIoZm8sIGZsYWdzKTsKKyAgICB4cHV0YyhmbywgbWV0aG9kKTsgICAgICAgICAgLyogY29tcHJlc3Npb24gbWV0aG9kICovCisgICAgeHB1dGMoZm8sIGxldmVsKTsgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIGxldmVsICovCisgICAgeHdyaXRlMzIoZm8sIGJsb2NrX3NpemUpOworICAgIGNoZWNrc3VtID0gbHpvX2FkbGVyMzIoMCwgTlVMTCwgMCk7CisKKy8qCisgKiBTdGVwIDI6IGFsbG9jYXRlIGNvbXByZXNzaW9uIGJ1ZmZlcnMgYW5kIHdvcmstbWVtb3J5CisgKi8KKyAgICBpbiA9IChsem9fYnl0ZXApIGx6b19tYWxsb2MoYmxvY2tfc2l6ZSk7CisgICAgb3V0ID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhibG9ja19zaXplICsgYmxvY2tfc2l6ZSAvIDE2ICsgNjQgKyAzKTsKKyAgICBpZiAobGV2ZWwgPT0gOSkKKyAgICAgICAgd3JrX2xlbiA9IExaTzFYXzk5OV9NRU1fQ09NUFJFU1M7CisgICAgZWxzZQorICAgICAgICB3cmtfbGVuID0gTFpPMVhfMV9NRU1fQ09NUFJFU1M7CisgICAgd3JrbWVtID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyh3cmtfbGVuKTsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCBvdXQgPT0gTlVMTCB8fCB3cmttZW0gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKyAgICAgICAgciA9IDE7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworLyoKKyAqIFN0ZXAgMzogcHJvY2VzcyBibG9ja3MKKyAqLworICAgIGZvciAoOzspCisgICAgeworICAgICAgICAvKiByZWFkIGJsb2NrICovCisgICAgICAgIGluX2xlbiA9IHhyZWFkKGZpLCBpbiwgYmxvY2tfc2l6ZSwgMSk7CisgICAgICAgIGlmIChpbl9sZW4gPD0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIHVwZGF0ZSBjaGVja3N1bSAqLworICAgICAgICBpZiAoZmxhZ3MgJiAxKQorICAgICAgICAgICAgY2hlY2tzdW0gPSBsem9fYWRsZXIzMihjaGVja3N1bSwgaW4sIGluX2xlbik7CisKKyAgICAgICAgLyogY2xlYXIgd3JrbWVtIChub3QgbmVlZGVkLCBvbmx5IGZvciBkZWJ1Zy9iZW5jaG1hcmsgcHVycG9zZXMpICovCisgICAgICAgIGlmIChvcHRfZGVidWcpCisgICAgICAgICAgICBsem9fbWVtc2V0KHdya21lbSwgMHhmZiwgd3JrX2xlbik7CisKKyAgICAgICAgLyogY29tcHJlc3MgYmxvY2sgKi8KKyAgICAgICAgaWYgKGxldmVsID09IDkpCisgICAgICAgICAgICByID0gbHpvMXhfOTk5X2NvbXByZXNzKGluLCBpbl9sZW4sIG91dCwgJm91dF9sZW4sIHdya21lbSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIgPSBsem8xeF8xX2NvbXByZXNzKGluLCBpbl9sZW4sIG91dCwgJm91dF9sZW4sIHdya21lbSk7CisgICAgICAgIGlmIChyICE9IExaT19FX09LIHx8IG91dF9sZW4gPiBpbl9sZW4gKyBpbl9sZW4gLyAxNiArIDY0ICsgMykKKyAgICAgICAgeworICAgICAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gY29tcHJlc3Npb24gZmFpbGVkOiAlZFxuIiwgcik7CisgICAgICAgICAgICByID0gMjsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisKKyAgICAgICAgLyogd3JpdGUgdW5jb21wcmVzc2VkIGJsb2NrIHNpemUgKi8KKyAgICAgICAgeHdyaXRlMzIoZm8sIGluX2xlbik7CisKKyAgICAgICAgaWYgKG91dF9sZW4gPCBpbl9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIGNvbXByZXNzZWQgYmxvY2sgKi8KKyAgICAgICAgICAgIHh3cml0ZTMyKGZvLCBvdXRfbGVuKTsKKyAgICAgICAgICAgIHh3cml0ZShmbywgb3V0LCBvdXRfbGVuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIG5vdCBjb21wcmVzc2libGUgLSB3cml0ZSB1bmNvbXByZXNzZWQgYmxvY2sgKi8KKyAgICAgICAgICAgIHh3cml0ZTMyKGZvLCBpbl9sZW4pOworICAgICAgICAgICAgeHdyaXRlKGZvLCBpbiwgaW5fbGVuKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qIHdyaXRlIEVPRiBtYXJrZXIgKi8KKyAgICB4d3JpdGUzMihmbywgMCk7CisKKyAgICAvKiB3cml0ZSBjaGVja3N1bSAqLworICAgIGlmIChmbGFncyAmIDEpCisgICAgICAgIHh3cml0ZTMyKGZvLCBjaGVja3N1bSk7CisKKyAgICByID0gMDsKK2VycjoKKyAgICBsem9fZnJlZSh3cmttZW0pOworICAgIGx6b19mcmVlKG91dCk7CisgICAgbHpvX2ZyZWUoaW4pOworICAgIHJldHVybiByOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkZWNvbXByZXNzIC8gdGVzdAorLy8KKy8vIFdlIGFyZSB1c2luZyBvdmVybGFwcGluZyAoaW4tcGxhY2UpIGRlY29tcHJlc3Npb24gdG8gc2F2ZSBzb21lCisvLyBtZW1vcnkgLSBzZWUgb3ZlcmxhcC5jLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBkb19kZWNvbXByZXNzKEZJTEUgKmZpLCBGSUxFICpmbykKK3sKKyAgICBpbnQgciA9IDA7CisgICAgbHpvX2J5dGVwIGJ1ZiA9IE5VTEw7CisgICAgbHpvX3VpbnQgYnVmX2xlbjsKKyAgICB1bnNpZ25lZCBjaGFyIG0gWyBzaXplb2YobWFnaWMpIF07CisgICAgbHpvX3VpbnQzMiBmbGFnczsKKyAgICBpbnQgbWV0aG9kOworICAgIGludCBsZXZlbDsKKyAgICBsem9fdWludCBibG9ja19zaXplOworICAgIGx6b191aW50MzIgY2hlY2tzdW07CisKKyAgICB0b3RhbF9pbiA9IHRvdGFsX291dCA9IDA7CisKKy8qCisgKiBTdGVwIDE6IGNoZWNrIG1hZ2ljIGhlYWRlciwgcmVhZCBmbGFncyAmIGJsb2NrIHNpemUsIGluaXQgY2hlY2tzdW0KKyAqLworICAgIGlmICh4cmVhZChmaSwgbSwgc2l6ZW9mKG1hZ2ljKSwxKSAhPSBzaXplb2YobWFnaWMpIHx8CisgICAgICAgIG1lbWNtcChtLCBtYWdpYywgc2l6ZW9mKG1hZ2ljKSkgIT0gMCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IGhlYWRlciBlcnJvciAtIHRoaXMgZmlsZSBpcyBub3QgY29tcHJlc3NlZCBieSBsem9wYWNrXG4iLCBwcm9nbmFtZSk7CisgICAgICAgIHIgPSAxOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisgICAgZmxhZ3MgPSB4cmVhZDMyKGZpKTsKKyAgICBtZXRob2QgPSB4Z2V0YyhmaSk7CisgICAgbGV2ZWwgPSB4Z2V0YyhmaSk7CisgICAgaWYgKG1ldGhvZCAhPSAxKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogaGVhZGVyIGVycm9yIC0gaW52YWxpZCBtZXRob2QgJWQgKGxldmVsICVkKVxuIiwKKyAgICAgICAgICAgICAgICBwcm9nbmFtZSwgbWV0aG9kLCBsZXZlbCk7CisgICAgICAgIHIgPSAyOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisgICAgYmxvY2tfc2l6ZSA9IHhyZWFkMzIoZmkpOworICAgIGlmIChibG9ja19zaXplIDwgMTAyNCB8fCBibG9ja19zaXplID4gOCoxMDI0KjEwMjRMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogaGVhZGVyIGVycm9yIC0gaW52YWxpZCBibG9jayBzaXplICVsZFxuIiwKKyAgICAgICAgICAgICAgICBwcm9nbmFtZSwgKGxvbmcpIGJsb2NrX3NpemUpOworICAgICAgICByID0gMzsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorICAgIGNoZWNrc3VtID0gbHpvX2FkbGVyMzIoMCxOVUxMLDApOworCisvKgorICogU3RlcCAyOiBhbGxvY2F0ZSBidWZmZXIgZm9yIGluLXBsYWNlIGRlY29tcHJlc3Npb24KKyAqLworICAgIGJ1Zl9sZW4gPSBibG9ja19zaXplICsgYmxvY2tfc2l6ZSAvIDE2ICsgNjQgKyAzOworICAgIGJ1ZiA9IChsem9fYnl0ZXApIGx6b19tYWxsb2MoYnVmX2xlbik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogb3V0IG9mIG1lbW9yeVxuIiwgcHJvZ25hbWUpOworICAgICAgICByID0gNDsKKyAgICAgICAgZ290byBlcnI7CisgICAgfQorCisvKgorICogU3RlcCAzOiBwcm9jZXNzIGJsb2NrcworICovCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGx6b19ieXRlcCBpbjsKKyAgICAgICAgbHpvX2J5dGVwIG91dDsKKyAgICAgICAgbHpvX3VpbnQgaW5fbGVuOworICAgICAgICBsem9fdWludCBvdXRfbGVuOworCisgICAgICAgIC8qIHJlYWQgdW5jb21wcmVzc2VkIHNpemUgKi8KKyAgICAgICAgb3V0X2xlbiA9IHhyZWFkMzIoZmkpOworCisgICAgICAgIC8qIGV4aXQgaWYgbGFzdCBibG9jayAoRU9GIG1hcmtlcikgKi8KKyAgICAgICAgaWYgKG91dF9sZW4gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIHJlYWQgY29tcHJlc3NlZCBzaXplICovCisgICAgICAgIGluX2xlbiA9IHhyZWFkMzIoZmkpOworCisgICAgICAgIC8qIHNhbml0eSBjaGVjayBvZiB0aGUgc2l6ZSB2YWx1ZXMgKi8KKyAgICAgICAgaWYgKGluX2xlbiA+IGJsb2NrX3NpemUgfHwgb3V0X2xlbiA+IGJsb2NrX3NpemUgfHwKKyAgICAgICAgICAgIGluX2xlbiA9PSAwIHx8IGluX2xlbiA+IG91dF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGJsb2NrIHNpemUgZXJyb3IgLSBkYXRhIGNvcnJ1cHRlZFxuIiwgcHJvZ25hbWUpOworICAgICAgICAgICAgciA9IDU7CisgICAgICAgICAgICBnb3RvIGVycjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHBsYWNlIGNvbXByZXNzZWQgYmxvY2sgYXQgdGhlIHRvcCBvZiB0aGUgYnVmZmVyICovCisgICAgICAgIGluID0gYnVmICsgYnVmX2xlbiAtIGluX2xlbjsKKyAgICAgICAgb3V0ID0gYnVmOworCisgICAgICAgIC8qIHJlYWQgY29tcHJlc3NlZCBibG9jayBkYXRhICovCisgICAgICAgIHhyZWFkKGZpLCBpbiwgaW5fbGVuLCAwKTsKKworICAgICAgICBpZiAoaW5fbGVuIDwgb3V0X2xlbikKKyAgICAgICAgeworICAgICAgICAgICAgLyogZGVjb21wcmVzcyAtIHVzZSBzYWZlIGRlY29tcHJlc3NvciBhcyBkYXRhIG1pZ2h0IGJlIGNvcnJ1cHRlZAorICAgICAgICAgICAgICogZHVyaW5nIGEgZmlsZSB0cmFuc2ZlciAqLworICAgICAgICAgICAgbHpvX3VpbnQgbmV3X2xlbiA9IG91dF9sZW47CisKKyAgICAgICAgICAgIHIgPSBsem8xeF9kZWNvbXByZXNzX3NhZmUoaW4sIGluX2xlbiwgb3V0LCAmbmV3X2xlbiwgTlVMTCk7CisgICAgICAgICAgICBpZiAociAhPSBMWk9fRV9PSyB8fCBuZXdfbGVuICE9IG91dF9sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIlczogY29tcHJlc3NlZCBkYXRhIHZpb2xhdGlvblxuIiwgcHJvZ25hbWUpOworICAgICAgICAgICAgICAgIHIgPSA2OworICAgICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogd3JpdGUgZGVjb21wcmVzc2VkIGJsb2NrICovCisgICAgICAgICAgICB4d3JpdGUoZm8sIG91dCwgb3V0X2xlbik7CisgICAgICAgICAgICAvKiB1cGRhdGUgY2hlY2tzdW0gKi8KKyAgICAgICAgICAgIGlmIChmbGFncyAmIDEpCisgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBsem9fYWRsZXIzMihjaGVja3N1bSwgb3V0LCBvdXRfbGVuKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHdyaXRlIG9yaWdpbmFsIChpbmNvbXByZXNzaWJsZSkgYmxvY2sgKi8KKyAgICAgICAgICAgIHh3cml0ZShmbywgaW4sIGluX2xlbik7CisgICAgICAgICAgICAvKiB1cGRhdGUgY2hlY2tzdW0gKi8KKyAgICAgICAgICAgIGlmIChmbGFncyAmIDEpCisgICAgICAgICAgICAgICAgY2hlY2tzdW0gPSBsem9fYWRsZXIzMihjaGVja3N1bSwgaW4sIGluX2xlbik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiByZWFkIGFuZCB2ZXJpZnkgY2hlY2tzdW0gKi8KKyAgICBpZiAoZmxhZ3MgJiAxKQorICAgIHsKKyAgICAgICAgbHpvX3VpbnQzMiBjID0geHJlYWQzMihmaSk7CisgICAgICAgIGlmIChjICE9IGNoZWNrc3VtKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiVzOiBjaGVja3N1bSBlcnJvciAtIGRhdGEgY29ycnVwdGVkXG4iLCBwcm9nbmFtZSk7CisgICAgICAgICAgICByID0gNzsKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICB9CisgICAgfQorCisgICAgciA9IDA7CitlcnI6CisgICAgbHpvX2ZyZWUoYnVmKTsKKyAgICByZXR1cm4gcjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgdm9pZCB1c2FnZSh2b2lkKQoreworICAgIHByaW50ZigidXNhZ2U6ICVzIFstOV0gaW5wdXQtZmlsZSBvdXRwdXQtZmlsZSAgKGNvbXByZXNzKVxuIiwgcHJvZ25hbWUpOworICAgIHByaW50ZigidXNhZ2U6ICVzIC1kICAgaW5wdXQtZmlsZSBvdXRwdXQtZmlsZSAgKGRlY29tcHJlc3MpXG4iLCBwcm9nbmFtZSk7CisgICAgcHJpbnRmKCJ1c2FnZTogJXMgLXQgICBpbnB1dC1maWxlLi4uICAgICAgICAgICAodGVzdClcbiIsIHByb2duYW1lKTsKKyAgICBleGl0KDEpOworfQorCisKKy8qIG9wZW4gaW5wdXQgZmlsZSAqLworc3RhdGljIEZJTEUgKnhvcGVuX2ZpKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgRklMRSAqZnA7CisKKyAgICBmcCA9IGZvcGVuKG5hbWUsICJyYiIpOworICAgIGlmIChmcCA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogY2Fubm90IG9wZW4gaW5wdXQgZmlsZSAlc1xuIiwgcHJvZ25hbWUsIG5hbWUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyNpZiBkZWZpbmVkKEhBVkVfU1RBVCkgJiYgZGVmaW5lZChTX0lTUkVHKQorICAgIHsKKyAgICAgICAgc3RydWN0IHN0YXQgc3Q7CisgICAgICAgIGludCBpc19yZWd1bGFyID0gMTsKKyAgICAgICAgaWYgKHN0YXQobmFtZSwgJnN0KSAhPSAwIHx8ICFTX0lTUkVHKHN0LnN0X21vZGUpKQorICAgICAgICAgICAgaXNfcmVndWxhciA9IDA7CisgICAgICAgIGlmICghaXNfcmVndWxhcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIlczogJXMgaXMgbm90IGEgcmVndWxhciBmaWxlXG4iLCBwcm9nbmFtZSwgbmFtZSk7CisgICAgICAgICAgICBmY2xvc2UoZnApOyBmcCA9IE5VTEw7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIGZwOworfQorCisKKy8qIG9wZW4gb3V0cHV0IGZpbGUgKi8KK3N0YXRpYyBGSUxFICp4b3Blbl9mbyhjb25zdCBjaGFyICpuYW1lKQoreworICAgIEZJTEUgKmZwOworCisjaWYgMAorICAgIC8qIHRoaXMgaXMgYW4gZXhhbXBsZSBwcm9ncmFtLCBzbyBtYWtlIHN1cmUgd2UgZG9uJ3Qgb3ZlcndyaXRlIGEgZmlsZSAqLworICAgIGZwID0gZm9wZW4obmFtZSwgInJiIik7CisgICAgaWYgKGZwICE9IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIiVzOiBmaWxlICVzIGFscmVhZHkgZXhpc3RzIC0tIG5vdCBvdmVyd3JpdHRlblxuIiwgcHJvZ25hbWUsIG5hbWUpOworICAgICAgICBmY2xvc2UoZnApOyBmcCA9IE5VTEw7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorI2VuZGlmCisgICAgZnAgPSBmb3BlbihuYW1lLCAid2IiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IGNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICVzXG4iLCBwcm9nbmFtZSwgbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHJldHVybiBmcDsKK30KKworCisvKiBjbG9zZSBmaWxlICovCitzdGF0aWMgdm9pZCB4Y2xvc2UoRklMRSAqZnApCit7CisgICAgaWYgKGZwKQorICAgIHsKKyAgICAgICAgaW50IGVycjsKKyAgICAgICAgZXJyID0gZmVycm9yKGZwKTsKKyAgICAgICAgaWYgKGZjbG9zZShmcCkgIT0gMCkKKyAgICAgICAgICAgIGVyciA9IDE7CisgICAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGVycm9yIHdoaWxlIGNsb3NpbmcgZmlsZVxuIiwgcHJvZ25hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgX19sem9fY2RlY2xfbWFpbiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGkgPSAxOworICAgIGludCByID0gMDsKKyAgICBGSUxFICpmaSA9IE5VTEw7CisgICAgRklMRSAqZm8gPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmluX25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm91dF9uYW1lID0gTlVMTDsKKyAgICBsem9fYm9vbCBvcHRfZGVjb21wcmVzcyA9IDA7CisgICAgbHpvX2Jvb2wgb3B0X3Rlc3QgPSAwOworICAgIGludCBvcHRfbGV2ZWwgPSAxOworICAgIGx6b191aW50IG9wdF9ibG9ja19zaXplOworICAgIGNvbnN0IGNoYXIgKnM7CisKKyAgICBsem9fd2lsZGFyZ3YoJmFyZ2MsICZhcmd2KTsKKworICAgIHByb2duYW1lID0gYXJndlswXTsKKyAgICBmb3IgKHMgPSBwcm9nbmFtZTsgKnM7IHMrKykKKyAgICAgICAgaWYgKCgqcyA9PSAnLycgfHwgKnMgPT0gJ1xcJykgJiYgc1sxXSkKKyAgICAgICAgICAgIHByb2duYW1lID0gcyArIDE7CisKKyAgICBwcmludGYoIlxuTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgKHYlcywgJXMpLlxuIiwKKyAgICAgICAgICAgbHpvX3ZlcnNpb25fc3RyaW5nKCksIGx6b192ZXJzaW9uX2RhdGUoKSk7CisgICAgcHJpbnRmKCJDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyXG5BbGwgUmlnaHRzIFJlc2VydmVkLlxuXG4iKTsKKworI2lmIDAKKyAgICBwcmludGYoCisiKioqIERJU0NMQUlNRVIgKioqXG4iCisiICAgVGhpcyBpcyBhbiBleGFtcGxlIHByb2dyYW0sIGRvIG5vdCB1c2UgdG8gYmFja3VwIHlvdXIgZGF0YSAhXG4iCisiICAgR2V0IExaT1AgaWYgeW91J3JlIGludGVyZXN0ZWQgaW50byBhIGZ1bGwtZmVhdHVyZWQgcGFja2VyLlxuIgorIiAgIFNlZSBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem9wL1xuIgorIlxuIik7CisjZW5kaWYKKworCisvKgorICogU3RlcCAxOiBpbml0aWFsaXplIHRoZSBMWk8gbGlicmFyeQorICovCisgICAgaWYgKGx6b19pbml0KCkgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gbHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcHJpbnRmKCIodGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNvbXBpbGVyIGJ1ZyAtIHRyeSByZWNvbXBpbGluZ1xud2l0aG91dCBvcHRpbWl6YXRpb25zLCBhbmQgZW5hYmxlIGAtRExaT19ERUJVRycgZm9yIGRpYWdub3N0aWNzKVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisKKy8qCisgKiBTdGVwIDI6IHNldHVwIG1lbW9yeQorICovCisgICAgb3B0X2Jsb2NrX3NpemUgPSAyNTYgKiAxMDI0TDsKKworI2lmIGRlZmluZWQoQUNDX01NX0FIU0hJRlQpCisgICAgLyogcmVkdWNlIG1lbW9yeSByZXF1aXJlbWVudHMgZm9yIGFuY2llbnQgMTYtYml0IERPUyA2NDBrQiByZWFsLW1vZGUgKi8KKyAgICBpZiAoQUNDX01NX0FIU0hJRlQgIT0gMykKKyAgICAgICAgb3B0X2Jsb2NrX3NpemUgPSAxNiAqIDEwMjRMOworI2VuZGlmCisKKworLyoKKyAqIFN0ZXAgMzogZ2V0IG9wdGlvbnMKKyAqLworCisgICAgd2hpbGUgKGkgPCBhcmdjICYmIGFyZ3ZbaV1bMF0gPT0gJy0nKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChhcmd2W2ldLCItZCIpID09IDApCisgICAgICAgICAgICBvcHRfZGVjb21wcmVzcyA9IDE7CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCItdCIpID09IDApCisgICAgICAgICAgICBvcHRfdGVzdCA9IDE7CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCItOSIpID09IDApCisgICAgICAgICAgICBvcHRfbGV2ZWwgPSA5OworICAgICAgICBlbHNlIGlmIChhcmd2W2ldWzFdID09ICdiJyAmJiBhcmd2W2ldWzJdKQorICAgICAgICB7CisgICAgICAgICAgICBsb25nIGIgPSBhdG9sKCZhcmd2W2ldWzJdKTsKKyAgICAgICAgICAgIGlmIChiID49IDEwMjRMICYmIGIgPD0gOCoxMDI0KjEwMjRMKQorICAgICAgICAgICAgICAgIG9wdF9ibG9ja19zaXplID0gKGx6b191aW50KSBiOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiJXM6IGludmFsaWQgYmxvY2tfc2l6ZSBpbiBvcHRpb24gYCVzJy5cbiIsIHByb2duYW1lLCBhcmd2W2ldKTsKKyAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKHN0cmNtcChhcmd2W2ldLCItLWRlYnVnIikgPT0gMCkKKyAgICAgICAgICAgIG9wdF9kZWJ1ZyArPSAxOworICAgICAgICBlbHNlCisgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICBpKys7CisgICAgfQorICAgIGlmIChvcHRfdGVzdCAmJiBpID49IGFyZ2MpCisgICAgICAgIHVzYWdlKCk7CisgICAgaWYgKCFvcHRfdGVzdCAmJiBpICsgMiAhPSBhcmdjKQorICAgICAgICB1c2FnZSgpOworCisKKy8qCisgKiBTdGVwIDQ6IHByb2Nlc3MgZmlsZShzKQorICovCisKKyAgICBpZiAob3B0X3Rlc3QpCisgICAgeworICAgICAgICB3aGlsZSAoaSA8IGFyZ2MgJiYgciA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBpbl9uYW1lID0gYXJndltpKytdOworICAgICAgICAgICAgZmkgPSB4b3Blbl9maShpbl9uYW1lKTsKKyAgICAgICAgICAgIHIgPSBkb19kZWNvbXByZXNzKGZpLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChyID09IDApCisgICAgICAgICAgICAgICAgcHJpbnRmKCIlczogJXMgdGVzdGVkIG9rICglbHUgLT4gJWx1IGJ5dGVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2duYW1lLCBpbl9uYW1lLCB0b3RhbF9pbiwgdG90YWxfb3V0KTsKKyAgICAgICAgICAgIHhjbG9zZShmaSk7IGZpID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChvcHRfZGVjb21wcmVzcykKKyAgICB7CisgICAgICAgIGluX25hbWUgPSBhcmd2W2krK107CisgICAgICAgIG91dF9uYW1lID0gYXJndltpKytdOworICAgICAgICBmaSA9IHhvcGVuX2ZpKGluX25hbWUpOworICAgICAgICBmbyA9IHhvcGVuX2ZvKG91dF9uYW1lKTsKKyAgICAgICAgciA9IGRvX2RlY29tcHJlc3MoZmksIGZvKTsKKyAgICAgICAgaWYgKHIgPT0gMCkKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGRlY29tcHJlc3NlZCAlbHUgaW50byAlbHUgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHByb2duYW1lLCB0b3RhbF9pbiwgdG90YWxfb3V0KTsKKyAgICB9CisgICAgZWxzZSAvKiBjb21wcmVzcyAqLworICAgIHsKKyAgICAgICAgaW5fbmFtZSA9IGFyZ3ZbaSsrXTsKKyAgICAgICAgb3V0X25hbWUgPSBhcmd2W2krK107CisgICAgICAgIGZpID0geG9wZW5fZmkoaW5fbmFtZSk7CisgICAgICAgIGZvID0geG9wZW5fZm8ob3V0X25hbWUpOworICAgICAgICByID0gZG9fY29tcHJlc3MoZmksIGZvLCBvcHRfbGV2ZWwsIG9wdF9ibG9ja19zaXplKTsKKyAgICAgICAgaWYgKHIgPT0gMCkKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGNvbXByZXNzZWQgJWx1IGludG8gJWx1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAgICBwcm9nbmFtZSwgdG90YWxfaW4sIHRvdGFsX291dCk7CisgICAgfQorCisgICAgeGNsb3NlKGZpKTsgZmkgPSBOVUxMOworICAgIHhjbG9zZShmbyk7IGZvID0gTlVMTDsKKyAgICByZXR1cm4gcjsKK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2V4YW1wbGVzL292ZXJsYXAuYyBiL2x6by0yLjAzL2V4YW1wbGVzL292ZXJsYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWViNTJmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvZXhhbXBsZXMvb3ZlcmxhcC5jCkBAIC0wLDAgKzEsMzM3IEBACisvKiBvdmVybGFwLmMgLS0gZXhhbXBsZSBwcm9ncmFtOiBvdmVybGFwcGluZyAoZGUpY29tcHJlc3Npb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIFRoaXMgcHJvZ3JhbSBzaG93cyBob3cgdG8gZG8gb3ZlcmxhcHBpbmcgY29tcHJlc3Npb24gYW5kCisvLyBpbi1wbGFjZSBkZWNvbXByZXNzaW9uLgorLy8KKy8vIFBsZWFzZSBzdHVkeSBMWk8uRkFRIGFuZCBzaW1wbGUuYyBmaXJzdC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaW5jbHVkZSAibHpvL2x6b2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMXguaCIKKworLyogcG9ydGFiaWxpdHkgbGF5ZXIgKi8KKyNkZWZpbmUgV0FOVF9MWk9fTUFMTE9DIDEKKyNkZWZpbmUgV0FOVF9MWk9fRlJFQUQgMQorI2RlZmluZSBXQU5UX0xaT19XSUxEQVJHViAxCisjaW5jbHVkZSAiZXhhbXBsZXMvcG9ydGFiLmgiCisKKworLyogT3ZlcmhlYWQgKGluIGJ5dGVzKSBmb3IgdGhlIGluLXBsYWNlIGRlY29tcHJlc3Npb24gYnVmZmVyLgorICogTW9zdCBmaWxlcyBuZWVkIG9ubHkgMTYgIQorICogKHRyeSBgb3ZlcmxhcCAtMTYgZmlsZScgb3IgZXZlbiBgb3ZlcmxhcCAtOCBmaWxlJykKKyAqCisgKiBXb3JzdCBjYXNlIChmb3IgZmlsZXMgdGhhdCBhcmUgY29tcHJlc3NpYmxlIGJ5IG9ubHkgYSBmZXcgYnl0ZXMpCisgKiBpcyAnaW5fbGVuIC8gMTYgKyA2NCArIDMnLiBTZWUgc3RlcCA1YSkgYmVsb3cuCisgKgorICogRm9yIG92ZXJsYXBwaW5nIGNvbXByZXNzaW9uICcweGJmZmYgKyBpbl9sZW4gLyAxNiArIDY0ICsgMycgYnl0ZXMKKyAqIHdpbGwgYmUgbmVlZGVkLiBTZWUgc3RlcCA0YSkgYmVsb3cuCisgKi8KKworc3RhdGljIGx6b191aW50IG9wdF9vdmVyaGVhZCA9IDA7ICAgLyogYXNzdW1lIHdvcnN0IGNhc2UgKi8KKworCisjaWYgMCAmJiBkZWZpbmVkKExaT19VU0VfQVNNKQorICAgLyoganVzdCBmb3IgdGVzdGluZyAqLworIyAgaW5jbHVkZSA8bHpvX2FzbS5oPgorIyAgZGVmaW5lIGx6bzF4X2RlY29tcHJlc3MgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdAorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lID0gTlVMTDsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfZmlsZXMgPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfaW4gPSAwOworCisKK3N0YXRpYyBsem9fYnl0ZXAgeG1hbGxvYyhsem9fdWludCBsZW4pCit7CisgICAgbHpvX2J5dGVwIHA7CisKKyAgICBwID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhsZW4gPiAwID8gbGVuIDogMSk7CisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgcmV0dXJuIHA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IGRvX2ZpbGUgKCBjb25zdCBjaGFyICppbl9uYW1lICkKK3sKKyAgICBpbnQgcjsKKyAgICBGSUxFICpmID0gTlVMTDsKKyAgICBsb25nIGw7CisKKyAgICBsem9fYnl0ZXAgd3JrbWVtID0gTlVMTDsKKworICAgIGx6b19ieXRlcCBpbiA9IE5VTEw7CisgICAgbHpvX3VpbnQgaW5fbGVuOyAgICAgICAgICAgICAgICAvKiB1bmNvbXByZXNzZWQgbGVuZ3RoICovCisKKyAgICBsem9fYnl0ZXAgb3V0ID0gTlVMTDsKKyAgICBsem9fdWludCBvdXRfbGVuOyAgICAgICAgICAgICAgIC8qIGNvbXByZXNzZWQgbGVuZ3RoICovCisKKyAgICBsem9fYnl0ZXAgb3ZlcmxhcCA9IE5VTEw7CisgICAgbHpvX3VpbnQgb3ZlcmhlYWQ7CisgICAgbHpvX3VpbnQgb2Zmc2V0OworCisgICAgbHpvX3VpbnQgbmV3X2xlbiA9IDA7CisKKy8qCisgKiBTdGVwIDE6IG9wZW4gdGhlIGlucHV0IGZpbGUKKyAqLworICAgIGYgPSBmb3Blbihpbl9uYW1lLCJyYiIpOworICAgIGlmIChmID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIiVzOiAlczogY2Fubm90IG9wZW4gZmlsZVxuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBnb3RvIG5leHRfZmlsZTsKKyAgICB9CisgICAgZnNlZWsoZiwwLFNFRUtfRU5EKTsKKyAgICBsID0gZnRlbGwoZik7CisgICAgZnNlZWsoZiwwLFNFRUtfU0VUKTsKKyAgICBpZiAobCA8PSAwKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogJXM6IGVtcHR5IGZpbGUgLS0gc2tpcHBpbmdcbiIsIHByb2duYW1lLCBpbl9uYW1lKTsKKyAgICAgICAgZ290byBuZXh0X2ZpbGU7CisgICAgfQorICAgIGluX2xlbiA9IChsem9fdWludCkgbDsKKworLyoKKyAqIFN0ZXAgMjogYWxsb2NhdGUgY29tcHJlc3Npb24gYnVmZmVycyBhbmQgcmVhZCB0aGUgZmlsZQorICovCisgICAgaW4gPSB4bWFsbG9jKGluX2xlbik7CisgICAgb3V0ID0geG1hbGxvYyhpbl9sZW4gKyBpbl9sZW4gLyAxNiArIDY0ICsgMyk7CisgICAgd3JrbWVtID0geG1hbGxvYyhMWk8xWF8xX01FTV9DT01QUkVTUyk7CisgICAgaW5fbGVuID0gKGx6b191aW50KSBsem9fZnJlYWQoZixpbixpbl9sZW4pOworICAgIGZjbG9zZShmKTsgZiA9IE5VTEw7CisgICAgcHJpbnRmKCIlczogJXM6IHJlYWQgJWxkIGJ5dGVzXG4iLCBwcm9nbmFtZSwgaW5fbmFtZSwgKGxvbmcpIGluX2xlbik7CisKKyAgICB0b3RhbF9maWxlcysrOworICAgIHRvdGFsX2luICs9ICh1bnNpZ25lZCBsb25nKSBpbl9sZW47CisKKy8qCisgKiBTdGVwIDM6IGNvbXByZXNzIGZyb20gYGluJyB0byBgb3V0JyB3aXRoIExaTzFYLTEKKyAqLworICAgIHIgPSBsem8xeF8xX2NvbXByZXNzKGluLGluX2xlbixvdXQsJm91dF9sZW4sd3JrbWVtKTsKKyAgICBpZiAociAhPSBMWk9fRV9PSyB8fCBvdXRfbGVuID4gaW5fbGVuICsgaW5fbGVuIC8gMTYgKyA2NCArIDMpCisgICAgeworICAgICAgICAvKiB0aGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KKyAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIGNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBwcmludGYoIiUtMjZzICU4bHUgLT4gJThsdVxuIiwgIkxaTzFYLTE6IiwgKGxvbmcpIGluX2xlbiwgKGxvbmcpIG91dF9sZW4pOworCisKKy8qKioqKiBTdGVwIDQ6IG92ZXJsYXBwaW5nIGNvbXByZXNzaW9uICoqKioqLworCisvKgorICogU3RlcCA0YTogYWxsb2NhdGUgdGhlIGBvdmVybGFwJyBidWZmZXIgZm9yIG92ZXJsYXBwaW5nIGNvbXByZXNzaW9uCisgKi8KKyAgICBvdmVyaGVhZCAgPSBpbl9sZW4gPiAweGJmZmYgPyAweGJmZmYgOiBpbl9sZW47CisgICAgb3ZlcmhlYWQgKz0gaW5fbGVuIC8gMTYgKyA2NCArIDM7CisgICAgb3ZlcmxhcCA9IHhtYWxsb2MoaW5fbGVuICsgb3ZlcmhlYWQpOworCisvKgorICogU3RlcCA0YjogcHJlcGFyZSBkYXRhIGluIGBvdmVybGFwJyBidWZmZXIuCisgKiAgICAgICAgICBjb3B5IHVuY29tcHJlc3NlZCBkYXRhIGF0IHRoZSB0b3Agb2YgdGhlIG92ZXJsYXAgYnVmZmVyCisgKi8KKyAgICAvKioqIG9mZnNldCA9IGluX2xlbiArIG92ZXJoZWFkIC0gaW5fbGVuOyAqKiovCisgICAgb2Zmc2V0ID0gb3ZlcmhlYWQ7CisgICAgbHpvX21lbWNweShvdmVybGFwICsgb2Zmc2V0LCBpbiwgaW5fbGVuKTsKKworLyoKKyAqIFN0ZXAgNGM6IGRvIGFuIGluLXBsYWNlIGNvbXByZXNzaW9uIHdpdGhpbiB0aGUgYG92ZXJsYXAnIGJ1ZmZlcgorICovCisgICAgciA9IGx6bzF4XzFfY29tcHJlc3Mob3ZlcmxhcCtvZmZzZXQsaW5fbGVuLG92ZXJsYXAsJm5ld19sZW4sd3JrbWVtKTsKKyAgICBpZiAociAhPSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoIm92ZXJsYXBwaW5nIGNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworLyoKKyAqIFN0ZXAgNGQ6IHZlcmlmeSBvdmVybGFwcGluZyBjb21wcmVzc2lvbgorICovCisgICAgaWYgKG5ld19sZW4gIT0gb3V0X2xlbiB8fCBsem9fbWVtY21wKG91dCxvdmVybGFwLG91dF9sZW4pICE9IDApCisgICAgeworICAgICAgICAvKiBBcyBjb21wcmVzc2lvbiBpcyBub24tZGV0ZXJtaW5pc3RpYyB0aGVyZSBjYW4gYmUgYSBkaWZmZXJlbmNlCisgICAgICAgICAqIGluIHRoZSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIChidXQgdGhpcyB1c3VhbGx5CisgICAgICAgICAqIGhhcHBlbnMgdmVyeSBzZWxkb20pLiBTbyB3ZSBoYXZlIHRvIHZlcmlmeSB0aGUgb3ZlcmxhcHBpbmcKKyAgICAgICAgICogY29tcHJlc3Npb24gYnkgZG9pbmcgYSB0ZW1wb3JhcnkgZGVjb21wcmVzc2lvbi4KKyAgICAgICAgICovCisgICAgICAgIGx6b191aW50IGwgPSBpbl9sZW47CisgICAgICAgIGx6b19ieXRlcCB0bXAgPSB4bWFsbG9jKGwpOworICAgICAgICByID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKG92ZXJsYXAsbmV3X2xlbix0bXAsJmwsTlVMTCk7CisgICAgICAgIGlmIChyICE9IExaT19FX09LIHx8IGwgIT0gaW5fbGVuIHx8IGx6b19tZW1jbXAoaW4sdG1wLGwpICE9IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICAgICAgcHJpbnRmKCJvdmVybGFwcGluZyBjb21wcmVzc2lvbiBkYXRhIGVycm9yXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgbHpvX2ZyZWUodG1wKTsKKyAgICB9CisKKyAgICBwcmludGYoIm92ZXJsYXBwaW5nIGNvbXByZXNzaW9uOiAgICU4bHUgLT4gJThsdSAgICBvdmVyaGVhZDogJTdsZFxuIiwKKyAgICAgICAgICAgIChsb25nKSBpbl9sZW4sIChsb25nKSBuZXdfbGVuLCAobG9uZykgb3ZlcmhlYWQpOworICAgIGx6b19mcmVlKG92ZXJsYXApOyBvdmVybGFwID0gTlVMTDsKKworCisvKioqKiogU3RlcCA1OiBvdmVybGFwcGluZyBkZWNvbXByZXNzaW9uICoqKioqLworCisvKgorICogU3RlcCA1YTogYWxsb2NhdGUgdGhlIGBvdmVybGFwJyBidWZmZXIgZm9yIGluLXBsYWNlIGRlY29tcHJlc3Npb24KKyAqLworICAgIGlmIChvcHRfb3ZlcmhlYWQgPT0gMCB8fCBvdXRfbGVuID49IGluX2xlbikKKyAgICAgICAgb3ZlcmhlYWQgPSBpbl9sZW4gLyAxNiArIDY0ICsgMzsKKyAgICBlbHNlCisgICAgICAgIG92ZXJoZWFkID0gb3B0X292ZXJoZWFkOworICAgIG92ZXJsYXAgPSB4bWFsbG9jKGluX2xlbiArIG92ZXJoZWFkKTsKKworLyoKKyAqIFN0ZXAgNWI6IHByZXBhcmUgZGF0YSBpbiBgb3ZlcmxhcCcgYnVmZmVyLgorICogICAgICAgICAgY29weSBjb21wcmVzc2VkIGRhdGEgYXQgdGhlIHRvcCBvZiB0aGUgb3ZlcmxhcCBidWZmZXIKKyAqLworICAgIG9mZnNldCA9IGluX2xlbiArIG92ZXJoZWFkIC0gb3V0X2xlbjsKKyAgICBsem9fbWVtY3B5KG92ZXJsYXAgKyBvZmZzZXQsIG91dCwgb3V0X2xlbik7CisKKy8qCisgKiBTdGVwIDVjOiBkbyBhbiBpbi1wbGFjZSBkZWNvbXByZXNzaW9uIHdpdGhpbiB0aGUgYG92ZXJsYXAnIGJ1ZmZlcgorICovCisgICAgbmV3X2xlbiA9IGluX2xlbjsKKyAgICByID0gbHpvMXhfZGVjb21wcmVzcyhvdmVybGFwK29mZnNldCxvdXRfbGVuLG92ZXJsYXAsJm5ld19sZW4sTlVMTCk7CisgICAgaWYgKHIgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICAvKiB0aGlzIG1heSBoYXBwZW4gaWYgb3ZlcmhlYWQgaXMgdG9vIHNtYWxsICovCisgICAgICAgIHByaW50Zigib3ZlcmxhcHBpbmcgZGVjb21wcmVzc2lvbiBmYWlsZWQ6ICVkIC0gaW5jcmVhc2UgYG9wdF9vdmVyaGVhZCdcbiIsIHIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworLyoKKyAqIFN0ZXAgNWQ6IHZlcmlmeSBkZWNvbXByZXNzaW9uCisgKi8KKyAgICBpZiAobmV3X2xlbiAhPSBpbl9sZW4gfHwgbHpvX21lbWNtcChpbixvdmVybGFwLGluX2xlbikgIT0gMCkKKyAgICB7CisgICAgICAgIC8qIHRoaXMgbWF5IGhhcHBlbiBpZiBvdmVyaGVhZCBpcyB0b28gc21hbGwgKi8KKyAgICAgICAgcHJpbnRmKCJvdmVybGFwcGluZyBkZWNvbXByZXNzaW9uIGRhdGEgZXJyb3IgLSBpbmNyZWFzZSBgb3B0X292ZXJoZWFkJ1xuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIHByaW50Zigib3ZlcmxhcHBpbmcgZGVjb21wcmVzc2lvbjogJThsdSAtPiAlOGx1ICAgIG92ZXJoZWFkOiAlN2xkXG4iLAorICAgICAgICAgICAgKGxvbmcpIG91dF9sZW4sIChsb25nKSBuZXdfbGVuLCAobG9uZykgb3ZlcmhlYWQpOworICAgIGx6b19mcmVlKG92ZXJsYXApOyBvdmVybGFwID0gTlVMTDsKKworCituZXh0X2ZpbGU6CisgICAgbHpvX2ZyZWUob3ZlcmxhcCk7CisgICAgbHpvX2ZyZWUod3JrbWVtKTsKKyAgICBsem9fZnJlZShvdXQpOworICAgIGx6b19mcmVlKGluKTsKKyAgICBpZiAoZikgZmNsb3NlKGYpOworCisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9fbHpvX2NkZWNsX21haW4gbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCByOworICAgIGludCBpID0gMTsKKworICAgIGx6b193aWxkYXJndigmYXJnYywgJmFyZ3YpOworCisgICAgcHJpbnRmKCJcbkxaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICh2JXMsICVzKS5cbiIsCisgICAgICAgICAgIGx6b192ZXJzaW9uX3N0cmluZygpLCBsem9fdmVyc2lvbl9kYXRlKCkpOworICAgIHByaW50ZigiQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuIik7CisKKyAgICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgICAgaWYgKGkgPCBhcmdjICYmIGFyZ3ZbaV1bMF0gPT0gJy0nKQorICAgICAgICBvcHRfb3ZlcmhlYWQgPSBhdG9pKCZhcmd2W2krK11bMV0pOworI2lmIDEKKyAgICBpZiAob3B0X292ZXJoZWFkICE9IDAgJiYgb3B0X292ZXJoZWFkIDwgOCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IGludmFsaWQgb3ZlcmhlYWQgdmFsdWUgJWxkXG4iLCBwcm9nbmFtZSwgKGxvbmcpb3B0X292ZXJoZWFkKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoaSA+PSBhcmdjKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJ1c2FnZTogJXMgWy1vdmVyaGVhZF9pbl9ieXRlc10gZmlsZS4uXG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAxOiBpbml0aWFsaXplIHRoZSBMWk8gbGlicmFyeQorICovCisgICAgaWYgKGx6b19pbml0KCkgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gbHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcHJpbnRmKCIodGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNvbXBpbGVyIGJ1ZyAtIHRyeSByZWNvbXBpbGluZ1xud2l0aG91dCBvcHRpbWl6YXRpb25zLCBhbmQgZW5hYmxlIGAtRExaT19ERUJVRycgZm9yIGRpYWdub3N0aWNzKVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAyOiBwcm9jZXNzIGZpbGVzCisgKi8KKyAgICBmb3IgKHIgPSAwOyByID09IDAgJiYgaSA8IGFyZ2M7IGkrKykKKyAgICAgICAgciA9IGRvX2ZpbGUoYXJndltpXSk7CisKKyAgICBwcmludGYoIlxuRG9uZS4gU3VjY2Vzc2Z1bGx5IHByb2Nlc3NlZCAlbHUgYnl0ZXMgaW4gJWx1IGZpbGVzLlxuIiwKKyAgICAgICAgICAgIHRvdGFsX2luLCB0b3RhbF9maWxlcyk7CisgICAgcmV0dXJuIHI7Cit9CisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9leGFtcGxlcy9wb3J0YWIuaCBiL2x6by0yLjAzL2V4YW1wbGVzL3BvcnRhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MDViNDQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9leGFtcGxlcy9wb3J0YWIuaApAQCAtMCwwICsxLDE2MiBAQAorLyogcG9ydGFiLmggLS0gcG9ydGFiaWxpdHkgbGF5ZXIKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisKKyNpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTAwMCAmJiBfTVNDX1ZFUiA8IDEyMDApKQorICAgLyogYXZvaWQgYC1XNCcgd2FybmluZ3MgaW4gc3lzdGVtIGhlYWRlciBmaWxlcyAqLworIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMSA0MjE0IDQ1MTQpCisjZW5kaWYKKyNpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkpCisgICAvKiBhdm9pZCBgLVdhbGwnIHdhcm5pbmdzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMgKi8KKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQxNjMgNDI1NSA0ODIwKQorICAgLyogYXZvaWQgd2FybmluZ3MgYWJvdXQgaW5saW5pbmcgKi8KKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ3MTAgNDcxMSkKKyNlbmRpZgorI2lmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkKKyAgIC8qIGF2b2lkIHdhcm5pbmdzIHdoZW4gdXNpbmcgImRlcHJlY2F0ZWQiIFBPU0lYIGZ1bmN0aW9ucyAqLworIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDk5NikKKyNlbmRpZgorI2lmIChMWk9fQ0NfUEVMTEVTQyAmJiAoX19QT0NDX18gPj0gMjkwKSkKKyMgIHByYWdtYSB3YXJuKGRpc2FibGU6MjAwMikKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKSB8fCAhKGRlZmluZWQoTFpPX0xJQkNfSVNPQzkwKSB8fCBkZWZpbmVkKExaT19MSUJDX0lTT0M5OSkpCisKKyNpbmNsdWRlICJleGFtcGxlcy9wb3J0YWJfYS5oIgorCisjZWxzZQorCisvKiBJTkZPOgorICogICBUaGUgInBvcnRhYl9hLmgiIHZlcnNpb24gYWJvdmUgdXNlcyB0aGUgQUNDIGxpYnJhcnkgdG8gYWRkCisgKiAgIHN1cHBvcnQgZm9yIGFuY2llbnQgc3lzdGVtcyAobGlrZSAxNi1iaXQgRE9TKSBhbmQgdG8gcHJvdmlkZQorICogICBzb21lIGdpbW1pY2tzIGxpa2UgV2luZG93cyBoaWdoLXJlc29sdXRpb24gdGltZXJzLgorICogICBTdGlsbCwgb24gYW55IGhhbGZ3YXkgbW9kZXJuIG1hY2hpbmUgeW91IGNhbiBhbHNvIHVzZSB0aGUKKyAqICAgZm9sbG93aW5nIHB1cmUgQU5TSS1DIGNvZGUgaW5zdGVhZC4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpZiBkZWZpbmVkKENMS19UQ0spICYmICFkZWZpbmVkKENMT0NLU19QRVJfU0VDKQorIyAgZGVmaW5lIENMT0NLU19QRVJfU0VDIENMS19UQ0sKKyNlbmRpZgorCisjaWYgZGVmaW5lZChXQU5UX0xaT19NQUxMT0MpCisjICBkZWZpbmUgbHpvX21hbGxvYyhhKSAgICAgICAgIChtYWxsb2MoYSkpCisjICBkZWZpbmUgbHpvX2ZyZWUoYSkgICAgICAgICAgIChmcmVlKGEpKQorI2VuZGlmCisjaWYgZGVmaW5lZChXQU5UX0xaT19GUkVBRCkKKyMgIGRlZmluZSBsem9fZnJlYWQoZixiLHMpICAgICAgKGZyZWFkKGIsMSxzLGYpKQorIyAgZGVmaW5lIGx6b19md3JpdGUoZixiLHMpICAgICAoZndyaXRlKGIsMSxzLGYpKQorI2VuZGlmCisjaWYgZGVmaW5lZChXQU5UX0xaT19VQ0xPQ0spCisjICBkZWZpbmUgbHpvX3VjbG9ja19oYW5kbGVfdCAgIGludAorIyAgZGVmaW5lIGx6b191Y2xvY2tfdCAgICAgICAgICBkb3VibGUKKyMgIGRlZmluZSBsem9fdWNsb2NrX29wZW4oYSkgICAgKCh2b2lkKShhKSkKKyMgIGRlZmluZSBsem9fdWNsb2NrX2Nsb3NlKGEpICAgKCh2b2lkKShhKSkKKyMgIGRlZmluZSBsem9fdWNsb2NrX3JlYWQoYSxiKSAgKihiKSA9IChjbG9jaygpIC8gKGRvdWJsZSkoQ0xPQ0tTX1BFUl9TRUMpKQorIyAgZGVmaW5lIGx6b191Y2xvY2tfZ2V0X2VsYXBzZWQoYSxiLGMpICgqKGMpIC0gKihiKSkKKyNlbmRpZgorI2lmIGRlZmluZWQoV0FOVF9MWk9fV0lMREFSR1YpCisjICBkZWZpbmUgbHpvX3dpbGRhcmd2KGEsYikgICAgICgodm9pZCkwKQorI2VuZGlmCisKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBtaXNjCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdHVybiBvbiBhc3NlcnRpb25zICovCisjdW5kZWYgTkRFQlVHCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKy8qIGp1c3QgaW4gY2FzZSAqLworI3VuZGVmIHhtYWxsb2MKKyN1bmRlZiB4ZnJlZQorI3VuZGVmIHhyZWFkCisjdW5kZWYgeHdyaXRlCisjdW5kZWYgeHB1dGMKKyN1bmRlZiB4Z2V0YworI3VuZGVmIHhyZWFkMzIKKyN1bmRlZiB4d3JpdGUzMgorCisKKyNpZiBkZWZpbmVkKFdBTlRfTFpPX1VDTE9DSykKKworLyogSGlnaCBxdWFsaXR5IGJlbmNobWFya2luZy4KKyAqCisgKiBGbHVzaCB0aGUgQ1BVIGNhY2hlIHRvIGdldCBtb3JlIGFjY3VyYXRlIGJlbmNobWFyayB2YWx1ZXMuCisgKiBUaGlzIG5lZWRzIGN1c3RvbSBrZXJuZWwgcGF0Y2hlcy4gQXMgYSByZXN1bHQgLSBpbiBjb21iaW5hdGlvbiB3aXRoCisgKiB0aGUgcGVyZmN0ciBMaW51eCBrZXJuZWwgcGF0Y2hlcyAtIGFjY3VyYXRlIGhpZ2gtcXVhbGl0eSBiZW5jaG1hcmtpbmcKKyAqIGlzIHBvc3NpYmxlLgorICoKKyAqIEFsbCBvdGhlciBtZXRob2RzIChyZHRzYywgUXVlcnlQZXJmb3JtYW5jZUNvdW50ZXIsIGdldHRpbWVvZmRheSwgLi4uKQorICogYXJlIGNvbXBsZXRlbHkgdW5yZWxpYWJsZSBmb3Igb3VyIHB1cnBvc2VzLCBhbmQgdGhlIG9ubHkgb3RoZXIKKyAqIG9wdGlvbiBpcyB0byBib290IGludG8gYSBsZWdhY3kgc2luZ2xlLXRhc2sgb3BlcmF0aW5nIHN5c3RlbQorICogbGlrZSBwbGFpbiBNU0RPUyBhbmQgdG8gZGlyZWN0bHkgcmVwcm9ncmFtIHRoZSBoYXJkd2FyZSBjbG9jay4KKyAqIFtUaGUgZGpncHAyIHBvcnQgb2YgdGhlIGdjYyBjb21waWxlciBoYXMgc3VwcG9ydCBmdW5jdGlvbnMgZm9yIHRoaXMuXQorICoKKyAqIEFsc28sIGZvciBlbWJlZGRlZCBzeXN0ZW1zIGl0J3MgYmVzdCB0byBiZW5jaG1hcmsgYnkgdXNpbmcgYQorICogQ1BVIGVtdWxhdG9yL3NpbXVsYXRvciBzb2Z0d2FyZSB0aGF0IGNhbiBleGFjdGx5IGNvdW50IGFsbAorICogdmlydHVhbCBjbG9jayB0aWNrcy4KKyAqLworCisjaWYgIWRlZmluZWQobHpvX3VjbG9ja19mbHVzaF9jcHVfY2FjaGUpCisjICBkZWZpbmUgbHpvX3VjbG9ja19mbHVzaF9jcHVfY2FjaGUoaCxmbGFncykgICgodm9pZCkoaCkpCisjZW5kaWYKKworI2VuZGlmCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2V4YW1wbGVzL3BvcnRhYl9hLmggYi9sem8tMi4wMy9leGFtcGxlcy9wb3J0YWJfYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1OGJhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9leGFtcGxlcy9wb3J0YWJfYS5oCkBAIC0wLDAgKzEsMTI4IEBACisvKiBwb3J0YWJfYS5oIC0tIGFkdmFuY2VkIHBvcnRhYmlsaXR5IGxheWVyCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB1c2UgdGhlIEFDQyBsaWJyYXJ5IGZvciB0aGUgaGFyZCB3b3JrCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX0hBVkVfQ09ORklHX0gpCisjICBkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2VuZGlmCisKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNFX0ggMQorI2lmIGRlZmluZWQoX19MWk9fTU1PREVMX0hVR0UpIHx8IGRlZmluZWQoV0FOVF9MWk9fVUNMT0NLKSB8fCBkZWZpbmVkKFdBTlRfTFpPX1dJTERBUkdWKQorIyAgZGVmaW5lIEFDQ19XQU5UX0FDQ19JTkNJX0ggMQorIyAgZGVmaW5lIEFDQ19XQU5UX0FDQ19MSUJfSCAxCisjZW5kaWYKKyNpbmNsdWRlICJzcmMvbWluaWFjYy5oIgorCisjaWYgZGVmaW5lZChXQU5UX0xaT19NQUxMT0MpCisjICBpZiBkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgICBkZWZpbmUgQUNDX1dBTlRfQUNDTElCX0hBTExPQyAxCisjICBlbHNlCisjICAgIGRlZmluZSBhY2NfaGFsbG9jKGEpICAgICAgICAgICAobWFsbG9jKGEpKQorIyAgICBkZWZpbmUgYWNjX2hmcmVlKGEpICAgICAgICAgICAgKGZyZWUoYSkpCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChXQU5UX0xaT19GUkVBRCkKKyMgIGlmIGRlZmluZWQoX19MWk9fTU1PREVMX0hVR0UpCisjICAgIGRlZmluZSBBQ0NfV0FOVF9BQ0NMSUJfSEZSRUFEIDEKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGFjY19oZnJlYWQoZixiLHMpICAgICAgIChmcmVhZChiLDEscyxmKSkKKyMgICAgZGVmaW5lIGFjY19oZndyaXRlKGYsYixzKSAgICAgIChmd3JpdGUoYiwxLHMsZikpCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChXQU5UX0xaT19VQ0xPQ0spCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDTElCX1BDTE9DSyAxCisjICBpZiAwICYmIChMWk9fQVJDSF9BTUQ2NCB8fCBMWk9fQVJDSF9JMzg2KQorIyAgICBkZWZpbmUgX19BQ0NMSUJfUENMT0NLX1VTRV9SRFRTQyAxCisjICAgIGRlZmluZSBBQ0NfV0FOVF9BQ0NMSUJfUkRUU0MgMQorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoV0FOVF9MWk9fV0lMREFSR1YpCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDTElCX1dJTERBUkdWIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BQ0NMSUJfUENMT0NLX1VTRV9QRVJGQ1RSKQorIyAgaW5jbHVkZSAic3JjL2Z1bGxhY2MuaCIKKyMgIGRlZmluZSBsem9fdWNsb2NrX2ZsdXNoX2NwdV9jYWNoZShoLGZsYWdzKSBhY2NfcGNsb2NrX2ZsdXNoX2NwdV9jYWNoZShoLGZsYWdzKQorI2Vsc2UKKyMgIGluY2x1ZGUgInNyYy9taW5pYWNjLmgiCisjZW5kaWYKKworI2lmIChfX0FDQ0xJQl9SRVFVSVJFX0hNRU1DUFlfQ0gpICYmICFkZWZpbmVkKF9fQUNDTElCX0hNRU1DUFlfQ0hfSU5DTFVERUQpCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDTElCX0hNRU1DUFkgMQorIyAgaW5jbHVkZSAic3JjL21pbmlhY2MuaCIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBmaW5hbGx5IHB1bGwgaW50byB0aGUgTFpPIG5hbWVzcGFjZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBsem9fbWFsbG9jCisjdW5kZWYgbHpvX2ZyZWUKKyN1bmRlZiBsem9fZnJlYWQKKyN1bmRlZiBsem9fZndyaXRlCisjaWYgZGVmaW5lZChXQU5UX0xaT19NQUxMT0MpCisjICBkZWZpbmUgbHpvX21hbGxvYyhhKSAgICAgICAgIGFjY19oYWxsb2MoYSkKKyMgIGRlZmluZSBsem9fZnJlZShhKSAgICAgICAgICAgYWNjX2hmcmVlKGEpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFdBTlRfTFpPX0ZSRUFEKQorIyAgZGVmaW5lIGx6b19mcmVhZChmLGIscykgICAgICBhY2NfaGZyZWFkKGYsYixzKQorIyAgZGVmaW5lIGx6b19md3JpdGUoZixiLHMpICAgICBhY2NfaGZ3cml0ZShmLGIscykKKyNlbmRpZgorI2lmIGRlZmluZWQoV0FOVF9MWk9fVUNMT0NLKQorIyAgZGVmaW5lIGx6b191Y2xvY2tfaGFuZGxlX3QgICBhY2NfcGNsb2NrX2hhbmRsZV90CisjICBkZWZpbmUgbHpvX3VjbG9ja190ICAgICAgICAgIGFjY19wY2xvY2tfdAorIyAgZGVmaW5lIGx6b191Y2xvY2tfb3BlbihhKSAgICBhY2NfcGNsb2NrX29wZW5fZGVmYXVsdChhKQorIyAgZGVmaW5lIGx6b191Y2xvY2tfY2xvc2UoYSkgICBhY2NfcGNsb2NrX2Nsb3NlKGEpCisjICBkZWZpbmUgbHpvX3VjbG9ja19yZWFkKGEsYikgIGFjY19wY2xvY2tfcmVhZChhLGIpCisjICBkZWZpbmUgbHpvX3VjbG9ja19nZXRfZWxhcHNlZChhLGIsYykgYWNjX3BjbG9ja19nZXRfZWxhcHNlZChhLGIsYykKKyNlbmRpZgorI2lmIGRlZmluZWQoV0FOVF9MWk9fV0lMREFSR1YpCisjICBkZWZpbmUgbHpvX3dpbGRhcmd2KGEsYikgICAgIGFjY193aWxkYXJndihhLGIpCisjZW5kaWYKKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvZXhhbXBsZXMvcHJlY29tcC5jIGIvbHpvLTIuMDMvZXhhbXBsZXMvcHJlY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwZjRlN2YKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9leGFtcGxlcy9wcmVjb21wLmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qIHByZWNvbXAuYyAtLSBleGFtcGxlIHByb2dyYW06IGhvdyB0byBnZW5lcmF0ZSBwcmUtY29tcHJlc3NlZCBkYXRhCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBUaGlzIHByb2dyYW0gc2hvd3MgaG93IHRvIGdlbmVyYXRlIHByZS1jb21wcmVzc2VkIGRhdGEuCisvLworLy8gUGxlYXNlIHN0dWR5IExaTy5GQVEgYW5kIHNpbXBsZS5jIGZpcnN0LgorLy8KKy8vIFdlIHdpbGwgYmUgdHJ5aW5nIGJvdGggTFpPMVgtOTk5IGFuZCBMWk8xWS05OTkgYW5kIGNob29zZQorLy8gdGhlIGFsZ29yaXRobSB0aGF0IGFjaGlldmVzIHRoZSBiZXN0IGNvbXByZXNzaW9uIHJhdGlvLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJsem8vbHpvY29uZi5oIgorI2luY2x1ZGUgImx6by9sem8xeC5oIgorI2luY2x1ZGUgImx6by9sem8xeS5oIgorCisjZGVmaW5lIFVTRV9MWk8xWCAxCisjZGVmaW5lIFVTRV9MWk8xWSAxCisKKyNkZWZpbmUgUEFSQU5PSUQgMQorCisKKy8qIHBvcnRhYmlsaXR5IGxheWVyICovCisjZGVmaW5lIFdBTlRfTFpPX01BTExPQyAxCisjZGVmaW5lIFdBTlRfTFpPX0ZSRUFEIDEKKyNkZWZpbmUgV0FOVF9MWk9fV0lMREFSR1YgMQorI2luY2x1ZGUgImV4YW1wbGVzL3BvcnRhYi5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBfX2x6b19jZGVjbF9tYWluIG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgcjsKKworICAgIGx6b19ieXRlcCBpbjsKKyAgICBsem9fdWludCBpbl9sZW47CisKKyAgICBsem9fYnl0ZXAgb3V0OworICAgIGx6b191aW50IG91dF9idWZzaXplOworICAgIGx6b191aW50IG91dF9sZW4gPSAwOworCisgICAgbHpvX2J5dGVwIHdya21lbTsKKyAgICBsem9fdWludCB3cmtfbGVuOworCisgICAgbHpvX3VpbnQgYmVzdF9sZW47CisgICAgaW50IGJlc3RfY29tcHJlc3MgPSAtMTsKKworICAgIGx6b191aW50IG9yaWdfbGVuOworICAgIGx6b191aW50MzIgdW5jb21wcmVzc2VkX2NoZWNrc3VtOworICAgIGx6b191aW50MzIgY29tcHJlc3NlZF9jaGVja3N1bTsKKworICAgIEZJTEUgKmY7CisgICAgY29uc3QgY2hhciAqcHJvZ25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmluX25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm91dF9uYW1lID0gTlVMTDsKKyAgICBsb25nIGw7CisKKworICAgIGx6b193aWxkYXJndigmYXJnYywgJmFyZ3YpOworCisgICAgcHJpbnRmKCJcbkxaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICh2JXMsICVzKS5cbiIsCisgICAgICAgICAgIGx6b192ZXJzaW9uX3N0cmluZygpLCBsem9fdmVyc2lvbl9kYXRlKCkpOworICAgIHByaW50ZigiQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuIik7CisKKyAgICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgICAgaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJ1c2FnZTogJXMgZmlsZSBbb3V0cHV0LWZpbGVdXG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGluX25hbWUgPSBhcmd2WzFdOworICAgIGlmIChhcmdjID4gMikgb3V0X25hbWUgPSBhcmd2WzJdOworCisvKgorICogU3RlcCAxOiBpbml0aWFsaXplIHRoZSBMWk8gbGlicmFyeQorICovCisgICAgaWYgKGx6b19pbml0KCkgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gbHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcHJpbnRmKCIodGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNvbXBpbGVyIGJ1ZyAtIHRyeSByZWNvbXBpbGluZ1xud2l0aG91dCBvcHRpbWl6YXRpb25zLCBhbmQgZW5hYmxlIGAtRExaT19ERUJVRycgZm9yIGRpYWdub3N0aWNzKVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAyOiBhbGxvY2F0ZSB0aGUgd29yay1tZW1vcnkKKyAqLworICAgIHdya19sZW4gPSAxOworI2lmZGVmIFVTRV9MWk8xWAorICAgIGlmICh3cmtfbGVuIDwgTFpPMVhfOTk5X01FTV9DT01QUkVTUykKKyAgICAgICAgd3JrX2xlbiA9IExaTzFYXzk5OV9NRU1fQ09NUFJFU1M7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFpPMVkKKyAgICBpZiAod3JrX2xlbiA8IExaTzFZXzk5OV9NRU1fQ09NUFJFU1MpCisgICAgICAgIHdya19sZW4gPSBMWk8xWV85OTlfTUVNX0NPTVBSRVNTOworI2VuZGlmCisgICAgd3JrbWVtID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyh3cmtfbGVuKTsKKyAgICBpZiAod3JrbWVtID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAzOiBvcGVuIHRoZSBpbnB1dCBmaWxlCisgKi8KKyAgICBmID0gZm9wZW4oaW5fbmFtZSwicmIiKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogY2Fubm90IG9wZW4gZmlsZSAlc1xuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBmc2VlayhmLDAsU0VFS19FTkQpOworICAgIGwgPSBmdGVsbChmKTsKKyAgICBmc2VlayhmLDAsU0VFS19TRVQpOworICAgIGlmIChsIDw9IDApCisgICAgeworICAgICAgICBwcmludGYoIiVzOiAlczogZW1wdHkgZmlsZVxuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGluX2xlbiA9IChsem9fdWludCkgbDsKKyAgICBvdXRfYnVmc2l6ZSA9IGluX2xlbiArIGluX2xlbiAvIDE2ICsgNjQgKyAzOworICAgIGJlc3RfbGVuID0gaW5fbGVuOworCisvKgorICogU3RlcCA0OiBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXJzIGFuZCByZWFkIHRoZSBmaWxlCisgKi8KKyAgICBpbiA9IChsem9fYnl0ZXApIGx6b19tYWxsb2MoaW5fbGVuKTsKKyAgICBvdXQgPSAobHpvX2J5dGVwKSBsem9fbWFsbG9jKG91dF9idWZzaXplKTsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCBvdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgaW5fbGVuID0gKGx6b191aW50KSBsem9fZnJlYWQoZixpbixpbl9sZW4pOworICAgIHByaW50ZigiJXM6IGxvYWRlZCBmaWxlICVzOiAlbGQgYnl0ZXNcbiIsIHByb2duYW1lLCBpbl9uYW1lLCAobG9uZykgaW5fbGVuKTsKKyAgICBmY2xvc2UoZik7CisKKy8qCisgKiBTdGVwIDU6IGNvbXB1dGUgYSBjaGVja3N1bSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKKyAqLworICAgIHVuY29tcHJlc3NlZF9jaGVja3N1bSA9IGx6b19hZGxlcjMyKDAsTlVMTCwwKTsKKyAgICB1bmNvbXByZXNzZWRfY2hlY2tzdW0gPSBsem9fYWRsZXIzMih1bmNvbXByZXNzZWRfY2hlY2tzdW0saW4saW5fbGVuKTsKKworLyoKKyAqIFN0ZXAgNmE6IGNvbXByZXNzIGZyb20gYGluJyB0byBgb3V0JyB3aXRoIExaTzFYLTk5OQorICovCisjaWZkZWYgVVNFX0xaTzFYCisgICAgICAgIG91dF9sZW4gPSBvdXRfYnVmc2l6ZTsKKyAgICAgICAgciA9IGx6bzF4Xzk5OV9jb21wcmVzcyhpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSk7CisgICAgICAgIGlmIChyICE9IExaT19FX09LKQorICAgICAgICB7CisgICAgICAgICAgICAvKiB0aGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KKyAgICAgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBjb21wcmVzc2lvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgcHJpbnRmKCJMWk8xWC05OTk6ICU4bHUgLT4gJThsdVxuIiwgKHVuc2lnbmVkIGxvbmcpIGluX2xlbiwgKHVuc2lnbmVkIGxvbmcpIG91dF9sZW4pOworICAgICAgICBpZiAob3V0X2xlbiA8IGJlc3RfbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBiZXN0X2xlbiA9IG91dF9sZW47CisgICAgICAgICAgICBiZXN0X2NvbXByZXNzID0gMTsgICAgICAvKiBMWk8xWC05OTkgKi8KKyAgICAgICAgfQorI2VuZGlmIC8qIFVTRV9MWk8xWCAqLworCisvKgorICogU3RlcCA2YjogY29tcHJlc3MgZnJvbSBgaW4nIHRvIGBvdXQnIHdpdGggTFpPMVktOTk5CisgKi8KKyNpZmRlZiBVU0VfTFpPMVkKKyAgICAgICAgb3V0X2xlbiA9IG91dF9idWZzaXplOworICAgICAgICByID0gbHpvMXlfOTk5X2NvbXByZXNzKGluLGluX2xlbixvdXQsJm91dF9sZW4sd3JrbWVtKTsKKyAgICAgICAgaWYgKHIgIT0gTFpPX0VfT0spCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIGNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBwcmludGYoIkxaTzFZLTk5OTogJThsdSAtPiAlOGx1XG4iLCAodW5zaWduZWQgbG9uZykgaW5fbGVuLCAodW5zaWduZWQgbG9uZykgb3V0X2xlbik7CisgICAgICAgIGlmIChvdXRfbGVuIDwgYmVzdF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfbGVuID0gb3V0X2xlbjsKKyAgICAgICAgICAgIGJlc3RfY29tcHJlc3MgPSAyOyAgICAgIC8qIExaTzFZLTk5OSAqLworICAgICAgICB9CisjZW5kaWYgLyogVVNFX0xaTzFZICovCisKKy8qCisgKiBTdGVwIDc6IGNoZWNrIGlmIGNvbXByZXNzaWJsZQorICovCisgICAgaWYgKGJlc3RfbGVuID49IGluX2xlbikKKyAgICB7CisgICAgICAgIHByaW50ZigiVGhpcyBmaWxlIGNvbnRhaW5zIGluY29tcHJlc3NpYmxlIGRhdGEuXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisvKgorICogU3RlcCA4OiBjb21wcmVzcyBkYXRhIGFnYWluIHVzaW5nIHRoZSBiZXN0IGNvbXByZXNzb3IgZm91bmQKKyAqLworICAgIG91dF9sZW4gPSBvdXRfYnVmc2l6ZTsKKyAgICBpZiAoYmVzdF9jb21wcmVzcyA9PSAxKQorICAgICAgICByID0gbHpvMXhfOTk5X2NvbXByZXNzKGluLGluX2xlbixvdXQsJm91dF9sZW4sd3JrbWVtKTsKKyAgICBlbHNlIGlmIChiZXN0X2NvbXByZXNzID09IDIpCisgICAgICAgIHIgPSBsem8xeV85OTlfY29tcHJlc3MoaW4saW5fbGVuLG91dCwmb3V0X2xlbix3cmttZW0pOworICAgIGVsc2UKKyAgICAgICAgciA9IC0xMDA7CisgICAgYXNzZXJ0KHIgPT0gTFpPX0VfT0spOworICAgIGFzc2VydChvdXRfbGVuID09IGJlc3RfbGVuKTsKKworLyoKKyAqIFN0ZXAgOTogb3B0aW1pemUgY29tcHJlc3NlZCBkYXRhIChjb21wcmVzc2VkIGRhdGEgaXMgaW4gYG91dCcgYnVmZmVyKQorICovCisjaWYgMQorICAgIC8qIE9wdGltaXphdGlvbiBkb2VzIG5vdCByZXF1aXJlIGFueSBkYXRhIGluIHRoZSBidWZmZXIgdGhhdCB3aWxsCisgICAgICogaG9sZCB0aGUgdW5jb21wcmVzc2VkIGRhdGEuIFRvIHByb3ZlIHRoaXMsIHdlIGNsZWFyIHRoZSBidWZmZXIuCisgICAgICovCisgICAgbHpvX21lbXNldChpbiwwLGluX2xlbik7CisjZW5kaWYKKworICAgIG9yaWdfbGVuID0gaW5fbGVuOworICAgIHIgPSAtMTAwOworI2lmZGVmIFVTRV9MWk8xWAorICAgIGlmIChiZXN0X2NvbXByZXNzID09IDEpCisgICAgICAgIHIgPSBsem8xeF9vcHRpbWl6ZShvdXQsb3V0X2xlbixpbiwmb3JpZ19sZW4sTlVMTCk7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFpPMVkKKyAgICBpZiAoYmVzdF9jb21wcmVzcyA9PSAyKQorICAgICAgICByID0gbHpvMXlfb3B0aW1pemUob3V0LG91dF9sZW4saW4sJm9yaWdfbGVuLE5VTEwpOworI2VuZGlmCisgICAgaWYgKHIgIT0gTFpPX0VfT0sgfHwgb3JpZ19sZW4gIT0gaW5fbGVuKQorICAgIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBvcHRpbWl6YXRpb24gZmFpbGVkOiAlZFxuIiwgcik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAxMDogY29tcHV0ZSBhIGNoZWNrc3VtIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEKKyAqLworICAgIGNvbXByZXNzZWRfY2hlY2tzdW0gPSBsem9fYWRsZXIzMigwLE5VTEwsMCk7CisgICAgY29tcHJlc3NlZF9jaGVja3N1bSA9IGx6b19hZGxlcjMyKGNvbXByZXNzZWRfY2hlY2tzdW0sb3V0LG91dF9sZW4pOworCisvKgorICogU3RlcCAxMTogd3JpdGUgY29tcHJlc3NlZCBkYXRhIHRvIGEgZmlsZQorICovCisgICAgcHJpbnRmKCIlczogJXM6ICVsZCAtPiAlbGQsIGNoZWNrc3VtIDB4JTA4bHggMHglMDhseFxuIiwKKyAgICAgICAgICAgIHByb2duYW1lLCBpbl9uYW1lLCAobG9uZykgaW5fbGVuLCAobG9uZykgb3V0X2xlbiwKKyAgICAgICAgICAgIChsb25nKSB1bmNvbXByZXNzZWRfY2hlY2tzdW0sIChsb25nKSBjb21wcmVzc2VkX2NoZWNrc3VtKTsKKworICAgIGlmIChvdXRfbmFtZSAmJiBvdXRfbmFtZVswXSkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IHdyaXRpbmcgdG8gZmlsZSAlc1xuIiwgcHJvZ25hbWUsIG91dF9uYW1lKTsKKyAgICAgICAgZiA9IGZvcGVuKG91dF9uYW1lLCJ3YiIpOworICAgICAgICBpZiAoZiA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiVzOiBjYW5ub3Qgb3BlbiBvdXRwdXQgZmlsZSAlc1xuIiwgcHJvZ25hbWUsIG91dF9uYW1lKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGx6b19md3JpdGUoZixvdXQsb3V0X2xlbikgIT0gb3V0X2xlbiB8fCBmY2xvc2UoZikgIT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIlczogd3JpdGUgZXJyb3IgISFcbiIsIHByb2duYW1lKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9CisKKy8qCisgKiBTdGVwIDEyOiB2ZXJpZnkgZGVjb21wcmVzc2lvbgorICovCisjaWZkZWYgUEFSQU5PSUQKKyAgICBsem9fbWVtc2V0KGluLDAsaW5fbGVuKTsgICAgLyogcGFyYW5vaWEgLSBjbGVhciBvdXRwdXQgYnVmZmVyICovCisgICAgb3JpZ19sZW4gPSBpbl9sZW47CisgICAgciA9IC0xMDA7CisjaWZkZWYgVVNFX0xaTzFYCisgICAgaWYgKGJlc3RfY29tcHJlc3MgPT0gMSkKKyAgICAgICAgciA9IGx6bzF4X2RlY29tcHJlc3Nfc2FmZShvdXQsb3V0X2xlbixpbiwmb3JpZ19sZW4sTlVMTCk7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFpPMVkKKyAgICBpZiAoYmVzdF9jb21wcmVzcyA9PSAyKQorICAgICAgICByID0gbHpvMXlfZGVjb21wcmVzc19zYWZlKG91dCxvdXRfbGVuLGluLCZvcmlnX2xlbixOVUxMKTsKKyNlbmRpZgorICAgIGlmIChyICE9IExaT19FX09LIHx8IG9yaWdfbGVuICE9IGluX2xlbikKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gZGVjb21wcmVzc2lvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgaWYgKHVuY29tcHJlc3NlZF9jaGVja3N1bSAhPSBsem9fYWRsZXIzMihsem9fYWRsZXIzMigwLE5VTEwsMCksaW4saW5fbGVuKSkKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gZGVjb21wcmVzc2lvbiBkYXRhIGVycm9yXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgLyogTm93IHlvdSBjb3VsZCBhbHNvIHZlcmlmeSBkZWNvbXByZXNzaW9uIHVuZGVyIHNpbWlsYXIgY29uZGl0aW9ucyBhcyBpbgorICAgICAqIHlvdXIgYXBwbGljYXRpb24sIGUuZy4gb3ZlcmxhcHBpbmcgYXNzZW1ibGVyIGRlY29tcHJlc3Npb24gZXRjLgorICAgICAqLworI2VuZGlmCisKKyAgICBsem9fZnJlZShpbik7CisgICAgbHpvX2ZyZWUob3V0KTsKKyAgICBsem9fZnJlZSh3cmttZW0pOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9leGFtcGxlcy9wcmVjb21wMi5jIGIvbHpvLTIuMDMvZXhhbXBsZXMvcHJlY29tcDIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGIwNjZhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvZXhhbXBsZXMvcHJlY29tcDIuYwpAQCAtMCwwICsxLDM5NyBAQAorLyogcHJlY29tcDIuYyAtLSBleGFtcGxlIHByb2dyYW06IGhvdyB0byBnZW5lcmF0ZSBwcmUtY29tcHJlc3NlZCBkYXRhCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBUaGlzIHByb2dyYW0gc2hvd3MgaG93IHRvIGdlbmVyYXRlIHByZS1jb21wcmVzc2VkIGRhdGEuCisvLworLy8gUGxlYXNlIHN0dWR5IHByZWNvbXAuYyBmaXJzdC4KKy8vCisvLyBXZSB3aWxsIGJlIHRyeWluZyBMWk8xWC05OTkgYW5kIExaTzFZLTk5OSwgYW5kIHdlIHdpbGwgYmUgdHJ5aW5nCisvLyB2YXJpb3VzIHBhcmFtZXRlcnMgdXNpbmcgdGhlIGludGVybmFsIGludGVyZmFjZSB0byBzcXVlZXplIG91dAorLy8gYSBsaXR0bGUgYml0IG9mIGV4dHJhIGNvbXByZXNzaW9uLgorLy8KKy8vIE5PVEU6IHRoaXMgcHJvZ3JhbSBjYW4gYmUgcXVpdGUgc2xvdyBmb3IgaGlnaGx5IHJlZHVuZGFudCBmaWxlcworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJsem8vbHpvY29uZi5oIgorI2luY2x1ZGUgImx6by9sem8xeC5oIgorI2luY2x1ZGUgImx6by9sem8xeS5oIgorCitMWk9fRVhURVJOKGludCkKK2x6bzF4Xzk5OV9jb21wcmVzc19pbnRlcm5hbCAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY2FsbGJhY2tfcCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cnlfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IGdvb2RfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgbWF4X2xhenksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBuaWNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG1heF9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50MzIgZmxhZ3MgKTsKKworTFpPX0VYVEVSTihpbnQpCitsem8xeV85OTlfY29tcHJlc3NfaW50ZXJuYWwgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHJ5X2xhenksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBnb29kX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG1heF9sYXp5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgbmljZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludDMyIGZsYWdzICk7CisKKyNkZWZpbmUgVVNFX0xaTzFYIDEKKyNkZWZpbmUgVVNFX0xaTzFZIDEKKworI2RlZmluZSBQQVJBTk9JRCAxCisKKworLyogcG9ydGFiaWxpdHkgbGF5ZXIgKi8KKyNkZWZpbmUgV0FOVF9MWk9fTUFMTE9DIDEKKyNkZWZpbmUgV0FOVF9MWk9fRlJFQUQgMQorI2RlZmluZSBXQU5UX0xaT19XSUxEQVJHViAxCisjaW5jbHVkZSAiZXhhbXBsZXMvcG9ydGFiLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9fbHpvX2NkZWNsX21haW4gbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGludCByOworICAgIGludCBsYXp5OworICAgIGNvbnN0IGludCBtYXhfdHJ5X2xhenkgPSA1OworICAgIGNvbnN0IGx6b191aW50IGJpZyA9IDY1NTM2TDsgICAgLyogY2FuIHJlc3VsdCBpbiB2ZXJ5IHNsb3cgY29tcHJlc3Npb24gKi8KKyAgICBjb25zdCBsem9fdWludDMyIGZsYWdzID0gMHgxOworCisgICAgbHpvX2J5dGVwIGluOworICAgIGx6b191aW50IGluX2xlbjsKKworICAgIGx6b19ieXRlcCBvdXQ7CisgICAgbHpvX3VpbnQgb3V0X2J1ZnNpemU7CisgICAgbHpvX3VpbnQgb3V0X2xlbiA9IDA7CisKKyAgICBsem9fYnl0ZXAgd3JrbWVtOworICAgIGx6b191aW50IHdya19sZW47CisKKyAgICBsem9fdWludCBiZXN0X2xlbjsKKyAgICBpbnQgYmVzdF9jb21wcmVzcyA9IC0xOworICAgIGludCBiZXN0X2xhenkgPSAtMTsKKworICAgIGx6b191aW50IG9yaWdfbGVuOworICAgIGx6b191aW50MzIgdW5jb21wcmVzc2VkX2NoZWNrc3VtOworICAgIGx6b191aW50MzIgY29tcHJlc3NlZF9jaGVja3N1bTsKKworICAgIEZJTEUgKmY7CisgICAgY29uc3QgY2hhciAqcHJvZ25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKmluX25hbWUgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKm91dF9uYW1lID0gTlVMTDsKKyAgICBsb25nIGw7CisKKworICAgIGx6b193aWxkYXJndigmYXJnYywgJmFyZ3YpOworCisgICAgcHJpbnRmKCJcbkxaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICh2JXMsICVzKS5cbiIsCisgICAgICAgICAgIGx6b192ZXJzaW9uX3N0cmluZygpLCBsem9fdmVyc2lvbl9kYXRlKCkpOworICAgIHByaW50ZigiQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuIik7CisKKyAgICBwcm9nbmFtZSA9IGFyZ3ZbMF07CisgICAgaWYgKGFyZ2MgPCAyIHx8IGFyZ2MgPiAzKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJ1c2FnZTogJXMgZmlsZSBbb3V0cHV0LWZpbGVdXG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGluX25hbWUgPSBhcmd2WzFdOworICAgIGlmIChhcmdjID4gMikgb3V0X25hbWUgPSBhcmd2WzJdOworCisvKgorICogU3RlcCAxOiBpbml0aWFsaXplIHRoZSBMWk8gbGlicmFyeQorICovCisgICAgaWYgKGx6b19pbml0KCkgIT0gTFpPX0VfT0spCisgICAgeworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gbHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcHJpbnRmKCIodGhpcyB1c3VhbGx5IGluZGljYXRlcyBhIGNvbXBpbGVyIGJ1ZyAtIHRyeSByZWNvbXBpbGluZ1xud2l0aG91dCBvcHRpbWl6YXRpb25zLCBhbmQgZW5hYmxlIGAtRExaT19ERUJVRycgZm9yIGRpYWdub3N0aWNzKVxuIik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAyOiBhbGxvY2F0ZSB0aGUgd29yay1tZW1vcnkKKyAqLworICAgIHdya19sZW4gPSAxOworI2lmZGVmIFVTRV9MWk8xWAorICAgIGlmICh3cmtfbGVuIDwgTFpPMVhfOTk5X01FTV9DT01QUkVTUykKKyAgICAgICAgd3JrX2xlbiA9IExaTzFYXzk5OV9NRU1fQ09NUFJFU1M7CisjZW5kaWYKKyNpZmRlZiBVU0VfTFpPMVkKKyAgICBpZiAod3JrX2xlbiA8IExaTzFZXzk5OV9NRU1fQ09NUFJFU1MpCisgICAgICAgIHdya19sZW4gPSBMWk8xWV85OTlfTUVNX0NPTVBSRVNTOworI2VuZGlmCisgICAgd3JrbWVtID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyh3cmtfbGVuKTsKKyAgICBpZiAod3JrbWVtID09IE5VTEwpCisgICAgeworICAgICAgICBwcmludGYoIiVzOiBvdXQgb2YgbWVtb3J5XG4iLCBwcm9nbmFtZSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisvKgorICogU3RlcCAzOiBvcGVuIHRoZSBpbnB1dCBmaWxlCisgKi8KKyAgICBmID0gZm9wZW4oaW5fbmFtZSwicmIiKTsKKyAgICBpZiAoZiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogY2Fubm90IG9wZW4gZmlsZSAlc1xuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBmc2VlayhmLDAsU0VFS19FTkQpOworICAgIGwgPSBmdGVsbChmKTsKKyAgICBmc2VlayhmLDAsU0VFS19TRVQpOworICAgIGlmIChsIDw9IDApCisgICAgeworICAgICAgICBwcmludGYoIiVzOiAlczogZW1wdHkgZmlsZVxuIiwgcHJvZ25hbWUsIGluX25hbWUpOworICAgICAgICBmY2xvc2UoZik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAgIGluX2xlbiA9IChsem9fdWludCkgbDsKKyAgICBvdXRfYnVmc2l6ZSA9IGluX2xlbiArIGluX2xlbiAvIDE2ICsgNjQgKyAzOworICAgIGJlc3RfbGVuID0gaW5fbGVuOworCisvKgorICogU3RlcCA0OiBhbGxvY2F0ZSBjb21wcmVzc2lvbiBidWZmZXJzIGFuZCByZWFkIHRoZSBmaWxlCisgKi8KKyAgICBpbiA9IChsem9fYnl0ZXApIGx6b19tYWxsb2MoaW5fbGVuKTsKKyAgICBvdXQgPSAobHpvX2J5dGVwKSBsem9fbWFsbG9jKG91dF9idWZzaXplKTsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCBvdXQgPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IG91dCBvZiBtZW1vcnlcbiIsIHByb2duYW1lKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgaW5fbGVuID0gKGx6b191aW50KSBsem9fZnJlYWQoZixpbixpbl9sZW4pOworICAgIHByaW50ZigiJXM6IGxvYWRlZCBmaWxlICVzOiAlbGQgYnl0ZXNcbiIsIHByb2duYW1lLCBpbl9uYW1lLCAobG9uZykgaW5fbGVuKTsKKyAgICBmY2xvc2UoZik7CisKKy8qCisgKiBTdGVwIDU6IGNvbXB1dGUgYSBjaGVja3N1bSBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKKyAqLworICAgIHVuY29tcHJlc3NlZF9jaGVja3N1bSA9IGx6b19hZGxlcjMyKDAsTlVMTCwwKTsKKyAgICB1bmNvbXByZXNzZWRfY2hlY2tzdW0gPSBsem9fYWRsZXIzMih1bmNvbXByZXNzZWRfY2hlY2tzdW0saW4saW5fbGVuKTsKKworLyoKKyAqIFN0ZXAgNmE6IGNvbXByZXNzIGZyb20gYGluJyB0byBgb3V0JyB3aXRoIExaTzFYLTk5OQorICovCisjaWZkZWYgVVNFX0xaTzFYCisgICAgZm9yIChsYXp5ID0gMDsgbGF6eSA8PSBtYXhfdHJ5X2xhenk7IGxhenkrKykKKyAgICB7CisgICAgICAgIG91dF9sZW4gPSBvdXRfYnVmc2l6ZTsKKyAgICAgICAgciA9IGx6bzF4Xzk5OV9jb21wcmVzc19pbnRlcm5hbChpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenksIGJpZywgYmlnLCBiaWcsIGJpZywgZmxhZ3MpOworICAgICAgICBpZiAociAhPSBMWk9fRV9PSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gY29tcHJlc3Npb24gZmFpbGVkOiAlZFxuIiwgcik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiTFpPMVgtOTk5OiBsYXp5ID0lMmQ6ICU4bHUgLT4gJThsdVxuIiwKKyAgICAgICAgICAgICAgICBsYXp5LCAodW5zaWduZWQgbG9uZykgaW5fbGVuLCAodW5zaWduZWQgbG9uZykgb3V0X2xlbik7CisgICAgICAgIGlmIChvdXRfbGVuIDwgYmVzdF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfbGVuID0gb3V0X2xlbjsKKyAgICAgICAgICAgIGJlc3RfbGF6eSA9IGxhenk7CisgICAgICAgICAgICBiZXN0X2NvbXByZXNzID0gMTsgICAgICAvKiBMWk8xWC05OTkgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfTFpPMVggKi8KKworLyoKKyAqIFN0ZXAgNmI6IGNvbXByZXNzIGZyb20gYGluJyB0byBgb3V0JyB3aXRoIExaTzFZLTk5OQorICovCisjaWZkZWYgVVNFX0xaTzFZCisgICAgZm9yIChsYXp5ID0gMDsgbGF6eSA8PSBtYXhfdHJ5X2xhenk7IGxhenkrKykKKyAgICB7CisgICAgICAgIG91dF9sZW4gPSBvdXRfYnVmc2l6ZTsKKyAgICAgICAgciA9IGx6bzF5Xzk5OV9jb21wcmVzc19pbnRlcm5hbChpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhenksIGJpZywgYmlnLCBiaWcsIGJpZywgZmxhZ3MpOworICAgICAgICBpZiAociAhPSBMWk9fRV9PSykKKyAgICAgICAgeworICAgICAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gY29tcHJlc3Npb24gZmFpbGVkOiAlZFxuIiwgcik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiTFpPMVktOTk5OiBsYXp5ID0lMmQ6ICU4bHUgLT4gJThsdVxuIiwKKyAgICAgICAgICAgICAgICBsYXp5LCAodW5zaWduZWQgbG9uZykgaW5fbGVuLCAodW5zaWduZWQgbG9uZykgb3V0X2xlbik7CisgICAgICAgIGlmIChvdXRfbGVuIDwgYmVzdF9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGJlc3RfbGVuID0gb3V0X2xlbjsKKyAgICAgICAgICAgIGJlc3RfbGF6eSA9IGxhenk7CisgICAgICAgICAgICBiZXN0X2NvbXByZXNzID0gMjsgICAgICAvKiBMWk8xWS05OTkgKi8KKyAgICAgICAgfQorICAgIH0KKyNlbmRpZiAvKiBVU0VfTFpPMVkgKi8KKworLyoKKyAqIFN0ZXAgNzogY2hlY2sgaWYgY29tcHJlc3NpYmxlCisgKi8KKyAgICBpZiAoYmVzdF9sZW4gPj0gaW5fbGVuKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJUaGlzIGZpbGUgY29udGFpbnMgaW5jb21wcmVzc2libGUgZGF0YS5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKy8qCisgKiBTdGVwIDg6IGNvbXByZXNzIGRhdGEgYWdhaW4gdXNpbmcgdGhlIGJlc3QgY29tcHJlc3NvciBmb3VuZAorICovCisgICAgb3V0X2xlbiA9IG91dF9idWZzaXplOworICAgIGlmIChiZXN0X2NvbXByZXNzID09IDEpCisgICAgICAgIHIgPSBsem8xeF85OTlfY29tcHJlc3NfaW50ZXJuYWwoaW4saW5fbGVuLG91dCwmb3V0X2xlbix3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZXN0X2xhenksIGJpZywgYmlnLCBiaWcsIGJpZywgZmxhZ3MpOworICAgIGVsc2UgaWYgKGJlc3RfY29tcHJlc3MgPT0gMikKKyAgICAgICAgciA9IGx6bzF5Xzk5OV9jb21wcmVzc19pbnRlcm5hbChpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlc3RfbGF6eSwgYmlnLCBiaWcsIGJpZywgYmlnLCBmbGFncyk7CisgICAgZWxzZQorICAgICAgICByID0gLTEwMDsKKyAgICBhc3NlcnQociA9PSBMWk9fRV9PSyk7CisgICAgYXNzZXJ0KG91dF9sZW4gPT0gYmVzdF9sZW4pOworCisvKgorICogU3RlcCA5OiBvcHRpbWl6ZSBjb21wcmVzc2VkIGRhdGEgKGNvbXByZXNzZWQgZGF0YSBpcyBpbiBgb3V0JyBidWZmZXIpCisgKi8KKyNpZiAxCisgICAgLyogT3B0aW1pemF0aW9uIGRvZXMgbm90IHJlcXVpcmUgYW55IGRhdGEgaW4gdGhlIGJ1ZmZlciB0aGF0IHdpbGwKKyAgICAgKiBob2xkIHRoZSB1bmNvbXByZXNzZWQgZGF0YS4gVG8gcHJvdmUgdGhpcywgd2UgY2xlYXIgdGhlIGJ1ZmZlci4KKyAgICAgKi8KKyAgICBsem9fbWVtc2V0KGluLDAsaW5fbGVuKTsKKyNlbmRpZgorCisgICAgb3JpZ19sZW4gPSBpbl9sZW47CisgICAgciA9IC0xMDA7CisjaWZkZWYgVVNFX0xaTzFYCisgICAgaWYgKGJlc3RfY29tcHJlc3MgPT0gMSkKKyAgICAgICAgciA9IGx6bzF4X29wdGltaXplKG91dCxvdXRfbGVuLGluLCZvcmlnX2xlbixOVUxMKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9MWk8xWQorICAgIGlmIChiZXN0X2NvbXByZXNzID09IDIpCisgICAgICAgIHIgPSBsem8xeV9vcHRpbWl6ZShvdXQsb3V0X2xlbixpbiwmb3JpZ19sZW4sTlVMTCk7CisjZW5kaWYKKyAgICBpZiAociAhPSBMWk9fRV9PSyB8fCBvcmlnX2xlbiAhPSBpbl9sZW4pCisgICAgeworICAgICAgICAvKiB0aGlzIHNob3VsZCBORVZFUiBoYXBwZW4gKi8KKyAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIG9wdGltaXphdGlvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKy8qCisgKiBTdGVwIDEwOiBjb21wdXRlIGEgY2hlY2tzdW0gb2YgdGhlIGNvbXByZXNzZWQgZGF0YQorICovCisgICAgY29tcHJlc3NlZF9jaGVja3N1bSA9IGx6b19hZGxlcjMyKDAsTlVMTCwwKTsKKyAgICBjb21wcmVzc2VkX2NoZWNrc3VtID0gbHpvX2FkbGVyMzIoY29tcHJlc3NlZF9jaGVja3N1bSxvdXQsb3V0X2xlbik7CisKKy8qCisgKiBTdGVwIDExOiB3cml0ZSBjb21wcmVzc2VkIGRhdGEgdG8gYSBmaWxlCisgKi8KKyAgICBwcmludGYoIiVzOiAlczogJWxkIC0+ICVsZCwgY2hlY2tzdW0gMHglMDhseCAweCUwOGx4XG4iLAorICAgICAgICAgICAgcHJvZ25hbWUsIGluX25hbWUsIChsb25nKSBpbl9sZW4sIChsb25nKSBvdXRfbGVuLAorICAgICAgICAgICAgKGxvbmcpIHVuY29tcHJlc3NlZF9jaGVja3N1bSwgKGxvbmcpIGNvbXByZXNzZWRfY2hlY2tzdW0pOworCisgICAgaWYgKG91dF9uYW1lICYmIG91dF9uYW1lWzBdKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCIlczogd3JpdGluZyB0byBmaWxlICVzXG4iLCBwcm9nbmFtZSwgb3V0X25hbWUpOworICAgICAgICBmID0gZm9wZW4ob3V0X25hbWUsIndiIik7CisgICAgICAgIGlmIChmID09IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGNhbm5vdCBvcGVuIG91dHB1dCBmaWxlICVzXG4iLCBwcm9nbmFtZSwgb3V0X25hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAobHpvX2Z3cml0ZShmLG91dCxvdXRfbGVuKSAhPSBvdXRfbGVuIHx8IGZjbG9zZShmKSAhPSAwKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoIiVzOiB3cml0ZSBlcnJvciAhIVxuIiwgcHJvZ25hbWUpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KKworLyoKKyAqIFN0ZXAgMTI6IHZlcmlmeSBkZWNvbXByZXNzaW9uCisgKi8KKyNpZmRlZiBQQVJBTk9JRAorICAgIGx6b19tZW1zZXQoaW4sMCxpbl9sZW4pOyAgICAvKiBwYXJhbm9pYSAtIGNsZWFyIG91dHB1dCBidWZmZXIgKi8KKyAgICBvcmlnX2xlbiA9IGluX2xlbjsKKyAgICByID0gLTEwMDsKKyNpZmRlZiBVU0VfTFpPMVgKKyAgICBpZiAoYmVzdF9jb21wcmVzcyA9PSAxKQorICAgICAgICByID0gbHpvMXhfZGVjb21wcmVzc19zYWZlKG91dCxvdXRfbGVuLGluLCZvcmlnX2xlbixOVUxMKTsKKyNlbmRpZgorI2lmZGVmIFVTRV9MWk8xWQorICAgIGlmIChiZXN0X2NvbXByZXNzID09IDIpCisgICAgICAgIHIgPSBsem8xeV9kZWNvbXByZXNzX3NhZmUob3V0LG91dF9sZW4saW4sJm9yaWdfbGVuLE5VTEwpOworI2VuZGlmCisgICAgaWYgKHIgIT0gTFpPX0VfT0sgfHwgb3JpZ19sZW4gIT0gaW5fbGVuKQorICAgIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBkZWNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBpZiAodW5jb21wcmVzc2VkX2NoZWNrc3VtICE9IGx6b19hZGxlcjMyKGx6b19hZGxlcjMyKDAsTlVMTCwwKSxpbixpbl9sZW4pKQorICAgIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBkZWNvbXByZXNzaW9uIGRhdGEgZXJyb3JcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICAvKiBOb3cgeW91IGNvdWxkIGFsc28gdmVyaWZ5IGRlY29tcHJlc3Npb24gdW5kZXIgc2ltaWxhciBjb25kaXRpb25zIGFzIGluCisgICAgICogeW91ciBhcHBsaWNhdGlvbiwgZS5nLiBvdmVybGFwcGluZyBhc3NlbWJsZXIgZGVjb21wcmVzc2lvbiBldGMuCisgICAgICovCisjZW5kaWYKKworICAgIGx6b19mcmVlKGluKTsKKyAgICBsem9fZnJlZShvdXQpOworICAgIGx6b19mcmVlKHdya21lbSk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2V4YW1wbGVzL3NpbXBsZS5jIGIvbHpvLTIuMDMvZXhhbXBsZXMvc2ltcGxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2MTFjOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2V4YW1wbGVzL3NpbXBsZS5jCkBAIC0wLDAgKzEsMTY4IEBACisvKiBzaW1wbGUuYyAtLSB0aGUgYW5ub3RhdGVkIHNpbXBsZSBleGFtcGxlIHByb2dyYW0gZm9yIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGhpcyBwcm9ncmFtIHNob3dzIHRoZSBiYXNpYyB1c2FnZSBvZiB0aGUgTFpPIGxpYnJhcnkuCisvLyBXZSB3aWxsIGNvbXByZXNzIGEgYmxvY2sgb2YgZGF0YSBhbmQgZGVjb21wcmVzcyBhZ2Fpbi4KKy8vCisvLyBTZWUgYWxzbyBMWk8uRkFRCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogV2Ugd2lsbCBiZSB1c2luZyB0aGUgTFpPMVgtMSBhbGdvcml0aG0sIHNvIHdlIGhhdmUKKyAqIHRvIGluY2x1ZGUgPGx6bzF4Lmg+CisgKi8KKworI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzF4LmgiCisKKy8qIHBvcnRhYmlsaXR5IGxheWVyICovCisjZGVmaW5lIFdBTlRfTFpPX01BTExPQyAxCisjaW5jbHVkZSAiZXhhbXBsZXMvcG9ydGFiLmgiCisKKworLyogV2Ugd2FudCB0byBjb21wcmVzcyB0aGUgZGF0YSBibG9jayBhdCBgaW4nIHdpdGggbGVuZ3RoIGBJTl9MRU4nIHRvCisgKiB0aGUgYmxvY2sgYXQgYG91dCcuIEJlY2F1c2UgdGhlIGlucHV0IGJsb2NrIG1heSBiZSBpbmNvbXByZXNzaWJsZSwKKyAqIHdlIG11c3QgcHJvdmlkZSBhIGxpdHRsZSBtb3JlIG91dHB1dCBzcGFjZSBpbiBjYXNlIHRoYXQgY29tcHJlc3Npb24KKyAqIGlzIG5vdCBwb3NzaWJsZS4KKyAqLworCisjaWZuZGVmIElOX0xFTgorI2RlZmluZSBJTl9MRU4gICAgICAoMTI4KjEwMjRMKQorI2VuZGlmCisjZGVmaW5lIE9VVF9MRU4gICAgIChJTl9MRU4gKyBJTl9MRU4gLyAxNiArIDY0ICsgMykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgX19sem9fY2RlY2xfbWFpbiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IHI7CisgICAgbHpvX2J5dGVwIGluOworICAgIGx6b19ieXRlcCBvdXQ7CisgICAgbHpvX2J5dGVwIHdya21lbTsKKyAgICBsem9fdWludCBpbl9sZW47CisgICAgbHpvX3VpbnQgb3V0X2xlbjsKKyAgICBsem9fdWludCBuZXdfbGVuOworCisgICAgaWYgKGFyZ2MgPCAwICYmIGFyZ3YgPT0gTlVMTCkgICAvKiBhdm9pZCB3YXJuaW5nIGFib3V0IHVudXNlZCBhcmdzICovCisgICAgICAgIHJldHVybiAwOworCisgICAgcHJpbnRmKCJcbkxaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5ICh2JXMsICVzKS5cbiIsCisgICAgICAgICAgIGx6b192ZXJzaW9uX3N0cmluZygpLCBsem9fdmVyc2lvbl9kYXRlKCkpOworICAgIHByaW50ZigiQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuQWxsIFJpZ2h0cyBSZXNlcnZlZC5cblxuIik7CisKKy8qCisgKiBTdGVwIDE6IGluaXRpYWxpemUgdGhlIExaTyBsaWJyYXJ5CisgKi8KKyAgICBpZiAobHpvX2luaXQoKSAhPSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBsem9faW5pdCgpIGZhaWxlZCAhISFcbiIpOworICAgICAgICBwcmludGYoIih0aGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgY29tcGlsZXIgYnVnIC0gdHJ5IHJlY29tcGlsaW5nXG53aXRob3V0IG9wdGltaXphdGlvbnMsIGFuZCBlbmFibGUgYC1ETFpPX0RFQlVHJyBmb3IgZGlhZ25vc3RpY3MpXG4iKTsKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisvKgorICogU3RlcCAyOiBhbGxvY2F0ZSBibG9ja3MgYW5kIHRoZSB3b3JrLW1lbW9yeQorICovCisgICAgaW4gPSAobHpvX2J5dGVwKSBsem9fbWFsbG9jKElOX0xFTik7CisgICAgb3V0ID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhPVVRfTEVOKTsKKyAgICB3cmttZW0gPSAobHpvX2J5dGVwKSBsem9fbWFsbG9jKExaTzFYXzFfTUVNX0NPTVBSRVNTKTsKKyAgICBpZiAoaW4gPT0gTlVMTCB8fCBvdXQgPT0gTlVMTCB8fCB3cmttZW0gPT0gTlVMTCkKKyAgICB7CisgICAgICAgIHByaW50Zigib3V0IG9mIG1lbW9yeVxuIik7CisgICAgICAgIHJldHVybiAzOworICAgIH0KKworLyoKKyAqIFN0ZXAgMzogcHJlcGFyZSB0aGUgaW5wdXQgYmxvY2sgdGhhdCB3aWxsIGdldCBjb21wcmVzc2VkLgorICogICAgICAgICBXZSBqdXN0IGZpbGwgaXQgd2l0aCB6ZXJvcyBpbiB0aGlzIGV4YW1wbGUgcHJvZ3JhbSwKKyAqICAgICAgICAgYnV0IHlvdSB3b3VsZCB1c2UgeW91ciByZWFsLXdvcmxkIGRhdGEgaGVyZS4KKyAqLworICAgIGluX2xlbiA9IElOX0xFTjsKKyAgICBsem9fbWVtc2V0KGluLDAsaW5fbGVuKTsKKworLyoKKyAqIFN0ZXAgNDogY29tcHJlc3MgZnJvbSBgaW4nIHRvIGBvdXQnIHdpdGggTFpPMVgtMQorICovCisgICAgciA9IGx6bzF4XzFfY29tcHJlc3MoaW4saW5fbGVuLG91dCwmb3V0X2xlbix3cmttZW0pOworICAgIGlmIChyID09IExaT19FX09LKQorICAgICAgICBwcmludGYoImNvbXByZXNzZWQgJWx1IGJ5dGVzIGludG8gJWx1IGJ5dGVzXG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIGluX2xlbiwgKHVuc2lnbmVkIGxvbmcpIG91dF9sZW4pOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gY29tcHJlc3Npb24gZmFpbGVkOiAlZFxuIiwgcik7CisgICAgICAgIHJldHVybiAyOworICAgIH0KKyAgICAvKiBjaGVjayBmb3IgYW4gaW5jb21wcmVzc2libGUgYmxvY2sgKi8KKyAgICBpZiAob3V0X2xlbiA+PSBpbl9sZW4pCisgICAgeworICAgICAgICBwcmludGYoIlRoaXMgYmxvY2sgY29udGFpbnMgaW5jb21wcmVzc2libGUgZGF0YS5cbiIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKy8qCisgKiBTdGVwIDU6IGRlY29tcHJlc3MgYWdhaW4sIG5vdyBnb2luZyBmcm9tIGBvdXQnIHRvIGBpbicKKyAqLworICAgIG5ld19sZW4gPSBpbl9sZW47CisgICAgciA9IGx6bzF4X2RlY29tcHJlc3Mob3V0LG91dF9sZW4saW4sJm5ld19sZW4sTlVMTCk7CisgICAgaWYgKHIgPT0gTFpPX0VfT0sgJiYgbmV3X2xlbiA9PSBpbl9sZW4pCisgICAgICAgIHByaW50ZigiZGVjb21wcmVzc2VkICVsdSBieXRlcyBiYWNrIGludG8gJWx1IGJ5dGVzXG4iLAorICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG91dF9sZW4sICh1bnNpZ25lZCBsb25nKSBpbl9sZW4pOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIC8qIHRoaXMgc2hvdWxkIE5FVkVSIGhhcHBlbiAqLworICAgICAgICBwcmludGYoImludGVybmFsIGVycm9yIC0gZGVjb21wcmVzc2lvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgbHpvX2ZyZWUod3JrbWVtKTsKKyAgICBsem9fZnJlZShvdXQpOworICAgIGx6b19mcmVlKGluKTsKKyAgICBwcmludGYoIlNpbXBsZSBjb21wcmVzc2lvbiB0ZXN0IHBhc3NlZC5cbiIpOworICAgIHJldHVybiAwOworfQorCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvaW5jbHVkZS9NYWtlZmlsZS5hbSBiL2x6by0yLjAzL2luY2x1ZGUvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWFkMThmNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2luY2x1ZGUvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSw2IEBACisjIyBQcm9jZXNzIHRoaXMgZmlsZSB3aXRoIGF1dG9tYWtlIHRvIGNyZWF0ZSBNYWtlZmlsZS5pbgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorIworCitTVUJESVJTID0gbHpvCmRpZmYgLS1naXQgYS9sem8tMi4wMy9pbmNsdWRlL01ha2VmaWxlLmluIGIvbHpvLTIuMDMvaW5jbHVkZS9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWNiNGU3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDQ4NyBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACit0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACitzdWJkaXIgPSBpbmNsdWRlCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorUkVDVVJTSVZFX1RBUkdFVFMgPSBhbGwtcmVjdXJzaXZlIGNoZWNrLXJlY3Vyc2l2ZSBkdmktcmVjdXJzaXZlIFwKKwlodG1sLXJlY3Vyc2l2ZSBpbmZvLXJlY3Vyc2l2ZSBpbnN0YWxsLWRhdGEtcmVjdXJzaXZlIFwKKwlpbnN0YWxsLWV4ZWMtcmVjdXJzaXZlIGluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCWluc3RhbGwtcmVjdXJzaXZlIGluc3RhbGxjaGVjay1yZWN1cnNpdmUgaW5zdGFsbGRpcnMtcmVjdXJzaXZlIFwKKwlwZGYtcmVjdXJzaXZlIHBzLXJlY3Vyc2l2ZSB1bmluc3RhbGwtaW5mby1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbC1yZWN1cnNpdmUKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RfU1VCRElSUyA9ICQoU1VCRElSUykKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xaT19BU01fVlBBVEggPSBATFpPX0FTTV9WUEFUSEAKK0xaT19DRkxBR1MgPSBATFpPX0NGTEFHU0AKK0xaT19DUFBGTEFHUyA9IEBMWk9fQ1BQRkxBR1NACitMWk9fRVhUUkFfQ0ZMQUdTID0gQExaT19FWFRSQV9DRkxBR1NACitMWk9fRVhUUkFfQ1BQRkxBR1MgPSBATFpPX0VYVFJBX0NQUEZMQUdTQAorTFpPX1VTRV9BU01fRkFMU0UgPSBATFpPX1VTRV9BU01fRkFMU0VACitMWk9fVVNFX0FTTV9UUlVFID0gQExaT19VU0VfQVNNX1RSVUVACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAorYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACithbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2NvbmZpZ3VyZV9DRkxBR1MgPSBAY29uZmlndXJlX0NGTEFHU0AKK2NvbmZpZ3VyZV9DUFBGTEFHUyA9IEBjb25maWd1cmVfQ1BQRkxBR1NACitkYXRhZGlyID0gQGRhdGFkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK1NVQkRJUlMgPSBsem8KK2FsbDogYWxsLXJlY3Vyc2l2ZQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBpbmNsdWRlL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIGluY2x1ZGUvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCisjIFRoaXMgZGlyZWN0b3J5J3Mgc3ViZGlyZWN0b3JpZXMgYXJlIG1vc3RseSBpbmRlcGVuZGVudDsgeW91IGNhbiBjZAorIyBpbnRvIHRoZW0gYW5kIHJ1biBgbWFrZScgd2l0aG91dCBnb2luZyB0aHJvdWdoIHRoaXMgTWFrZWZpbGUuCisjIFRvIGNoYW5nZSB0aGUgdmFsdWVzIG9mIGBtYWtlJyB2YXJpYWJsZXM6IGluc3RlYWQgb2YgZWRpdGluZyBNYWtlZmlsZXMsCisjICgxKSBpZiB0aGUgdmFyaWFibGUgaXMgc2V0IGluIGBjb25maWcuc3RhdHVzJywgZWRpdCBgY29uZmlnLnN0YXR1cycKKyMgICAgICh3aGljaCB3aWxsIGNhdXNlIHRoZSBNYWtlZmlsZXMgdG8gYmUgcmVnZW5lcmF0ZWQgd2hlbiB5b3UgcnVuIGBtYWtlJyk7CisjICgyKSBvdGhlcndpc2UsIHBhc3MgdGhlIGRlc2lyZWQgdmFsdWVzIG9uIHRoZSBgbWFrZScgY29tbWFuZCBsaW5lLgorJChSRUNVUlNJVkVfVEFSR0VUUyk6CisJQGZhaWxjb209J2V4aXQgMSc7IFwKKwlmb3IgZiBpbiB4ICQkTUFLRUZMQUdTOyBkbyBcCisJICBjYXNlICQkZiBpbiBcCisJICAgICo9KiB8IC0tWyFrXSopOzsgXAorCSAgICAqayopIGZhaWxjb209J2ZhaWw9eWVzJzs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZG90X3NlZW49bm87IFwKKwl0YXJnZXQ9YGVjaG8gJEAgfCBzZWQgcy8tcmVjdXJzaXZlLy9gOyBcCisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBkb3Rfc2Vlbj15ZXM7IFwKKwkgICAgbG9jYWxfdGFyZ2V0PSIkJHRhcmdldC1hbSI7IFwKKwkgIGVsc2UgXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0IjsgXAorCSAgZmk7IFwKKwkgIChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSAkJGxvY2FsX3RhcmdldCkgXAorCSAgfHwgZXZhbCAkJGZhaWxjb207IFwKKwlkb25lOyBcCisJaWYgdGVzdCAiJCRkb3Rfc2VlbiIgPSAibm8iOyB0aGVuIFwKKwkgICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICIkJHRhcmdldC1hbSIgfHwgZXhpdCAxOyBcCisJZmk7IHRlc3QgLXogIiQkZmFpbCIKKworbW9zdGx5Y2xlYW4tcmVjdXJzaXZlIGNsZWFuLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4tcmVjdXJzaXZlIFwKK21haW50YWluZXItY2xlYW4tcmVjdXJzaXZlOgorCUBmYWlsY29tPSdleGl0IDEnOyBcCisJZm9yIGYgaW4geCAkJE1BS0VGTEFHUzsgZG8gXAorCSAgY2FzZSAkJGYgaW4gXAorCSAgICAqPSogfCAtLVsha10qKTs7IFwKKwkgICAgKmsqKSBmYWlsY29tPSdmYWlsPXllcyc7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWRvdF9zZWVuPW5vOyBcCisJY2FzZSAiJEAiIGluIFwKKwkgIGRpc3RjbGVhbi0qIHwgbWFpbnRhaW5lci1jbGVhbi0qKSBsaXN0PSckKERJU1RfU1VCRElSUyknIDs7IFwKKwkgICopIGxpc3Q9JyQoU1VCRElSUyknIDs7IFwKKwllc2FjOyBcCisJcmV2PScnOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gIi4iOyB0aGVuIDo7IGVsc2UgXAorCSAgICByZXY9IiQkc3ViZGlyICQkcmV2IjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJcmV2PSIkJHJldiAuIjsgXAorCXRhcmdldD1gZWNobyAkQCB8IHNlZCBzLy1yZWN1cnNpdmUvL2A7IFwKKwlmb3Igc3ViZGlyIGluICQkcmV2OyBkbyBcCisJICBlY2hvICJNYWtpbmcgJCR0YXJnZXQgaW4gJCRzdWJkaXIiOyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAiLiI7IHRoZW4gXAorCSAgICBsb2NhbF90YXJnZXQ9IiQkdGFyZ2V0LWFtIjsgXAorCSAgZWxzZSBcCisJICAgIGxvY2FsX3RhcmdldD0iJCR0YXJnZXQiOyBcCisJICBmaTsgXAorCSAgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpICQkbG9jYWxfdGFyZ2V0KSBcCisJICB8fCBldmFsICQkZmFpbGNvbTsgXAorCWRvbmUgJiYgdGVzdCAteiAiJCRmYWlsIgordGFncy1yZWN1cnNpdmU6CisJbGlzdD0nJChTVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICB0ZXN0ICIkJHN1YmRpciIgPSAuIHx8IChjZCAkJHN1YmRpciAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSB0YWdzKTsgXAorCWRvbmUKK2N0YWdzLXJlY3Vyc2l2ZToKKwlsaXN0PSckKFNVQkRJUlMpJzsgZm9yIHN1YmRpciBpbiAkJGxpc3Q7IGRvIFwKKwkgIHRlc3QgIiQkc3ViZGlyIiA9IC4gfHwgKGNkICQkc3ViZGlyICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGN0YWdzKTsgXAorCWRvbmUKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiB0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJaWYgKCQoRVRBR1MpIC0tZXRhZ3MtaW5jbHVkZSAtLXZlcnNpb24pID4vZGV2L251bGwgMj4mMTsgdGhlbiBcCisJICBpbmNsdWRlX29wdGlvbj0tLWV0YWdzLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD0uOyBcCisJZWxzZSBcCisJICBpbmNsdWRlX29wdGlvbj0tLWluY2x1ZGU7IFwKKwkgIGVtcHR5X2ZpeD07IFwKKwlmaTsgXAorCWxpc3Q9JyQoU1VCRElSUyknOyBmb3Igc3ViZGlyIGluICQkbGlzdDsgZG8gXAorCSAgaWYgdGVzdCAiJCRzdWJkaXIiID0gLjsgdGhlbiA6OyBlbHNlIFwKKwkgICAgdGVzdCAhIC1mICQkc3ViZGlyL1RBR1MgfHwgXAorCSAgICAgIHRhZ3M9IiQkdGFncyAkJGluY2x1ZGVfb3B0aW9uPSQkaGVyZS8kJHN1YmRpci9UQUdTIjsgXAorCSAgZmk7IFwKKwlkb25lOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6IGN0YWdzLXJlY3Vyc2l2ZSAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorCWxpc3Q9JyQoRElTVF9TVUJESVJTKSc7IGZvciBzdWJkaXIgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0ICIkJHN1YmRpciIgPSAuOyB0aGVuIDo7IGVsc2UgXAorCSAgICB0ZXN0IC1kICIkKGRpc3RkaXIpLyQkc3ViZGlyIiBcCisJICAgIHx8ICQobWtkaXJfcCkgIiQoZGlzdGRpcikvJCRzdWJkaXIiIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICAgIGRpc3RkaXI9YCQoYW1fX2NkKSAkKGRpc3RkaXIpICYmIHB3ZGA7IFwKKwkgICAgdG9wX2Rpc3RkaXI9YCQoYW1fX2NkKSAkKHRvcF9kaXN0ZGlyKSAmJiBwd2RgOyBcCisJICAgIChjZCAkJHN1YmRpciAmJiBcCisJICAgICAgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgXAorCSAgICAgICAgdG9wX2Rpc3RkaXI9IiQkdG9wX2Rpc3RkaXIiIFwKKwkgICAgICAgIGRpc3RkaXI9IiQkZGlzdGRpci8kJHN1YmRpciIgXAorCSAgICAgICAgZGlzdGRpcikgXAorCSAgICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stcmVjdXJzaXZlCithbGwtYW06IE1ha2VmaWxlCitpbnN0YWxsZGlyczogaW5zdGFsbGRpcnMtcmVjdXJzaXZlCitpbnN0YWxsZGlycy1hbToKK2luc3RhbGw6IGluc3RhbGwtcmVjdXJzaXZlCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1yZWN1cnNpdmUKK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLXJlY3Vyc2l2ZQordW5pbnN0YWxsOiB1bmluc3RhbGwtcmVjdXJzaXZlCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLXJlY3Vyc2l2ZQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1yZWN1cnNpdmUKKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLXJlY3Vyc2l2ZQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtcmVjdXJzaXZlCisKK2luZm86IGluZm8tcmVjdXJzaXZlCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOgorCitpbnN0YWxsLWluZm86IGluc3RhbGwtaW5mby1yZWN1cnNpdmUKKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1yZWN1cnNpdmUKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLXJlY3Vyc2l2ZQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLXJlY3Vyc2l2ZQorCitwZGYtYW06CisKK3BzOiBwcy1yZWN1cnNpdmUKKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKwordW5pbnN0YWxsLWluZm86IHVuaW5zdGFsbC1pbmZvLXJlY3Vyc2l2ZQorCisuUEhPTlk6ICQoUkVDVVJTSVZFX1RBUkdFVFMpIENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gXAorCWNsZWFuIGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1yZWN1cnNpdmUgY3RhZ3MgXAorCWN0YWdzLXJlY3Vyc2l2ZSBkaXN0Y2xlYW4gZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi1yZWN1cnNpdmUgZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgXAorCWh0bWwtYW0gaW5mbyBpbmZvLWFtIGluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgXAorCWluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBcCisJaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIGluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIFwKKwlpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgaW5zdGFsbGRpcnMtYW0gbWFpbnRhaW5lci1jbGVhbiBcCisJbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1haW50YWluZXItY2xlYW4tcmVjdXJzaXZlIFwKKwltb3N0bHljbGVhbiBtb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgXAorCW1vc3RseWNsZWFuLXJlY3Vyc2l2ZSBwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdGFncy1yZWN1cnNpdmUgXAorCXVuaW5zdGFsbCB1bmluc3RhbGwtYW0gdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvaW5jbHVkZS9sem8vTWFrZWZpbGUuYW0gYi9sem8tMi4wMy9pbmNsdWRlL2x6by9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTUzN2JiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxMCBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworcGtnaW5jbHVkZV9IRUFERVJTID0gXAorICAgIGx6b2NvbmYuaCBsem9kZWZzLmggbHpvdXRpbC5oIGx6b19hc20uaCBcCisgICAgbHpvMS5oIGx6bzFhLmggbHpvMWIuaCBsem8xYy5oIGx6bzFmLmggbHpvMXguaCBsem8xeS5oIGx6bzF6LmggXAorICAgIGx6bzJhLmgKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvaW5jbHVkZS9sem8vTWFrZWZpbGUuaW4gYi9sem8tMi4wMy9pbmNsdWRlL2x6by9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmQyNmNlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0MTIgQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uLy4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACit0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACitzdWJkaXIgPSBpbmNsdWRlL2x6bworRElTVF9DT01NT04gPSAkKHBrZ2luY2x1ZGVfSEVBREVSUykgJChzcmNkaXIpL01ha2VmaWxlLmFtIFwKKwkkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorU09VUkNFUyA9CitESVNUX1NPVVJDRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKHBrZ2luY2x1ZGVkaXIpIgorcGtnaW5jbHVkZUhFQURFUlNfSU5TVEFMTCA9ICQoSU5TVEFMTF9IRUFERVIpCitIRUFERVJTID0gJChwa2dpbmNsdWRlX0hFQURFUlMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSBAQ0ZMQUdTQAorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gQENQUEZMQUdTQAorQ1hYID0gQENYWEAKK0NYWENQUCA9IEBDWFhDUFBACitDWFhERVBNT0RFID0gQENYWERFUE1PREVACitDWFhGTEFHUyA9IEBDWFhGTEFHU0AKK0NZR1BBVEhfVyA9IEBDWUdQQVRIX1dACitERUZTID0gQERFRlNACitERVBESVIgPSBAREVQRElSQAorRUNITyA9IEBFQ0hPQAorRUNIT19DID0gQEVDSE9fQ0AKK0VDSE9fTiA9IEBFQ0hPX05ACitFQ0hPX1QgPSBARUNIT19UQAorRUdSRVAgPSBARUdSRVBACitFWEVFWFQgPSBARVhFRVhUQAorRjc3ID0gQEY3N0AKK0ZGTEFHUyA9IEBGRkxBR1NACitJTlNUQUxMX0RBVEEgPSBASU5TVEFMTF9EQVRBQAorSU5TVEFMTF9QUk9HUkFNID0gQElOU1RBTExfUFJPR1JBTUAKK0lOU1RBTExfU0NSSVBUID0gQElOU1RBTExfU0NSSVBUQAorSU5TVEFMTF9TVFJJUF9QUk9HUkFNID0gQElOU1RBTExfU1RSSVBfUFJPR1JBTUAKK0xERkxBR1MgPSBATERGTEFHU0AKK0xJQk9CSlMgPSBATElCT0JKU0AKK0xJQlMgPSBATElCU0AKK0xJQlRPT0wgPSBATElCVE9PTEAKK0xOX1MgPSBATE5fU0AKK0xUTElCT0JKUyA9IEBMVExJQk9CSlNACitMWk9fQVNNX1ZQQVRIID0gQExaT19BU01fVlBBVEhACitMWk9fQ0ZMQUdTID0gQExaT19DRkxBR1NACitMWk9fQ1BQRkxBR1MgPSBATFpPX0NQUEZMQUdTQAorTFpPX0VYVFJBX0NGTEFHUyA9IEBMWk9fRVhUUkFfQ0ZMQUdTQAorTFpPX0VYVFJBX0NQUEZMQUdTID0gQExaT19FWFRSQV9DUFBGTEFHU0AKK0xaT19VU0VfQVNNX0ZBTFNFID0gQExaT19VU0VfQVNNX0ZBTFNFQAorTFpPX1VTRV9BU01fVFJVRSA9IEBMWk9fVVNFX0FTTV9UUlVFQAorTUFJTlQgPSBATUFJTlRACitNQUlOVEFJTkVSX01PREVfRkFMU0UgPSBATUFJTlRBSU5FUl9NT0RFX0ZBTFNFQAorTUFJTlRBSU5FUl9NT0RFX1RSVUUgPSBATUFJTlRBSU5FUl9NT0RFX1RSVUVACitNQUtFSU5GTyA9IEBNQUtFSU5GT0AKK09CSkVYVCA9IEBPQkpFWFRACitQQUNLQUdFID0gQFBBQ0tBR0VACitQQUNLQUdFX0JVR1JFUE9SVCA9IEBQQUNLQUdFX0JVR1JFUE9SVEAKK1BBQ0tBR0VfTkFNRSA9IEBQQUNLQUdFX05BTUVACitQQUNLQUdFX1NUUklORyA9IEBQQUNLQUdFX1NUUklOR0AKK1BBQ0tBR0VfVEFSTkFNRSA9IEBQQUNLQUdFX1RBUk5BTUVACitQQUNLQUdFX1ZFUlNJT04gPSBAUEFDS0FHRV9WRVJTSU9OQAorUEFUSF9TRVBBUkFUT1IgPSBAUEFUSF9TRVBBUkFUT1JACitSQU5MSUIgPSBAUkFOTElCQAorU0VUX01BS0UgPSBAU0VUX01BS0VACitTSEVMTCA9IEBTSEVMTEAKK1NUUklQID0gQFNUUklQQAorVkVSU0lPTiA9IEBWRVJTSU9OQAorYWNfY3RfQVIgPSBAYWNfY3RfQVJACithY19jdF9DQyA9IEBhY19jdF9DQ0AKK2FjX2N0X0NYWCA9IEBhY19jdF9DWFhACithY19jdF9GNzcgPSBAYWNfY3RfRjc3QAorYWNfY3RfUkFOTElCID0gQGFjX2N0X1JBTkxJQkAKK2FjX2N0X1NUUklQID0gQGFjX2N0X1NUUklQQAorYW1fX2Zhc3RkZXBDQ19GQUxTRSA9IEBhbV9fZmFzdGRlcENDX0ZBTFNFQAorYW1fX2Zhc3RkZXBDQ19UUlVFID0gQGFtX19mYXN0ZGVwQ0NfVFJVRUAKK2FtX19mYXN0ZGVwQ1hYX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ1hYX0ZBTFNFQAorYW1fX2Zhc3RkZXBDWFhfVFJVRSA9IEBhbV9fZmFzdGRlcENYWF9UUlVFQAorYW1fX2luY2x1ZGUgPSBAYW1fX2luY2x1ZGVACithbV9fbGVhZGluZ19kb3QgPSBAYW1fX2xlYWRpbmdfZG90QAorYW1fX3F1b3RlID0gQGFtX19xdW90ZUAKK2FtX190YXIgPSBAYW1fX3RhckAKK2FtX191bnRhciA9IEBhbV9fdW50YXJACitiaW5kaXIgPSBAYmluZGlyQAorYnVpbGQgPSBAYnVpbGRACitidWlsZF9hbGlhcyA9IEBidWlsZF9hbGlhc0AKK2J1aWxkX2NwdSA9IEBidWlsZF9jcHVACitidWlsZF9vcyA9IEBidWlsZF9vc0AKK2J1aWxkX3ZlbmRvciA9IEBidWlsZF92ZW5kb3JACitjb25maWd1cmVfQ0ZMQUdTID0gQGNvbmZpZ3VyZV9DRkxBR1NACitjb25maWd1cmVfQ1BQRkxBR1MgPSBAY29uZmlndXJlX0NQUEZMQUdTQAorZGF0YWRpciA9IEBkYXRhZGlyQAorZXhlY19wcmVmaXggPSBAZXhlY19wcmVmaXhACitob3N0ID0gQGhvc3RACitob3N0X2FsaWFzID0gQGhvc3RfYWxpYXNACitob3N0X2NwdSA9IEBob3N0X2NwdUAKK2hvc3Rfb3MgPSBAaG9zdF9vc0AKK2hvc3RfdmVuZG9yID0gQGhvc3RfdmVuZG9yQAoraW5jbHVkZWRpciA9IEBpbmNsdWRlZGlyQAoraW5mb2RpciA9IEBpbmZvZGlyQAoraW5zdGFsbF9zaCA9IEBpbnN0YWxsX3NoQAorbGliZGlyID0gQGxpYmRpckAKK2xpYmV4ZWNkaXIgPSBAbGliZXhlY2RpckAKK2xvY2Fsc3RhdGVkaXIgPSBAbG9jYWxzdGF0ZWRpckAKK21hbmRpciA9IEBtYW5kaXJACitta2Rpcl9wID0gQG1rZGlyX3BACitvbGRpbmNsdWRlZGlyID0gQG9sZGluY2x1ZGVkaXJACitwcmVmaXggPSBAcHJlZml4QAorcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSA9IEBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lQAorc2JpbmRpciA9IEBzYmluZGlyQAorc2hhcmVkc3RhdGVkaXIgPSBAc2hhcmVkc3RhdGVkaXJACitzeXNjb25mZGlyID0gQHN5c2NvbmZkaXJACit0YXJnZXQgPSBAdGFyZ2V0QAordGFyZ2V0X2FsaWFzID0gQHRhcmdldF9hbGlhc0AKK3RhcmdldF9jcHUgPSBAdGFyZ2V0X2NwdUAKK3RhcmdldF9vcyA9IEB0YXJnZXRfb3NACit0YXJnZXRfdmVuZG9yID0gQHRhcmdldF92ZW5kb3JACitwa2dpbmNsdWRlX0hFQURFUlMgPSBcCisgICAgbHpvY29uZi5oIGx6b2RlZnMuaCBsem91dGlsLmggbHpvX2FzbS5oIFwKKyAgICBsem8xLmggbHpvMWEuaCBsem8xYi5oIGx6bzFjLmggbHpvMWYuaCBsem8xeC5oIGx6bzF5LmggbHpvMXouaCBcCisgICAgbHpvMmEuaAorCithbGw6IGFsbC1hbQorCisuU1VGRklYRVM6CiskKHNyY2RpcikvTWFrZWZpbGUuaW46IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChzcmNkaXIpL01ha2VmaWxlLmFtICAkKGFtX19jb25maWd1cmVfZGVwcykKKwlAZm9yIGRlcCBpbiAkPzsgZG8gXAorCSAgY2FzZSAnJChhbV9fY29uZmlndXJlX2RlcHMpJyBpbiBcCisJICAgICokJGRlcCopIFwKKwkgICAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2ggXAorCQkmJiBleGl0IDA7IFwKKwkgICAgICBleGl0IDE7OyBcCisJICBlc2FjOyBcCisJZG9uZTsgXAorCWVjaG8gJyBjZCAkKHRvcF9zcmNkaXIpICYmICQoQVVUT01BS0UpIC0tZ251ICBpbmNsdWRlL2x6by9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBpbmNsdWRlL2x6by9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CitpbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTOiAkKHBrZ2luY2x1ZGVfSEVBREVSUykKKwlAJChOT1JNQUxfSU5TVEFMTCkKKwl0ZXN0IC16ICIkKHBrZ2luY2x1ZGVkaXIpIiB8fCAkKG1rZGlyX3ApICIkKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKSIKKwlAbGlzdD0nJChwa2dpbmNsdWRlX0hFQURFUlMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICIkJHAiOyB0aGVuIGQ9OyBlbHNlIGQ9IiQoc3JjZGlyKS8iOyBmaTsgXAorCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiAkKHBrZ2luY2x1ZGVIRUFERVJTX0lOU1RBTEwpICckJGQkJHAnICckKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKS8kJGYnIjsgXAorCSAgJChwa2dpbmNsdWRlSEVBREVSU19JTlNUQUxMKSAiJCRkJCRwIiAiJChERVNURElSKSQocGtnaW5jbHVkZWRpcikvJCRmIjsgXAorCWRvbmUKKwordW5pbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQGxpc3Q9JyQocGtnaW5jbHVkZV9IRUFERVJTKSc7IGZvciBwIGluICQkbGlzdDsgZG8gXAorCSAgZj0kKGFtX19zdHJpcF9kaXIpIFwKKwkgIGVjaG8gIiBybSAtZiAnJChERVNURElSKSQocGtnaW5jbHVkZWRpcikvJCRmJyI7IFwKKwkgIHJtIC1mICIkKERFU1RESVIpJChwa2dpbmNsdWRlZGlyKS8kJGYiOyBcCisJZG9uZQorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoSEVBREVSUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKHBrZ2luY2x1ZGVkaXIpIjsgZG8gXAorCSAgdGVzdCAteiAiJCRkaXIiIHx8ICQobWtkaXJfcCkgIiQkZGlyIjsgXAorCWRvbmUKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBtb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOiBpbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTCisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtZiBNYWtlZmlsZQorbWFpbnRhaW5lci1jbGVhbi1hbTogZGlzdGNsZWFuLWFtIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYworCittb3N0bHljbGVhbjogbW9zdGx5Y2xlYW4tYW0KKworbW9zdGx5Y2xlYW4tYW06IG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbAorCitwZGY6IHBkZi1hbQorCitwZGYtYW06CisKK3BzOiBwcy1hbQorCitwcy1hbToKKwordW5pbnN0YWxsLWFtOiB1bmluc3RhbGwtaW5mby1hbSB1bmluc3RhbGwtcGtnaW5jbHVkZUhFQURFUlMKKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY3RhZ3MgZGlzdGNsZWFuIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBcCisJaHRtbC1hbSBpbmZvIGluZm8tYW0gaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBcCisJaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIFwKKwlpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gaW5zdGFsbC1wa2dpbmNsdWRlSEVBREVSUyBcCisJaW5zdGFsbC1zdHJpcCBpbnN0YWxsY2hlY2sgaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIFwKKwltYWludGFpbmVyLWNsZWFuIG1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBcCisJbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIHBkZiBwZGYtYW0gcHMgcHMtYW0gXAorCXRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSB1bmluc3RhbGwtaW5mby1hbSBcCisJdW5pbnN0YWxsLXBrZ2luY2x1ZGVIRUFERVJTCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzEuaCBiL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ODAwNTNhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvMS5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qIGx6bzEuaCAtLSBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSBMWk8xIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMV9IX0lOQ0xVREVECisjZGVmaW5lIF9fTFpPMV9IX0lOQ0xVREVECisKKyNpZm5kZWYgX19MWk9DT05GX0hfSU5DTFVERUQKKyNpbmNsdWRlICJsem9jb25mLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTWVtb3J5IHJlcXVpcmVkIGZvciB0aGUgd3JrbWVtIHBhcmFtZXRlci4KKyAqIFdoZW4gdGhlIHJlcXVpcmVkIHNpemUgaXMgMCwgeW91IGNhbiBhbHNvIHBhc3MgYSBOVUxMIHBvaW50ZXIuCisgKi8KKworI2RlZmluZSBMWk8xX01FTV9DT01QUkVTUyAgICAgICAoKGx6b191aW50MzIpICg4MTkyTCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMV9NRU1fREVDT01QUkVTUyAgICAgKDApCisKKworTFpPX0VYVEVSTihpbnQpCitsem8xX2NvbXByZXNzICAgICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCitMWk9fRVhURVJOKGludCkKK2x6bzFfZGVjb21wcmVzcyAgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8gYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgYW5kIHRpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8xXzk5X01FTV9DT01QUkVTUyAgICAoKGx6b191aW50MzIpICg2NTUzNkwgKiBsem9fc2l6ZW9mX2RpY3RfdCkpCisKK0xaT19FWFRFUk4oaW50KQorbHpvMV85OV9jb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIGFscmVhZHkgaW5jbHVkZWQgKi8KKworCisvKiB2aW06c2V0IHRzPTQgZXQ6ICovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xYS5oIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvMWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjRlZWNhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvMWEuaApAQCAtMCwwICsxLDk2IEBACisvKiBsem8xYS5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFBIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMUFfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFBX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFBX01FTV9DT01QUkVTUyAgICAgICgobHpvX3VpbnQzMikgKDgxOTJMICogbHpvX3NpemVvZl9kaWN0X3QpKQorI2RlZmluZSBMWk8xQV9NRU1fREVDT01QUkVTUyAgICAoMCkKKworCitMWk9fRVhURVJOKGludCkKK2x6bzFhX2NvbXByZXNzICAgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKK0xaT19FWFRFUk4oaW50KQorbHpvMWFfZGVjb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGJldHRlciBjb21wcmVzc2lvbiByYXRpbyBhdCB0aGUgY29zdCBvZiBtb3JlIG1lbW9yeSBhbmQgdGltZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaTzFBXzk5X01FTV9DT01QUkVTUyAgICgobHpvX3VpbnQzMikgKDY1NTM2TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xYV85OV9jb21wcmVzcyAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzFiLmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGVhMDgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xYi5oCkBAIC0wLDAgKzEsMTYwIEBACisvKiBsem8xYi5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFCIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMUJfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFCX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFCX01FTV9DT01QUkVTUyAgICAgICgobHpvX3VpbnQzMikgKDE2Mzg0TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMUJfTUVNX0RFQ09NUFJFU1MgICAgKDApCisKKworLyogY29tcHJlc3Npb24gbGV2ZWxzICovCisjZGVmaW5lIExaTzFCX0JFU1RfU1BFRUQgICAgICAgICAgICAgMQorI2RlZmluZSBMWk8xQl9CRVNUX0NPTVBSRVNTSU9OICAgICAgIDkKKyNkZWZpbmUgTFpPMUJfREVGQVVMVF9DT01QUkVTU0lPTiAgKC0xKSAgICAgLyogZmFzdGVzdCBieSBkZWZhdWx0ICovCisKKworTFpPX0VYVEVSTihpbnQpCitsem8xYl9jb21wcmVzcyAgICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzaW9uX2xldmVsICk7CisKKy8qIGRlY29tcHJlc3Npb24gKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMWJfZGVjb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworLyogc2FmZSBkZWNvbXByZXNzaW9uIHdpdGggb3ZlcnJ1biB0ZXN0aW5nICovCitMWk9fRVhURVJOKGludCkKK2x6bzFiX2RlY29tcHJlc3Nfc2FmZSAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzFiXzFfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzJfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzNfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzRfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzVfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzZfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzdfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzhfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFiXzlfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8gYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgYW5kIHRpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8xQl85OV9NRU1fQ09NUFJFU1MgICAoKGx6b191aW50MzIpICg2NTUzNkwgKiBsem9fc2l6ZW9mX2RpY3RfdCkpCisKK0xaT19FWFRFUk4oaW50KQorbHpvMWJfOTlfY29tcHJlc3MgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisjZGVmaW5lIExaTzFCXzk5OV9NRU1fQ09NUFJFU1MgICgobHpvX3VpbnQzMikgKDMgKiA2NTUzNkwgKiBzaXplb2YobHpvX3hpbnQpKSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xYl85OTlfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzFjLmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwYTg2NWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xYy5oCkBAIC0wLDAgKzEsMTYwIEBACisvKiBsem8xYy5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFDIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMUNfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFDX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFDX01FTV9DT01QUkVTUyAgICAgICgobHpvX3VpbnQzMikgKDE2Mzg0TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMUNfTUVNX0RFQ09NUFJFU1MgICAgKDApCisKKworLyogY29tcHJlc3Npb24gbGV2ZWxzICovCisjZGVmaW5lIExaTzFDX0JFU1RfU1BFRUQgICAgICAgICAgICAgMQorI2RlZmluZSBMWk8xQ19CRVNUX0NPTVBSRVNTSU9OICAgICAgIDkKKyNkZWZpbmUgTFpPMUNfREVGQVVMVF9DT01QUkVTU0lPTiAgKC0xKSAgICAgLyogZmFzdGVzdCBieSBkZWZhdWx0ICovCisKKworTFpPX0VYVEVSTihpbnQpCitsem8xY19jb21wcmVzcyAgICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzaW9uX2xldmVsICk7CisKKy8qIGRlY29tcHJlc3Npb24gKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMWNfZGVjb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworLyogc2FmZSBkZWNvbXByZXNzaW9uIHdpdGggb3ZlcnJ1biB0ZXN0aW5nICovCitMWk9fRVhURVJOKGludCkKK2x6bzFjX2RlY29tcHJlc3Nfc2FmZSAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzFjXzFfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzJfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzNfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzRfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzVfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzZfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzdfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzhfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CitMWk9fRVhURVJOKGludCkKK2x6bzFjXzlfY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8gYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgYW5kIHRpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8xQ185OV9NRU1fQ09NUFJFU1MgICAoKGx6b191aW50MzIpICg2NTUzNkwgKiBsem9fc2l6ZW9mX2RpY3RfdCkpCisKK0xaT19FWFRFUk4oaW50KQorbHpvMWNfOTlfY29tcHJlc3MgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisjZGVmaW5lIExaTzFDXzk5OV9NRU1fQ09NUFJFU1MgICgobHpvX3VpbnQzMikgKDUgKiAxNjM4NEwgKiBzaXplb2Yoc2hvcnQpKSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xY185OTlfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzFmLmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1YmQyMzIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xZi5oCkBAIC0wLDAgKzEsMTA4IEBACisvKiBsem8xZi5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFGIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMUZfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFGX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFGX01FTV9DT01QUkVTUyAgICAgICgobHpvX3VpbnQzMikgKDE2Mzg0TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMUZfTUVNX0RFQ09NUFJFU1MgICAgKDApCisKKworLyogZGVjb21wcmVzc2lvbiAqLworTFpPX0VYVEVSTihpbnQpCitsem8xZl9kZWNvbXByZXNzICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLyApOworCisvKiBzYWZlIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcgKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMWZfZGVjb21wcmVzc19zYWZlICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19FWFRFUk4oaW50KQorbHpvMWZfMV9jb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGJldHRlciBjb21wcmVzc2lvbiByYXRpbyBhdCB0aGUgY29zdCBvZiBtb3JlIG1lbW9yeSBhbmQgdGltZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaTzFGXzk5OV9NRU1fQ09NUFJFU1MgICgobHpvX3VpbnQzMikgKDUgKiAxNjM4NEwgKiBzaXplb2Yoc2hvcnQpKSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xZl85OTlfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzF4LmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViN2NhZDcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xeC5oCkBAIC0wLDAgKzEsMTc3IEBACisvKiBsem8xeC5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFYIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMVhfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFYX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFYX01FTV9DT01QUkVTUyAgICAgIExaTzFYXzFfTUVNX0NPTVBSRVNTCisjZGVmaW5lIExaTzFYX01FTV9ERUNPTVBSRVNTICAgICgwKQorI2RlZmluZSBMWk8xWF9NRU1fT1BUSU1JWkUgICAgICAoMCkKKworCisvKiBkZWNvbXByZXNzaW9uICovCitMWk9fRVhURVJOKGludCkKK2x6bzF4X2RlY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKy8qIHNhZmUgZGVjb21wcmVzc2lvbiB3aXRoIG92ZXJydW4gdGVzdGluZyAqLworTFpPX0VYVEVSTihpbnQpCitsem8xeF9kZWNvbXByZXNzX3NhZmUgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLyApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8xWF8xX01FTV9DT01QUkVTUyAgICAoKGx6b191aW50MzIpICgxNjM4NEwgKiBsem9fc2l6ZW9mX2RpY3RfdCkpCisKK0xaT19FWFRFUk4oaW50KQorbHpvMXhfMV9jb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHNwZWNpYWwgY29tcHJlc3NvciB2ZXJzaW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiB0aGlzIHZlcnNpb24gbmVlZHMgb25seSA4IGtCIHdvcmsgbWVtb3J5ICovCisjZGVmaW5lIExaTzFYXzFfMTFfTUVNX0NPTVBSRVNTICgobHpvX3VpbnQzMikgKDIwNDhMICogbHpvX3NpemVvZl9kaWN0X3QpKQorCitMWk9fRVhURVJOKGludCkKK2x6bzF4XzFfMTFfY29tcHJlc3MgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKKworLyogdGhpcyB2ZXJzaW9uIG5lZWRzIDE2IGtCIHdvcmsgbWVtb3J5ICovCisjZGVmaW5lIExaTzFYXzFfMTJfTUVNX0NPTVBSRVNTICgobHpvX3VpbnQzMikgKDQwOTZMICogbHpvX3NpemVvZl9kaWN0X3QpKQorCitMWk9fRVhURVJOKGludCkKK2x6bzF4XzFfMTJfY29tcHJlc3MgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKKworLyogdXNlIHRoaXMgdmVyc2lvbiBpZiB5b3UgbmVlZCBhIGxpdHRsZSBtb3JlIGNvbXByZXNzaW9uIHNwZWVkICovCisjZGVmaW5lIExaTzFYXzFfMTVfTUVNX0NPTVBSRVNTICgobHpvX3VpbnQzMikgKDMyNzY4TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xeF8xXzE1X2NvbXByZXNzICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gYmV0dGVyIGNvbXByZXNzaW9uIHJhdGlvIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IGFuZCB0aW1lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPMVhfOTk5X01FTV9DT01QUkVTUyAgKChsem9fdWludDMyKSAoMTQgKiAxNjM4NEwgKiBzaXplb2Yoc2hvcnQpKSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xeF85OTlfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihpbnQpCitsem8xeF85OTlfY29tcHJlc3NfZGljdCAgICAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuICk7CisKK0xaT19FWFRFUk4oaW50KQorbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsICAgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19jYWxsYmFja19wIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbXByZXNzaW9uX2xldmVsICk7CisKK0xaT19FWFRFUk4oaW50KQorbHpvMXhfZGVjb21wcmVzc19kaWN0X3NhZmUgKCBjb25zdCBsem9fYnl0ZXAgaW4sICBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBvcHRpbWl6ZSBhIGNvbXByZXNzZWQgZGF0YSBibG9jaworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzF4X29wdGltaXplICAgICAgICAgICggICAgICAgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIGFscmVhZHkgaW5jbHVkZWQgKi8KKworCisvKiB2aW06c2V0IHRzPTQgZXQ6ICovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xeS5oIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvMXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTdmMTE3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvMXkuaApAQCAtMCwwICsxLDE0NSBAQAorLyogbHpvMXkuaCAtLSBwdWJsaWMgaW50ZXJmYWNlIG9mIHRoZSBMWk8xWSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2lmbmRlZiBfX0xaTzFZX0hfSU5DTFVERUQKKyNkZWZpbmUgX19MWk8xWV9IX0lOQ0xVREVECisKKyNpZm5kZWYgX19MWk9DT05GX0hfSU5DTFVERUQKKyNpbmNsdWRlICJsem9jb25mLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogTWVtb3J5IHJlcXVpcmVkIGZvciB0aGUgd3JrbWVtIHBhcmFtZXRlci4KKyAqIFdoZW4gdGhlIHJlcXVpcmVkIHNpemUgaXMgMCwgeW91IGNhbiBhbHNvIHBhc3MgYSBOVUxMIHBvaW50ZXIuCisgKi8KKworI2RlZmluZSBMWk8xWV9NRU1fQ09NUFJFU1MgICAgICAoKGx6b191aW50MzIpICgxNjM4NEwgKiBsem9fc2l6ZW9mX2RpY3RfdCkpCisjZGVmaW5lIExaTzFZX01FTV9ERUNPTVBSRVNTICAgICgwKQorI2RlZmluZSBMWk8xWV9NRU1fT1BUSU1JWkUgICAgICAoMCkKKworCisvKiBkZWNvbXByZXNzaW9uICovCitMWk9fRVhURVJOKGludCkKK2x6bzF5X2RlY29tcHJlc3MgICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKy8qIHNhZmUgZGVjb21wcmVzc2lvbiB3aXRoIG92ZXJydW4gdGVzdGluZyAqLworTFpPX0VYVEVSTihpbnQpCitsem8xeV9kZWNvbXByZXNzX3NhZmUgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLyApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihpbnQpCitsem8xeV8xX2NvbXByZXNzICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gYmV0dGVyIGNvbXByZXNzaW9uIHJhdGlvIGF0IHRoZSBjb3N0IG9mIG1vcmUgbWVtb3J5IGFuZCB0aW1lCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPMVlfOTk5X01FTV9DT01QUkVTUyAgKChsem9fdWludDMyKSAoMTQgKiAxNjM4NEwgKiBzaXplb2Yoc2hvcnQpKSkKKworTFpPX0VYVEVSTihpbnQpCitsem8xeV85OTlfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzF5Xzk5OV9jb21wcmVzc19kaWN0ICAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4gKTsKKworTFpPX0VYVEVSTihpbnQpCitsem8xeV85OTlfY29tcHJlc3NfbGV2ZWwgICAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcHJlc3Npb25fbGV2ZWwgKTsKKworTFpPX0VYVEVSTihpbnQpCitsem8xeV9kZWNvbXByZXNzX2RpY3Rfc2FmZSAoIGNvbnN0IGx6b19ieXRlcCBpbiwgIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG9wdGltaXplIGEgY29tcHJlc3NlZCBkYXRhIGJsb2NrCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19FWFRFUk4oaW50KQorbHpvMXlfb3B0aW1pemUgICAgICAgICAgKCAgICAgICBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLyApOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzF6LmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xei5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzNDFjMGMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8xei5oCkBAIC0wLDAgKzEsMTUwIEBACisvKiBsem8xei5oIC0tIHB1YmxpYyBpbnRlcmZhY2Ugb2YgdGhlIExaTzFaIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPMVpfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaTzFaX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFaX01FTV9DT01QUkVTUyAgICAgICgobHpvX3VpbnQzMikgKDE2Mzg0TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMVpfTUVNX0RFQ09NUFJFU1MgICAgKDApCisjZGVmaW5lIExaTzFaX01FTV9PUFRJTUlaRSAgICAgICgwKQorCisKKy8qIGRlY29tcHJlc3Npb24gKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMXpfZGVjb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworLyogc2FmZSBkZWNvbXByZXNzaW9uIHdpdGggb3ZlcnJ1biB0ZXN0aW5nICovCitMWk9fRVhURVJOKGludCkKK2x6bzF6X2RlY29tcHJlc3Nfc2FmZSAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgMAorLyogbm90IHlldCBpbXBsZW1lbnRlZCAqLworTFpPX0VYVEVSTihpbnQpCitsem8xel8xX2NvbXByZXNzICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8gYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgYW5kIHRpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8xWl85OTlfTUVNX0NPTVBSRVNTICAoKGx6b191aW50MzIpICgxNCAqIDE2Mzg0TCAqIHNpemVvZihzaG9ydCkpKQorCitMWk9fRVhURVJOKGludCkKK2x6bzF6Xzk5OV9jb21wcmVzcyAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzF6Xzk5OV9jb21wcmVzc19kaWN0ICAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4gKTsKKworTFpPX0VYVEVSTihpbnQpCitsem8xel85OTlfY29tcHJlc3NfbGV2ZWwgICAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tcHJlc3Npb25fbGV2ZWwgKTsKKworTFpPX0VYVEVSTihpbnQpCitsem8xel9kZWNvbXByZXNzX2RpY3Rfc2FmZSAoIGNvbnN0IGx6b19ieXRlcCBpbiwgIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4gKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG9wdGltaXplIGEgY29tcHJlc3NlZCBkYXRhIGJsb2NrCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAwCisvKiBub3QgeWV0IGltcGxlbWVudGVkICovCitMWk9fRVhURVJOKGludCkKK2x6bzF6X29wdGltaXplICAgICAgICAgICggICAgICAgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKyNlbmRpZgorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6bzJhLmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8yYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NjYyNDEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem8yYS5oCkBAIC0wLDAgKzEsOTIgQEAKKy8qIGx6bzJhLmggLS0gcHVibGljIGludGVyZmFjZSBvZiB0aGUgTFpPMkEgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZm5kZWYgX19MWk8yQV9IX0lOQ0xVREVECisjZGVmaW5lIF9fTFpPMkFfSF9JTkNMVURFRAorCisjaWZuZGVmIF9fTFpPQ09ORl9IX0lOQ0xVREVECisjaW5jbHVkZSAibHpvY29uZi5oIgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPMkFfTUVNX0RFQ09NUFJFU1MgICAgKDApCisKKy8qIGRlY29tcHJlc3Npb24gKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMmFfZGVjb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworLyogc2FmZSBkZWNvbXByZXNzaW9uIHdpdGggb3ZlcnJ1biB0ZXN0aW5nICovCitMWk9fRVhURVJOKGludCkKK2x6bzJhX2RlY29tcHJlc3Nfc2FmZSAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtIC8qIE5PVCBVU0VEICovICk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBiZXR0ZXIgY29tcHJlc3Npb24gcmF0aW8gYXQgdGhlIGNvc3Qgb2YgbW9yZSBtZW1vcnkgYW5kIHRpbWUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk8yQV85OTlfTUVNX0NPTVBSRVNTICAoKGx6b191aW50MzIpICg4ICogMTYzODRMICogc2l6ZW9mKHNob3J0KSkpCisKK0xaT19FWFRFUk4oaW50KQorbHpvMmFfOTk5X2NvbXByZXNzICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfSAvKiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIGFscmVhZHkgaW5jbHVkZWQgKi8KKworCisvKiB2aW06c2V0IHRzPTQgZXQ6ICovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9pbmNsdWRlL2x6by9sem9fYXNtLmggYi9sem8tMi4wMy9pbmNsdWRlL2x6by9sem9fYXNtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM1NjNhNgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b19hc20uaApAQCAtMCwwICsxLDEzOSBAQAorLyogbHpvX2FzbS5oIC0tIGFzc2VtYmxlciBwcm90b3R5cGVzIGZvciB0aGUgTFpPIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaWZuZGVmIF9fTFpPX0FTTV9IX0lOQ0xVREVECisjZGVmaW5lIF9fTFpPX0FTTV9IX0lOQ0xVREVECisKKyNpZm5kZWYgX19MWk9DT05GX0hfSU5DTFVERUQKKyNpbmNsdWRlICJsem9jb25mLmgiCisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gYXNzZW1ibHkgZGVjb21wcmVzc29ycworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkgbHpvMWNfZGVjb21wcmVzc19hc20KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtKTsKK0xaT19FWFRFUk4oaW50KSBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CisKK0xaT19FWFRFUk4oaW50KSBsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CitMWk9fRVhURVJOKGludCkgbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CisKK0xaT19FWFRFUk4oaW50KSBsem8xeF9kZWNvbXByZXNzX2FzbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0pOworTFpPX0VYVEVSTihpbnQpIGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtKTsKK0xaT19FWFRFUk4oaW50KSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CitMWk9fRVhURVJOKGludCkgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CisKK0xaT19FWFRFUk4oaW50KSBsem8xeV9kZWNvbXByZXNzX2FzbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0pOworTFpPX0VYVEVSTihpbnQpIGx6bzF5X2RlY29tcHJlc3NfYXNtX3NhZmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtKTsKK0xaT19FWFRFUk4oaW50KSBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CitMWk9fRVhURVJOKGludCkgbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSk7CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjaGVja3N1bSBhbmQgbWlzYyBmdW5jdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIDAKKworTFpPX0VYVEVSTihsem9fdWludDMyKQorbHpvX2NyYzMyX2FzbShsem9fdWludDMyIF9jLCBjb25zdCBsem9fYnl0ZXAgX2J1ZiwgbHpvX3VpbnQgX2xlbiwKKyAgICAgICAgICAgICAgY29uc3QgbHpvX3VpbnQzMnAgX2NyY190YWJsZSk7CisKK0xaT19FWFRFUk4obHpvX3VpbnQzMikKK2x6b19jcmMzMl9hc21fc21hbGwobHpvX3VpbnQzMiBfYywgY29uc3QgbHpvX2J5dGVwIF9idWYsIGx6b191aW50IF9sZW4pOworCitMWk9fRVhURVJOKGludCkKK2x6b19jcHVpZF9hc20obHpvX3VpbnQzMnAgLyogbHpvX3VpbnQzMiBpbmZvWzE2XSAqLyApOworCitMWk9fRVhURVJOKGx6b191aW50MzIpCitsem9fcmR0c2NfYXNtKGx6b191aW50MzJwIC8qIGx6b191aW50MzIgdGlja3NbMl0gKi8gKTsKKworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b2NvbmYuaCBiL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b2NvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzQzN2YxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvY29uZi5oCkBAIC0wLDAgKzEsNDE3IEBACisvKiBsem9jb25mLmggLS0gY29uZmlndXJhdGlvbiBmb3IgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZm5kZWYgX19MWk9DT05GX0hfSU5DTFVERUQKKyNkZWZpbmUgX19MWk9DT05GX0hfSU5DTFVERUQKKworI2RlZmluZSBMWk9fVkVSU0lPTiAgICAgICAgICAgICAweDIwMzAKKyNkZWZpbmUgTFpPX1ZFUlNJT05fU1RSSU5HICAgICAgIjIuMDMiCisjZGVmaW5lIExaT19WRVJTSU9OX0RBVEUgICAgICAgICJBcHIgMzAgMjAwOCIKKworLyogaW50ZXJuYWwgQXV0b2NvbmYgY29uZmlndXJhdGlvbiBmaWxlIC0gb25seSB1c2VkIHdoZW4gYnVpbGRpbmcgTFpPICovCisjaWYgZGVmaW5lZChMWk9fSEFWRV9DT05GSUdfSCkKKyMgIGluY2x1ZGUgPGNvbmZpZy5oPgorI2VuZGlmCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBMWk8gcmVxdWlyZXMgYSBjb25mb3JtaW5nIDxsaW1pdHMuaD4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKENIQVJfQklUKSB8fCAoQ0hBUl9CSVQgIT0gOCkKKyMgIGVycm9yICJpbnZhbGlkIENIQVJfQklUIgorI2VuZGlmCisjaWYgIWRlZmluZWQoVUNIQVJfTUFYKSB8fCAhZGVmaW5lZChVSU5UX01BWCkgfHwgIWRlZmluZWQoVUxPTkdfTUFYKQorIyAgZXJyb3IgImNoZWNrIHlvdXIgY29tcGlsZXIgaW5zdGFsbGF0aW9uIgorI2VuZGlmCisjaWYgKFVTSFJUX01BWCA8IDEpIHx8IChVSU5UX01BWCA8IDEpIHx8IChVTE9OR19NQVggPCAxKQorIyAgZXJyb3IgInlvdXIgbGltaXRzLmggbWFjcm9zIGFyZSBicm9rZW4iCisjZW5kaWYKKworLyogZ2V0IE9TIGFuZCBhcmNoaXRlY3R1cmUgZGVmaW5lcyAqLworI2lmbmRlZiBfX0xaT0RFRlNfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2RlZnMuaCIKKyNlbmRpZgorCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHNvbWUgY29yZSBkZWZpbmVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChMWk9fVUlOVDMyX0MpCisjICBpZiAoVUlOVF9NQVggPCBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fVUlOVDMyX0MoYykgICAgIGMgIyMgVUwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19VSU5UMzJfQyhjKSAgICAgKChjKSArIDBVKQorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBtZW1vcnkgY2hlY2tlcnMgKi8KKyNpZiAhZGVmaW5lZChfX0xaT19DSEVDS0VSKQorIyAgaWYgZGVmaW5lZChfX0JPVU5EU19DSEVDS0lOR19PTikKKyMgICAgZGVmaW5lIF9fTFpPX0NIRUNLRVIgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9fQ0hFQ0tFUl9fKQorIyAgICBkZWZpbmUgX19MWk9fQ0hFQ0tFUiAgICAgICAxCisjICBlbGlmIGRlZmluZWQoX19JTlNVUkVfXykKKyMgICAgZGVmaW5lIF9fTFpPX0NIRUNLRVIgICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9fUFVSSUZZX18pCisjICAgIGRlZmluZSBfX0xaT19DSEVDS0VSICAgICAgIDEKKyMgIGVuZGlmCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGludGVncmFsIGFuZCBwb2ludGVyIHR5cGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGx6b191aW50IHNob3VsZCBtYXRjaCBzaXplX3QgKi8KKyNpZiAhZGVmaW5lZChMWk9fVUlOVF9NQVgpCisjICBpZiBkZWZpbmVkKExaT19BQklfTExQNjQpIC8qIFdJTjY0ICovCisjICAgIGlmIGRlZmluZWQoTFpPX09TX1dJTjY0KQorICAgICB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgICBsem9fdWludDsKKyAgICAgdHlwZWRlZiBfX2ludDY0ICAgICAgICAgICAgbHpvX2ludDsKKyMgICAgZWxzZQorICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBsem9fdWludDsKKyAgICAgdHlwZWRlZiBsb25nIGxvbmcgICAgICAgICAgbHpvX2ludDsKKyMgICAgZW5kaWYKKyMgICAgZGVmaW5lIExaT19VSU5UX01BWCAgICAgICAgMHhmZmZmZmZmZmZmZmZmZmZmdWxsCisjICAgIGRlZmluZSBMWk9fSU5UX01BWCAgICAgICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorIyAgICBkZWZpbmUgTFpPX0lOVF9NSU4gICAgICAgICAoLTFMTCAtIExaT19JTlRfTUFYKQorIyAgZWxpZiBkZWZpbmVkKExaT19BQklfSVAzMkw2NCkgLyogTUlQUyBSNTkwMCAqLworICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICBsem9fdWludDsKKyAgICAgdHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgbHpvX2ludDsKKyMgICAgZGVmaW5lIExaT19VSU5UX01BWCAgICAgICAgVUlOVF9NQVgKKyMgICAgZGVmaW5lIExaT19JTlRfTUFYICAgICAgICAgSU5UX01BWAorIyAgICBkZWZpbmUgTFpPX0lOVF9NSU4gICAgICAgICBJTlRfTUlOCisjICBlbGlmIChVTE9OR19NQVggPj0gTFpPXzB4ZmZmZmZmZmZMKQorICAgICB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICBsem9fdWludDsKKyAgICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgbHpvX2ludDsKKyMgICAgZGVmaW5lIExaT19VSU5UX01BWCAgICAgICAgVUxPTkdfTUFYCisjICAgIGRlZmluZSBMWk9fSU5UX01BWCAgICAgICAgIExPTkdfTUFYCisjICAgIGRlZmluZSBMWk9fSU5UX01JTiAgICAgICAgIExPTkdfTUlOCisjICBlbHNlCisjICAgIGVycm9yICJsem9fdWludCIKKyMgIGVuZGlmCisjZW5kaWYKKworLyogSW50ZWdyYWwgdHlwZXMgd2l0aCAzMiBiaXRzIG9yIG1vcmUuICovCisjaWYgIWRlZmluZWQoTFpPX1VJTlQzMl9NQVgpCisjICBpZiAoVUlOVF9NQVggPj0gTFpPXzB4ZmZmZmZmZmZMKQorICAgICB0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICBsem9fdWludDMyOworICAgICB0eXBlZGVmIGludCAgICAgICAgICAgICAgICBsem9faW50MzI7CisjICAgIGRlZmluZSBMWk9fVUlOVDMyX01BWCAgICAgIFVJTlRfTUFYCisjICAgIGRlZmluZSBMWk9fSU5UMzJfTUFYICAgICAgIElOVF9NQVgKKyMgICAgZGVmaW5lIExaT19JTlQzMl9NSU4gICAgICAgSU5UX01JTgorIyAgZWxpZiAoVUxPTkdfTUFYID49IExaT18weGZmZmZmZmZmTCkKKyAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nICAgICAgbHpvX3VpbnQzMjsKKyAgICAgdHlwZWRlZiBsb25nICAgICAgICAgICAgICAgbHpvX2ludDMyOworIyAgICBkZWZpbmUgTFpPX1VJTlQzMl9NQVggICAgICBVTE9OR19NQVgKKyMgICAgZGVmaW5lIExaT19JTlQzMl9NQVggICAgICAgTE9OR19NQVgKKyMgICAgZGVmaW5lIExaT19JTlQzMl9NSU4gICAgICAgTE9OR19NSU4KKyMgIGVsc2UKKyMgICAgZXJyb3IgImx6b191aW50MzIiCisjICBlbmRpZgorI2VuZGlmCisKKy8qIFRoZSBsYXJnZXIgdHlwZSBvZiBsem9fdWludCBhbmQgbHpvX3VpbnQzMi4gKi8KKyNpZiAoTFpPX1VJTlRfTUFYID49IExaT19VSU5UMzJfTUFYKQorIyAgZGVmaW5lIGx6b194aW50ICAgICAgICAgICAgICBsem9fdWludAorI2Vsc2UKKyMgIGRlZmluZSBsem9feGludCAgICAgICAgICAgICAgbHpvX3VpbnQzMgorI2VuZGlmCisKKy8qIE1lbW9yeSBtb2RlbCB0aGF0IGFsbG93cyB0byBhY2Nlc3MgbWVtb3J5IGF0IG9mZnNldHMgb2YgbHpvX3VpbnQuICovCisjaWYgIWRlZmluZWQoX19MWk9fTU1PREVMKQorIyAgaWYgKExaT19VSU5UX01BWCA8PSBVSU5UX01BWCkKKyMgICAgZGVmaW5lIF9fTFpPX01NT0RFTAorIyAgZWxpZiBkZWZpbmVkKExaT19IQVZFX01NX0hVR0VfUFRSKQorIyAgICBkZWZpbmUgX19MWk9fTU1PREVMX0hVR0UgICAxCisjICAgIGRlZmluZSBfX0xaT19NTU9ERUwgICAgICAgIF9faHVnZQorIyAgZWxzZQorIyAgICBkZWZpbmUgX19MWk9fTU1PREVMCisjICBlbmRpZgorI2VuZGlmCisKKy8qIG5vIHR5cGVkZWYgaGVyZSBiZWNhdXNlIG9mIGNvbnN0LXBvaW50ZXIgaXNzdWVzICovCisjZGVmaW5lIGx6b19ieXRlcCAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgX19MWk9fTU1PREVMICoKKyNkZWZpbmUgbHpvX2NoYXJwICAgICAgICAgICAgICAgY2hhciBfX0xaT19NTU9ERUwgKgorI2RlZmluZSBsem9fdm9pZHAgICAgICAgICAgICAgICB2b2lkIF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b19zaG9ydHAgICAgICAgICAgICAgIHNob3J0IF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b191c2hvcnRwICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b191aW50MzJwICAgICAgICAgICAgIGx6b191aW50MzIgX19MWk9fTU1PREVMICoKKyNkZWZpbmUgbHpvX2ludDMycCAgICAgICAgICAgICAgbHpvX2ludDMyIF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b191aW50cCAgICAgICAgICAgICAgIGx6b191aW50IF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b19pbnRwICAgICAgICAgICAgICAgIGx6b19pbnQgX19MWk9fTU1PREVMICoKKyNkZWZpbmUgbHpvX3hpbnRwICAgICAgICAgICAgICAgbHpvX3hpbnQgX19MWk9fTU1PREVMICoKKyNkZWZpbmUgbHpvX3ZvaWRwcCAgICAgICAgICAgICAgbHpvX3ZvaWRwIF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIGx6b19ieXRlcHAgICAgICAgICAgICAgIGx6b19ieXRlcCBfX0xaT19NTU9ERUwgKgorLyogZGVwcmVjYXRlZCAtIHVzZSBgbHpvX2J5dGVwJyBpbnN0ZWFkIG9mIGBsem9fYnl0ZSAqJyAqLworI2RlZmluZSBsem9fYnl0ZSAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIF9fTFpPX01NT0RFTAorCit0eXBlZGVmIGludCBsem9fYm9vbDsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGZ1bmN0aW9uIHR5cGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIG5hbWUgbWFuZ2xpbmcgKi8KKyNpZiAhZGVmaW5lZChfX0xaT19FWFRFUk5fQykKKyMgIGlmZGVmIF9fY3BsdXNwbHVzCisjICAgIGRlZmluZSBfX0xaT19FWFRFUk5fQyAgICAgIGV4dGVybiAiQyIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fTFpPX0VYVEVSTl9DICAgICAgZXh0ZXJuCisjICBlbmRpZgorI2VuZGlmCisKKy8qIGNhbGxpbmcgY29udmVudGlvbiAqLworI2lmICFkZWZpbmVkKF9fTFpPX0NERUNMKQorIyAgZGVmaW5lIF9fTFpPX0NERUNMICAgICAgICAgICBfX2x6b19jZGVjbAorI2VuZGlmCisKKy8qIERMTCBleHBvcnQgaW5mb3JtYXRpb24gKi8KKyNpZiAhZGVmaW5lZChfX0xaT19FWFBPUlQxKQorIyAgZGVmaW5lIF9fTFpPX0VYUE9SVDEKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fTFpPX0VYUE9SVDIpCisjICBkZWZpbmUgX19MWk9fRVhQT1JUMgorI2VuZGlmCisKKy8qIF9fY2RlY2wgY2FsbGluZyBjb252ZW50aW9uIGZvciBwdWJsaWMgQyBhbmQgYXNzZW1ibHkgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoTFpPX1BVQkxJQykKKyMgIGRlZmluZSBMWk9fUFVCTElDKF9yZXR0eXBlKSAgX19MWk9fRVhQT1JUMSBfcmV0dHlwZSBfX0xaT19FWFBPUlQyIF9fTFpPX0NERUNMCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fRVhURVJOKQorIyAgZGVmaW5lIExaT19FWFRFUk4oX3JldHR5cGUpICBfX0xaT19FWFRFUk5fQyBMWk9fUFVCTElDKF9yZXR0eXBlKQorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1BSSVZBVEUpCisjICBkZWZpbmUgTFpPX1BSSVZBVEUoX3JldHR5cGUpIHN0YXRpYyBfcmV0dHlwZSBfX0xaT19DREVDTAorI2VuZGlmCisKKy8qIGZ1bmN0aW9uIHR5cGVzICovCit0eXBlZGVmIGludAorKF9fTFpPX0NERUNMICpsem9fY29tcHJlc3NfdCkgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKwordHlwZWRlZiBpbnQKKyhfX0xaT19DREVDTCAqbHpvX2RlY29tcHJlc3NfdCkgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICk7CisKK3R5cGVkZWYgaW50CisoX19MWk9fQ0RFQ0wgKmx6b19vcHRpbWl6ZV90KSAgICggICAgICAgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApOworCit0eXBlZGVmIGludAorKF9fTFpPX0NERUNMICpsem9fY29tcHJlc3NfZGljdF90KShjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbiApOworCit0eXBlZGVmIGludAorKF9fTFpPX0NERUNMICpsem9fZGVjb21wcmVzc19kaWN0X3QpKGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuICk7CisKKworLyogQ2FsbGJhY2sgaW50ZXJmYWNlLiBDdXJyZW50bHkgb25seSB0aGUgcHJvZ3Jlc3MgaW5kaWNhdG9yICgibnByb2dyZXNzIikKKyAqIGlzIHVzZWQsIGJ1dCB0aGlzIG1heSBjaGFuZ2UgaW4gYSBmdXR1cmUgcmVsZWFzZS4gKi8KKworc3RydWN0IGx6b19jYWxsYmFja190OwordHlwZWRlZiBzdHJ1Y3QgbHpvX2NhbGxiYWNrX3QgbHpvX2NhbGxiYWNrX3Q7CisjZGVmaW5lIGx6b19jYWxsYmFja19wIGx6b19jYWxsYmFja190IF9fTFpPX01NT0RFTCAqCisKKy8qIG1hbGxvYyAmIGZyZWUgZnVuY3Rpb24gdHlwZXMgKi8KK3R5cGVkZWYgbHpvX3ZvaWRwIChfX0xaT19DREVDTCAqbHpvX2FsbG9jX2Z1bmNfdCkKKyAgICAobHpvX2NhbGxiYWNrX3Agc2VsZiwgbHpvX3VpbnQgaXRlbXMsIGx6b191aW50IHNpemUpOwordHlwZWRlZiB2b2lkICAgICAgKF9fTFpPX0NERUNMICpsem9fZnJlZV9mdW5jX3QpCisgICAgKGx6b19jYWxsYmFja19wIHNlbGYsIGx6b192b2lkcCBwdHIpOworCisvKiBhIHByb2dyZXNzIGluZGljYXRvciBjYWxsYmFjayBmdW5jdGlvbiAqLwordHlwZWRlZiB2b2lkIChfX0xaT19DREVDTCAqbHpvX3Byb2dyZXNzX2Z1bmNfdCkKKyAgICAobHpvX2NhbGxiYWNrX3AsIGx6b191aW50LCBsem9fdWludCwgaW50KTsKKworc3RydWN0IGx6b19jYWxsYmFja190Cit7CisgICAgLyogY3VzdG9tIGFsbG9jYXRvcnMgKHNldCB0byAwIHRvIGRpc2FibGUpICovCisgICAgbHpvX2FsbG9jX2Z1bmNfdCBuYWxsb2M7ICAgICAgICAgICAgICAgIC8qIFtub3QgdXNlZCByaWdodCBub3ddICovCisgICAgbHpvX2ZyZWVfZnVuY190IG5mcmVlOyAgICAgICAgICAgICAgICAgIC8qIFtub3QgdXNlZCByaWdodCBub3ddICovCisKKyAgICAvKiBhIHByb2dyZXNzIGluZGljYXRvciBjYWxsYmFjayBmdW5jdGlvbiAoc2V0IHRvIDAgdG8gZGlzYWJsZSkgKi8KKyAgICBsem9fcHJvZ3Jlc3NfZnVuY190IG5wcm9ncmVzczsKKworICAgIC8qIE5PVEU6IHRoZSBmaXJzdCBwYXJhbWV0ZXIgInNlbGYiIG9mIHRoZSBuYWxsb2MvbmZyZWUvbnByb2dyZXNzCisgICAgICogY2FsbGJhY2tzIHBvaW50cyBiYWNrIHRvIHRoaXMgc3RydWN0LCBzbyB5b3UgYXJlIGZyZWUgdG8gc3RvcmUKKyAgICAgKiBzb21lIGV4dHJhIGluZm8gaW4gdGhlIGZvbGxvd2luZyB2YXJpYWJsZXMuICovCisgICAgbHpvX3ZvaWRwIHVzZXIxOworICAgIGx6b194aW50IHVzZXIyOworICAgIGx6b194aW50IHVzZXIzOworfTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGVycm9yIGNvZGVzIGFuZCBwcm90b3R5cGVzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIEVycm9yIGNvZGVzIGZvciB0aGUgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBmdW5jdGlvbnMuIE5lZ2F0aXZlCisgKiB2YWx1ZXMgYXJlIGVycm9ycywgcG9zaXRpdmUgdmFsdWVzIHdpbGwgYmUgdXNlZCBmb3Igc3BlY2lhbCBidXQKKyAqIG5vcm1hbCBldmVudHMuCisgKi8KKyNkZWZpbmUgTFpPX0VfT0sgICAgICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgTFpPX0VfRVJST1IgICAgICAgICAgICAgICAgICgtMSkKKyNkZWZpbmUgTFpPX0VfT1VUX09GX01FTU9SWSAgICAgICAgICgtMikgICAgLyogW25vdCB1c2VkIHJpZ2h0IG5vd10gKi8KKyNkZWZpbmUgTFpPX0VfTk9UX0NPTVBSRVNTSUJMRSAgICAgICgtMykgICAgLyogW25vdCB1c2VkIHJpZ2h0IG5vd10gKi8KKyNkZWZpbmUgTFpPX0VfSU5QVVRfT1ZFUlJVTiAgICAgICAgICgtNCkKKyNkZWZpbmUgTFpPX0VfT1VUUFVUX09WRVJSVU4gICAgICAgICgtNSkKKyNkZWZpbmUgTFpPX0VfTE9PS0JFSElORF9PVkVSUlVOICAgICgtNikKKyNkZWZpbmUgTFpPX0VfRU9GX05PVF9GT1VORCAgICAgICAgICgtNykKKyNkZWZpbmUgTFpPX0VfSU5QVVRfTk9UX0NPTlNVTUVEICAgICgtOCkKKyNkZWZpbmUgTFpPX0VfTk9UX1lFVF9JTVBMRU1FTlRFRCAgICgtOSkgICAgLyogW25vdCB1c2VkIHJpZ2h0IG5vd10gKi8KKworCisjaWZuZGVmIGx6b19zaXplb2ZfZGljdF90CisjICBkZWZpbmUgbHpvX3NpemVvZl9kaWN0X3QgICAgICgodW5zaWduZWQpc2l6ZW9mKGx6b19ieXRlcCkpCisjZW5kaWYKKworLyogbHpvX2luaXQoKSBzaG91bGQgYmUgdGhlIGZpcnN0IGZ1bmN0aW9uIHlvdSBjYWxsLgorICogQ2hlY2sgdGhlIHJldHVybiBjb2RlICEKKyAqCisgKiBsem9faW5pdCgpIGlzIGEgbWFjcm8gdG8gYWxsb3cgY2hlY2tpbmcgdGhhdCB0aGUgbGlicmFyeSBhbmQgdGhlCisgKiBjb21waWxlcidzIHZpZXcgb2YgdmFyaW91cyB0eXBlcyBhcmUgY29uc2lzdGVudC4KKyAqLworI2RlZmluZSBsem9faW5pdCgpIF9fbHpvX2luaXRfdjIoTFpPX1ZFUlNJT04sKGludClzaXplb2Yoc2hvcnQpLChpbnQpc2l6ZW9mKGludCksXAorICAgIChpbnQpc2l6ZW9mKGxvbmcpLChpbnQpc2l6ZW9mKGx6b191aW50MzIpLChpbnQpc2l6ZW9mKGx6b191aW50KSxcCisgICAgKGludClsem9fc2l6ZW9mX2RpY3RfdCwoaW50KXNpemVvZihjaGFyICopLChpbnQpc2l6ZW9mKGx6b192b2lkcCksXAorICAgIChpbnQpc2l6ZW9mKGx6b19jYWxsYmFja190KSkKK0xaT19FWFRFUk4oaW50KSBfX2x6b19pbml0X3YyKHVuc2lnbmVkLGludCxpbnQsaW50LGludCxpbnQsaW50LGludCxpbnQsaW50KTsKKworLyogdmVyc2lvbiBmdW5jdGlvbnMgKHVzZWZ1bCBmb3Igc2hhcmVkIGxpYnJhcmllcykgKi8KK0xaT19FWFRFUk4odW5zaWduZWQpIGx6b192ZXJzaW9uKHZvaWQpOworTFpPX0VYVEVSTihjb25zdCBjaGFyICopIGx6b192ZXJzaW9uX3N0cmluZyh2b2lkKTsKK0xaT19FWFRFUk4oY29uc3QgY2hhciAqKSBsem9fdmVyc2lvbl9kYXRlKHZvaWQpOworTFpPX0VYVEVSTihjb25zdCBsem9fY2hhcnApIF9sem9fdmVyc2lvbl9zdHJpbmcodm9pZCk7CitMWk9fRVhURVJOKGNvbnN0IGx6b19jaGFycCkgX2x6b192ZXJzaW9uX2RhdGUodm9pZCk7CisKKy8qIHN0cmluZyBmdW5jdGlvbnMgKi8KK0xaT19FWFRFUk4oaW50KQorbHpvX21lbWNtcChjb25zdCBsem9fdm9pZHAgX3MxLCBjb25zdCBsem9fdm9pZHAgX3MyLCBsem9fdWludCBfbGVuKTsKK0xaT19FWFRFUk4obHpvX3ZvaWRwKQorbHpvX21lbWNweShsem9fdm9pZHAgX2Rlc3QsIGNvbnN0IGx6b192b2lkcCBfc3JjLCBsem9fdWludCBfbGVuKTsKK0xaT19FWFRFUk4obHpvX3ZvaWRwKQorbHpvX21lbW1vdmUobHpvX3ZvaWRwIF9kZXN0LCBjb25zdCBsem9fdm9pZHAgX3NyYywgbHpvX3VpbnQgX2xlbik7CitMWk9fRVhURVJOKGx6b192b2lkcCkKK2x6b19tZW1zZXQobHpvX3ZvaWRwIF9zLCBpbnQgX2MsIGx6b191aW50IF9sZW4pOworCisvKiBjaGVja3N1bSBmdW5jdGlvbnMgKi8KK0xaT19FWFRFUk4obHpvX3VpbnQzMikKK2x6b19hZGxlcjMyKGx6b191aW50MzIgX2FkbGVyLCBjb25zdCBsem9fYnl0ZXAgX2J1ZiwgbHpvX3VpbnQgX2xlbik7CitMWk9fRVhURVJOKGx6b191aW50MzIpCitsem9fY3JjMzIobHpvX3VpbnQzMiBfYywgY29uc3QgbHpvX2J5dGVwIF9idWYsIGx6b191aW50IF9sZW4pOworTFpPX0VYVEVSTihjb25zdCBsem9fdWludDMycCkKK2x6b19nZXRfY3JjMzJfdGFibGUodm9pZCk7CisKKy8qIG1pc2MuICovCitMWk9fRVhURVJOKGludCkgX2x6b19jb25maWdfY2hlY2sodm9pZCk7Cit0eXBlZGVmIHVuaW9uIHsgbHpvX2J5dGVwIHA7IGx6b191aW50IHU7IH0gX19sem9fcHVfdTsKK3R5cGVkZWYgdW5pb24geyBsem9fYnl0ZXAgcDsgbHpvX3VpbnQzMiB1MzI7IH0gX19sem9fcHUzMl91OwordHlwZWRlZiB1bmlvbiB7IHZvaWQgKnZwOyBsem9fYnl0ZXAgYnA7IGx6b191aW50MzIgdTMyOyBsb25nIGw7IH0gbHpvX2FsaWduX3Q7CisKKy8qIGFsaWduIGEgY2hhciBwb2ludGVyIG9uIGEgYm91bmRhcnkgdGhhdCBpcyBhIG11bHRpcGxlIG9mIGBzaXplJyAqLworTFpPX0VYVEVSTih1bnNpZ25lZCkgX19sem9fYWxpZ25fZ2FwKGNvbnN0IGx6b192b2lkcCBfcHRyLCBsem9fdWludCBfc2l6ZSk7CisjZGVmaW5lIExaT19QVFJfQUxJR05fVVAoX3B0cixfc2l6ZSkgXAorICAgICgoX3B0cikgKyAobHpvX3VpbnQpIF9fbHpvX2FsaWduX2dhcCgoY29uc3QgbHpvX3ZvaWRwKShfcHRyKSwobHpvX3VpbnQpKF9zaXplKSkpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkZXByZWNhdGVkIG1hY3JvcyAtIG9ubHkgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgd2l0aCBMWk8gdjEueHgKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX0NGR19DT01QQVQpCisKKyNkZWZpbmUgX19MWk9DT05GX0ggMQorCisjaWYgZGVmaW5lZChMWk9fQVJDSF9JMDg2KQorIyAgZGVmaW5lIF9fTFpPX2kzODYgMQorI2VsaWYgZGVmaW5lZChMWk9fQVJDSF9JMzg2KQorIyAgZGVmaW5lIF9fTFpPX2kzODYgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19PU19ET1MxNikKKyMgIGRlZmluZSBfX0xaT19ET1MgMQorIyAgZGVmaW5lIF9fTFpPX0RPUzE2IDEKKyNlbGlmIGRlZmluZWQoTFpPX09TX0RPUzMyKQorIyAgZGVmaW5lIF9fTFpPX0RPUyAxCisjZWxpZiBkZWZpbmVkKExaT19PU19XSU4xNikKKyMgIGRlZmluZSBfX0xaT19XSU4gMQorIyAgZGVmaW5lIF9fTFpPX1dJTjE2IDEKKyNlbGlmIGRlZmluZWQoTFpPX09TX1dJTjMyKQorIyAgZGVmaW5lIF9fTFpPX1dJTiAxCisjZW5kaWYKKworI2RlZmluZSBfX0xaT19DTU9ERUwKKyNkZWZpbmUgX19MWk9fRE1PREVMCisjZGVmaW5lIF9fTFpPX0VOVFJZICAgICAgICAgICAgIF9fTFpPX0NERUNMCisjZGVmaW5lIExaT19FWFRFUk5fQ0RFQ0wgICAgICAgIExaT19FWFRFUk4KKyNkZWZpbmUgTFpPX0FMSUdOICAgICAgICAgICAgICAgTFpPX1BUUl9BTElHTl9VUAorCisjZGVmaW5lIGx6b19jb21wcmVzc19hc21fdCAgICAgIGx6b19jb21wcmVzc190CisjZGVmaW5lIGx6b19kZWNvbXByZXNzX2FzbV90ICAgIGx6b19kZWNvbXByZXNzX3QKKworI2VuZGlmIC8qIExaT19DRkdfQ09NUEFUICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b2RlZnMuaCBiL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODA1NjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvZGVmcy5oCkBAIC0wLDAgKzEsMTgwNyBAQAorLyogbHpvZGVmcy5oIC0tIGFyY2hpdGVjdHVyZSwgT1MgYW5kIGNvbXBpbGVyIHNwZWNpZmljIGRlZmluZXMKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2lmbmRlZiBfX0xaT0RFRlNfSF9JTkNMVURFRAorI2RlZmluZSBfX0xaT0RFRlNfSF9JTkNMVURFRCAxCisKKyNpZiBkZWZpbmVkKF9fQ1lHV0lOMzJfXykgJiYgIWRlZmluZWQoX19DWUdXSU5fXykKKyMgIGRlZmluZSBfX0NZR1dJTl9fIF9fQ1lHV0lOMzJfXworI2VuZGlmCisjaWYgZGVmaW5lZChfX0lCTUNQUF9fKSAmJiAhZGVmaW5lZChfX0lCTUNfXykKKyMgIGRlZmluZSBfX0lCTUNfXyBfX0lCTUNQUF9fCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fSUNMKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyMgIGRlZmluZSBfX0lOVEVMX0NPTVBJTEVSIF9fSUNMCisjZW5kaWYKKyNpZiAxICYmIGRlZmluZWQoX19JTlRFUklYKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhZGVmaW5lZChfQUxMX1NPVVJDRSkKKyMgIGRlZmluZSBfQUxMX1NPVVJDRSAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fUjU5MDBfXykKKyMgIGlmICFkZWZpbmVkKF9fTE9OR19NQVhfXykKKyMgICAgZGVmaW5lIF9fTE9OR19NQVhfXyA5MjIzMzcyMDM2ODU0Nzc1ODA3TAorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgZGVmaW5lZChfX2xpbnV4X18pCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiAxOTMpCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fS0VJTF9fKSAmJiBkZWZpbmVkKF9fQzE2Nl9fKQorIyAgcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSA9IDMyMgorI2VsaWYgMCAmJiBkZWZpbmVkKF9fQzI1MV9fKQorIyAgcHJhZ21hIHdhcm5pbmcgZGlzYWJsZSA9IDMyMgorI2VuZGlmCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgIWRlZmluZWQoX19JTlRFTF9DT01QSUxFUikgJiYgIWRlZmluZWQoX19NV0VSS1NfXykKKyMgIGlmIChfTVNDX1ZFUiA+PSAxMzAwKQorIyAgICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0NjY4KQorIyAgZW5kaWYKKyNlbmRpZgorI2lmIDAgJiYgZGVmaW5lZChfX1dBVENPTUNfXykKKyMgIGlmIChfX1dBVENPTUNfXyA+PSAxMDUwKSAmJiAoX19XQVRDT01DX18gPCAxMDYwKQorIyAgICBwcmFnbWEgd2FybmluZyAyMDMgOQorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkKF9fTVNET1NfXykgJiYgIWRlZmluZWQoX19GTEFUX18pCisjICBwcmFnbWEgb3B0aW9uIC1oCisjZW5kaWYKKyNpZiAwCisjZGVmaW5lIExaT18weGZmZmZMICAgICAgICAgICAgIDB4ZmZmZnVsCisjZGVmaW5lIExaT18weGZmZmZmZmZmTCAgICAgICAgIDB4ZmZmZmZmZmZ1bAorI2Vsc2UKKyNkZWZpbmUgTFpPXzB4ZmZmZkwgICAgICAgICAgICAgNjU1MzV1bAorI2RlZmluZSBMWk9fMHhmZmZmZmZmZkwgICAgICAgICA0Mjk0OTY3Mjk1dWwKKyNlbmRpZgorI2lmIChMWk9fMHhmZmZmTCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDEiCisjZW5kaWYKKyNpZiAoMTZ1bCAqIDE2Mzg0dWwgIT0gMjYyMTQ0dWwpCisjICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDIiCisjZW5kaWYKKyNpZiAwCisjaWYgKDMyNzY3ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gMyIKKyNlbmRpZgorI2lmICg2NTUzNXUgPj0gNDI5NDk2NzI5NXVsKQorIyAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiA0IgorI2VuZGlmCisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjaWYgZGVmaW5lZChfX1pUQ19fKSAmJiBkZWZpbmVkKF9fSTg2X18pICYmICFkZWZpbmVkKF9fT1MyX18pCisjICBpZiAhZGVmaW5lZChNU0RPUykKKyMgICAgZGVmaW5lIE1TRE9TIDEKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChfTVNET1MpCisjICAgIGRlZmluZSBfTVNET1MgMQorIyAgZW5kaWYKKyNlbGlmIDAgJiYgZGVmaW5lZChfX1ZFUlNJT04pICYmIGRlZmluZWQoTUJfTEVOX01BWCkKKyMgIGlmIChfX1ZFUlNJT04gPT0gNTIwKSAmJiAoTUJfTEVOX01BWCA9PSAxKQorIyAgICBpZiAhZGVmaW5lZChfX0FaVEVDX0NfXykKKyMgICAgICBkZWZpbmUgX19BWlRFQ19DX18gX19WRVJTSU9OCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fRE9TX18pCisjICAgICAgZGVmaW5lIF9fRE9TX18gMQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChNX0k4NkhNKSAmJiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICBkZWZpbmUgcHRyZGlmZl90IGxvbmcKKyMgIGRlZmluZSBfUFRSRElGRl9UX0RFRklORUQKKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgIHVuZGVmIF9fTFpPX1JFTkFNRV9BCisjICB1bmRlZiBfX0xaT19SRU5BTUVfQgorIyAgaWYgZGVmaW5lZChfX0FaVEVDX0NfXykgJiYgZGVmaW5lZChfX0RPU19fKQorIyAgICBkZWZpbmUgX19MWk9fUkVOQU1FX0EgMQorIyAgZWxpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiBkZWZpbmVkKE1TRE9TKQorIyAgICBpZiAoX01TQ19WRVIgPCA2MDApCisjICAgICAgZGVmaW5lIF9fTFpPX1JFTkFNRV9BIDEKKyMgICAgZWxpZiAoX01TQ19WRVIgPCA3MDApCisjICAgICAgZGVmaW5lIF9fTFpPX1JFTkFNRV9CIDEKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfX1RTQ19fKSAmJiBkZWZpbmVkKF9fT1MyX18pCisjICAgIGRlZmluZSBfX0xaT19SRU5BTUVfQSAxCisjICBlbGlmIGRlZmluZWQoX19NU0RPU19fKSAmJiBkZWZpbmVkKF9fVFVSQk9DX18pICYmIChfX1RVUkJPQ19fIDwgMHgwNDEwKQorIyAgICBkZWZpbmUgX19MWk9fUkVOQU1FX0EgMQorIyAgZWxpZiBkZWZpbmVkKF9fUEFDSUZJQ19fKSAmJiBkZWZpbmVkKERPUykKKyMgICAgaWYgIWRlZmluZWQoX19mYXIpCisjICAgICAgZGVmaW5lIF9fZmFyIGZhcgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX25lYXIpCisjICAgICAgZGVmaW5lIF9fbmVhciBuZWFyCisjICAgIGVuZGlmCisjICBlbmRpZgorIyAgaWYgZGVmaW5lZChfX0xaT19SRU5BTUVfQSkKKyMgICAgaWYgIWRlZmluZWQoX19jZGVjbCkKKyMgICAgICBkZWZpbmUgX19jZGVjbCBjZGVjbAorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX2ZhcikKKyMgICAgICBkZWZpbmUgX19mYXIgZmFyCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9faHVnZSkKKyMgICAgICBkZWZpbmUgX19odWdlIGh1Z2UKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19uZWFyKQorIyAgICAgIGRlZmluZSBfX25lYXIgbmVhcgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX3Bhc2NhbCkKKyMgICAgICBkZWZpbmUgX19wYXNjYWwgcGFzY2FsCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9faHVnZSkKKyMgICAgICBkZWZpbmUgX19odWdlIGh1Z2UKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfX0xaT19SRU5BTUVfQikKKyMgICAgaWYgIWRlZmluZWQoX19jZGVjbCkKKyMgICAgICBkZWZpbmUgX19jZGVjbCBfY2RlY2wKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19mYXIpCisjICAgICAgZGVmaW5lIF9fZmFyIF9mYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19odWdlKQorIyAgICAgIGRlZmluZSBfX2h1Z2UgX2h1Z2UKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19uZWFyKQorIyAgICAgIGRlZmluZSBfX25lYXIgX25lYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19wYXNjYWwpCisjICAgICAgZGVmaW5lIF9fcGFzY2FsIF9wYXNjYWwKKyMgICAgZW5kaWYKKyMgIGVsaWYgKGRlZmluZWQoX19QVVJFQ19fKSB8fCBkZWZpbmVkKF9fVFVSQk9DX18pKSAmJiBkZWZpbmVkKF9fVE9TX18pCisjICAgIGlmICFkZWZpbmVkKF9fY2RlY2wpCisjICAgICAgZGVmaW5lIF9fY2RlY2wgY2RlY2wKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19wYXNjYWwpCisjICAgICAgZGVmaW5lIF9fcGFzY2FsIHBhc2NhbAorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIHVuZGVmIF9fTFpPX1JFTkFNRV9BCisjICB1bmRlZiBfX0xaT19SRU5BTUVfQgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorI2lmIGRlZmluZWQoX19BWlRFQ19DX18pICYmIGRlZmluZWQoX19ET1NfXykKKyMgIGRlZmluZSBMWk9fQlJPS0VOX0NERUNMX0FMVF9TWU5UQVggMQorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChNU0RPUykKKyMgIGlmIChfTVNDX1ZFUiA8IDYwMCkKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTIDEKKyMgIGVuZGlmCisjICBpZiAoX01TQ19WRVIgPCA3MDApCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX0lOVEVHUkFMX1BST01PVElPTiAxCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX1NJWkVPRiAxCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX1BBQ0lGSUNfXykgJiYgZGVmaW5lZChET1MpCisjICBkZWZpbmUgTFpPX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMgMQorI2VsaWYgZGVmaW5lZChfX1RVUkJPQ19fKSAmJiBkZWZpbmVkKF9fTVNET1NfXykKKyMgIGlmIChfX1RVUkJPQ19fIDwgMHgwMTUwKQorIyAgICBkZWZpbmUgTFpPX0JST0tFTl9DREVDTF9BTFRfU1lOVEFYIDEKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTIDEKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fSU5URUdSQUxfUFJPTU9USU9OIDEKKyMgIGVuZGlmCisjICBpZiAoX19UVVJCT0NfXyA8IDB4MDIwMCkKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fU0laRU9GIDEKKyMgIGVuZGlmCisjICBpZiAoX19UVVJCT0NfXyA8IDB4MDQwMCkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fQ0RFQ0xfQUxUX1NZTlRBWCAxCisjICBlbmRpZgorI2VsaWYgKGRlZmluZWQoX19QVVJFQ19fKSB8fCBkZWZpbmVkKF9fVFVSQk9DX18pKSAmJiBkZWZpbmVkKF9fVE9TX18pCisjICBkZWZpbmUgTFpPX0JST0tFTl9DREVDTF9BTFRfU1lOVEFYIDEKKyMgIGRlZmluZSBMWk9fQlJPS0VOX1NJWkVPRiAxCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19XQVRDT01DX18pICYmIChfX1dBVENPTUNfXyA8IDkwMCkKKyMgIGRlZmluZSBMWk9fQlJPS0VOX0lOVEVHUkFMX0NPTlNUQU5UUyAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9DUkFZKSAmJiBkZWZpbmVkKF9DUkFZMSkKKyMgIGRlZmluZSBMWk9fQlJPS0VOX1NJR05FRF9SSUdIVF9TSElGVCAxCisjZW5kaWYKKyNkZWZpbmUgTFpPX1BQX1NUUklOR0laRSh4KSAgICAgICAgICAgICAjeAorI2RlZmluZSBMWk9fUFBfTUFDUk9fRVhQQU5EKHgpICAgICAgICAgIExaT19QUF9TVFJJTkdJWkUoeCkKKyNkZWZpbmUgTFpPX1BQX0NPTkNBVDIoYSxiKSAgICAgICAgICAgICBhICMjIGIKKyNkZWZpbmUgTFpPX1BQX0NPTkNBVDMoYSxiLGMpICAgICAgICAgICBhICMjIGIgIyMgYworI2RlZmluZSBMWk9fUFBfQ09OQ0FUNChhLGIsYyxkKSAgICAgICAgIGEgIyMgYiAjIyBjICMjIGQKKyNkZWZpbmUgTFpPX1BQX0NPTkNBVDUoYSxiLGMsZCxlKSAgICAgICBhICMjIGIgIyMgYyAjIyBkICMjIGUKKyNkZWZpbmUgTFpPX1BQX0VDT05DQVQyKGEsYikgICAgICAgICAgICBMWk9fUFBfQ09OQ0FUMihhLGIpCisjZGVmaW5lIExaT19QUF9FQ09OQ0FUMyhhLGIsYykgICAgICAgICAgTFpPX1BQX0NPTkNBVDMoYSxiLGMpCisjZGVmaW5lIExaT19QUF9FQ09OQ0FUNChhLGIsYyxkKSAgICAgICAgTFpPX1BQX0NPTkNBVDQoYSxiLGMsZCkKKyNkZWZpbmUgTFpPX1BQX0VDT05DQVQ1KGEsYixjLGQsZSkgICAgICBMWk9fUFBfQ09OQ0FUNShhLGIsYyxkLGUpCisjaWYgMQorI2RlZmluZSBMWk9fQ1BQX1NUUklOR0laRSh4KSAgICAgICAgICAgICN4CisjZGVmaW5lIExaT19DUFBfTUFDUk9fRVhQQU5EKHgpICAgICAgICAgTFpPX0NQUF9TVFJJTkdJWkUoeCkKKyNkZWZpbmUgTFpPX0NQUF9DT05DQVQyKGEsYikgICAgICAgICAgICBhICMjIGIKKyNkZWZpbmUgTFpPX0NQUF9DT05DQVQzKGEsYixjKSAgICAgICAgICBhICMjIGIgIyMgYworI2RlZmluZSBMWk9fQ1BQX0NPTkNBVDQoYSxiLGMsZCkgICAgICAgIGEgIyMgYiAjIyBjICMjIGQKKyNkZWZpbmUgTFpPX0NQUF9DT05DQVQ1KGEsYixjLGQsZSkgICAgICBhICMjIGIgIyMgYyAjIyBkICMjIGUKKyNkZWZpbmUgTFpPX0NQUF9FQ09OQ0FUMihhLGIpICAgICAgICAgICBMWk9fQ1BQX0NPTkNBVDIoYSxiKQorI2RlZmluZSBMWk9fQ1BQX0VDT05DQVQzKGEsYixjKSAgICAgICAgIExaT19DUFBfQ09OQ0FUMyhhLGIsYykKKyNkZWZpbmUgTFpPX0NQUF9FQ09OQ0FUNChhLGIsYyxkKSAgICAgICBMWk9fQ1BQX0NPTkNBVDQoYSxiLGMsZCkKKyNkZWZpbmUgTFpPX0NQUF9FQ09OQ0FUNShhLGIsYyxkLGUpICAgICBMWk9fQ1BQX0NPTkNBVDUoYSxiLGMsZCxlKQorI2VuZGlmCisjZGVmaW5lIF9fTFpPX01BU0tfR0VOKG8sYikgICAgICgoKCgobykgPDwgKChiKS0xKSkgLSAobykpIDw8IDEpICsgKG8pKQorI2lmIDEgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgIGlmICFkZWZpbmVkKF9fU1REQ19DT05TVEFOVF9NQUNST1MpCisjICAgIGRlZmluZSBfX1NURENfQ09OU1RBTlRfTUFDUk9TIDEKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQorIyAgICBkZWZpbmUgX19TVERDX0xJTUlUX01BQ1JPUyAxCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBMWk9fRVhURVJOX0MgZXh0ZXJuICJDIgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fRVhURVJOX0MgZXh0ZXJuCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0xaT19PU19PVkVSUklERSkKKyNpZiBkZWZpbmVkKExaT19PU19GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJmcmVlc3RhbmRpbmciCisjZWxpZiBkZWZpbmVkKExaT19PU19FTUJFRERFRCkKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImVtYmVkZGVkIgorI2VsaWYgMSAmJiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisjICBkZWZpbmUgTFpPX09TX0VNQkVEREVEICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImVtYmVkZGVkIgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIExaT19PU19DWUdXSU4gICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJjeWd3aW4iCisjZWxpZiBkZWZpbmVkKF9fRU1YX18pICYmIGRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgTFpPX09TX0VNWCAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImVteCIKKyNlbGlmIGRlZmluZWQoX19CRU9TX18pCisjICBkZWZpbmUgTFpPX09TX0JFT1MgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImJlb3MiCisjZWxpZiBkZWZpbmVkKF9fTHlueF9fKQorIyAgZGVmaW5lIExaT19PU19MWU5YT1MgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJseW54b3MiCisjZWxpZiBkZWZpbmVkKF9fT1M0MDBfXykKKyMgIGRlZmluZSBMWk9fT1NfT1M0MDAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAib3M0MDAiCisjZWxpZiBkZWZpbmVkKF9fUU5YX18pCisjICBkZWZpbmUgTFpPX09TX1FOWCAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgInFueCIKKyNlbGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkKF9fRFBNSTMyX18pICYmIChfX0JPUkxBTkRDX18gPj0gMHgwNDYwKQorIyAgZGVmaW5lIExaT19PU19ET1MzMiAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJkb3MzMiIKKyNlbGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKSAmJiBkZWZpbmVkKF9fRFBNSTE2X18pCisjICBkZWZpbmUgTFpPX09TX0RPUzE2ICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImRvczE2IgorI2VsaWYgZGVmaW5lZChfX1pUQ19fKSAmJiBkZWZpbmVkKERPUzM4NikKKyMgIGRlZmluZSBMWk9fT1NfRE9TMzIgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiZG9zMzIiCisjZWxpZiBkZWZpbmVkKF9fT1MyX18pIHx8IGRlZmluZWQoX19PUzJWMl9fKQorIyAgaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorIyAgICBkZWZpbmUgTFpPX09TX09TMjE2ICAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICJvczIxNiIKKyMgIGVsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZmZmZmTCkKKyMgICAgZGVmaW5lIExaT19PU19PUzIgICAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAib3MyIgorIyAgZWxzZQorIyAgICBlcnJvciAiY2hlY2sgeW91ciBsaW1pdHMuaCBoZWFkZXIiCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX1dJTjY0X18pIHx8IGRlZmluZWQoX1dJTjY0KSB8fCBkZWZpbmVkKFdJTjY0KQorIyAgZGVmaW5lIExaT19PU19XSU42NCAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJ3aW42NCIKKyNlbGlmIGRlZmluZWQoX19XSU4zMl9fKSB8fCBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX1dJTkRPV1NfMzg2X18pCisjICBkZWZpbmUgTFpPX09TX1dJTjMyICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgIndpbjMyIgorI2VsaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBkZWZpbmVkKF9fSU5URUxfXykKKyMgIGRlZmluZSBMWk9fT1NfV0lOMzIgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAid2luMzIiCisjZWxpZiBkZWZpbmVkKF9fV0lORE9XU19fKSB8fCBkZWZpbmVkKF9XSU5ET1dTKSB8fCBkZWZpbmVkKF9XaW5kb3dzKQorIyAgaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorIyAgICBkZWZpbmUgTFpPX09TX1dJTjE2ICAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICJ3aW4xNiIKKyMgIGVsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZmZmZmTCkKKyMgICAgZGVmaW5lIExaT19PU19XSU4zMiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAid2luMzIiCisjICBlbHNlCisjICAgIGVycm9yICJjaGVjayB5b3VyIGxpbWl0cy5oIGhlYWRlciIKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fRE9TX18pIHx8IGRlZmluZWQoX19NU0RPU19fKSB8fCBkZWZpbmVkKF9NU0RPUykgfHwgZGVmaW5lZChNU0RPUykgfHwgKGRlZmluZWQoX19QQUNJRklDX18pICYmIGRlZmluZWQoRE9TKSkKKyMgIGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgICAgZGVmaW5lIExaT19PU19ET1MxNiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAiZG9zMTYiCisjICBlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fT1NfRE9TMzIgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgImRvczMyIgorIyAgZWxzZQorIyAgICBlcnJvciAiY2hlY2sgeW91ciBsaW1pdHMuaCBoZWFkZXIiCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX1dBVENPTUNfXykKKyMgIGlmIGRlZmluZWQoX19OVF9fKSAmJiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICAgIGRlZmluZSBMWk9fT1NfRE9TMTYgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgImRvczE2IgorIyAgZWxpZiBkZWZpbmVkKF9fTlRfXykgJiYgKF9fV0FUQ09NQ19fIDwgMTEwMCkKKyMgICAgZGVmaW5lIExaT19PU19XSU4zMiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAid2luMzIiCisjICBlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fTElOVVhfXykKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWCAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAicG9zaXgiCisjICBlbHNlCisjICAgIGVycm9yICJwbGVhc2Ugc3BlY2lmeSBhIHRhcmdldCB1c2luZyB0aGUgLWJ0IGNvbXBpbGVyIG9wdGlvbiIKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fcGFsbW9zX18pCisjICBkZWZpbmUgTFpPX09TX1BBTE1PUyAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgInBhbG1vcyIKKyNlbGlmIGRlZmluZWQoX19UT1NfXykgfHwgZGVmaW5lZChfX2F0YXJpc3RfXykKKyMgIGRlZmluZSBMWk9fT1NfVE9TICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAidG9zIgorI2VsaWYgZGVmaW5lZChtYWNpbnRvc2gpICYmICFkZWZpbmVkKF9fcHBjX18pCisjICBkZWZpbmUgTFpPX09TX01BQ0NMQVNTSUMgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgIm1hY2NsYXNzaWMiCisjZWxpZiBkZWZpbmVkKF9fVk1TKQorIyAgZGVmaW5lIExaT19PU19WTVMgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJ2bXMiCisjZWxpZiAoKGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoX19SNTkwMF9fKSkgfHwgZGVmaW5lZChfX01JUFNfUFNYMl9fKSkKKyMgIGRlZmluZSBMWk9fT1NfQ09OU09MRSAgICAgICAgMQorIyAgZGVmaW5lIExaT19PU19DT05TT0xFX1BTMiAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJjb25zb2xlIgorIyAgZGVmaW5lIExaT19JTkZPX09TX0NPTlNPTEUgICAicHMyIgorI2VsaWYgKGRlZmluZWQoX19taXBzX18pICYmIGRlZmluZWQoX19wc3BfXykpCisjICBkZWZpbmUgTFpPX09TX0NPTlNPTEUgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1NfQ09OU09MRV9QU1AgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiY29uc29sZSIKKyMgIGRlZmluZSBMWk9fSU5GT19PU19DT05TT0xFICAgInBzcCIKKyNlbHNlCisjICBkZWZpbmUgTFpPX09TX1BPU0lYICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgInBvc2l4IgorI2VuZGlmCisjaWYgKExaT19PU19QT1NJWCkKKyMgIGlmIGRlZmluZWQoX0FJWCkgfHwgZGVmaW5lZChfX0FJWF9fKSB8fCBkZWZpbmVkKF9fYWl4X18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfQUlYICAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAiYWl4IgorIyAgZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0ZSRUVCU0QgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImZyZWVic2QiCisjICBlbGlmIGRlZmluZWQoX19ocHV4X18pIHx8IGRlZmluZWQoX19ocHV4KQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0hQVVggICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImhwdXgiCisjICBlbGlmIGRlZmluZWQoX19JTlRFUklYKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0lOVEVSSVggICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImludGVyaXgiCisjICBlbGlmIGRlZmluZWQoX19JUklYX18pIHx8IGRlZmluZWQoX19pcml4X18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfSVJJWCAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAiaXJpeCIKKyMgIGVsaWYgZGVmaW5lZChfX2xpbnV4X18pIHx8IGRlZmluZWQoX19saW51eCkgfHwgZGVmaW5lZChfX0xJTlVYX18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfTElOVVggICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAibGludXgiCisjICBlbGlmIGRlZmluZWQoX19BUFBMRV9fKSB8fCBkZWZpbmVkKF9fTUFDT1NfXykKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9NQUNPU1ggICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJtYWNvc3giCisjICBlbGlmIGRlZmluZWQoX19taW5peF9fKSB8fCBkZWZpbmVkKF9fbWluaXgpCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfTUlOSVggICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAibWluaXgiCisjICBlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9ORVRCU0QgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJuZXRic2QiCisjICBlbGlmIGRlZmluZWQoX19PcGVuQlNEX18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfT1BFTkJTRCAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAib3BlbmJzZCIKKyMgIGVsaWYgZGVmaW5lZChfX29zZl9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX09TRiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgIm9zZiIKKyMgIGVsaWYgZGVmaW5lZChfX3NvbGFyaXNfXykgfHwgZGVmaW5lZChfX3N1bikKKyMgICAgaWYgZGVmaW5lZChfX1NWUjQpIHx8IGRlZmluZWQoX19zdnI0X18pCisjICAgICAgZGVmaW5lIExaT19PU19QT1NJWF9TT0xBUklTICAxCisjICAgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAic29sYXJpcyIKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfU1VOT1MgICAgMQorIyAgICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgInN1bm9zIgorIyAgICBlbmRpZgorIyAgZWxpZiBkZWZpbmVkKF9fdWx0cml4X18pIHx8IGRlZmluZWQoX191bHRyaXgpCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfVUxUUklYICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAidWx0cml4IgorIyAgZWxpZiBkZWZpbmVkKF9VTklDT1MpCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfVU5JQ09TICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAidW5pY29zIgorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX1VOS05PV04gICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjICBpZiAoVUlOVF9NQVggIT0gTFpPXzB4ZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoTFpPX09TX0RPUzMyIHx8IExaT19PU19PUzIgfHwgTFpPX09TX1dJTjMyIHx8IExaT19PU19XSU42NCkKKyMgIGlmIChVSU5UX01BWCAhPSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKENJTCkgJiYgZGVmaW5lZChfR05VQ0MpICYmIGRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgTFpPX0NDX0NJTExZICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIkNpbGx5IgorIyAgaWYgZGVmaW5lZChfX0NJTExZX18pCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19DSUxMWV9fKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAidW5rbm93biIKKyMgIGVuZGlmCisjZWxpZiAwICYmIGRlZmluZWQoU0RDQykgJiYgZGVmaW5lZChfX1ZFUlNJT05fXykgJiYgIWRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgTFpPX0NDX1NEQ0MgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgInNkY2MiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoU0RDQykKKyNlbGlmIGRlZmluZWQoX19QQVRIU0NBTEVfXykgJiYgZGVmaW5lZChfX1BBVEhDQ19QQVRDSExFVkVMX18pCisjICBkZWZpbmUgTFpPX0NDX1BBVEhTQ0FMRSAgICAgIChfX1BBVEhDQ19fICogMHgxMDAwMEwgKyBfX1BBVEhDQ19NSU5PUl9fICogMHgxMDAgKyBfX1BBVEhDQ19QQVRDSExFVkVMX18pCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJQYXRoc2NhbGUgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgX19QQVRIU0NBTEVfXworI2VsaWYgZGVmaW5lZChfX0lOVEVMX0NPTVBJTEVSKQorIyAgZGVmaW5lIExaT19DQ19JTlRFTEMgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJJbnRlbCBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fSU5URUxfQ09NUElMRVIpCisjICBpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpCisjICAgIGRlZmluZSBMWk9fQ0NfU1lOVEFYX01TQyAxCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ0NfU1lOVEFYX0dOVUMgMQorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19QT0NDX18pICYmIGRlZmluZWQoX1dJTjMyKQorIyAgZGVmaW5lIExaT19DQ19QRUxMRVNDICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJQZWxsZXMgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1BPQ0NfXykKKyNlbGlmIGRlZmluZWQoX19sbHZtX18pICYmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19WRVJTSU9OX18pCisjICBpZiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKSAmJiBkZWZpbmVkKF9fR05VQ19QQVRDSExFVkVMX18pCisjICAgIGRlZmluZSBMWk9fQ0NfTExWTSAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMICsgX19HTlVDX01JTk9SX18gKiAweDEwMCArIF9fR05VQ19QQVRDSExFVkVMX18pCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ0NfTExWTSAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMICsgX19HTlVDX01JTk9SX18gKiAweDEwMCkKKyMgIGVuZGlmCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJsbHZtLWdjYyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgX19WRVJTSU9OX18KKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19WRVJTSU9OX18pCisjICBpZiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKSAmJiBkZWZpbmVkKF9fR05VQ19QQVRDSExFVkVMX18pCisjICAgIGRlZmluZSBMWk9fQ0NfR05VQyAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMICsgX19HTlVDX01JTk9SX18gKiAweDEwMCArIF9fR05VQ19QQVRDSExFVkVMX18pCisjICBlbGlmIGRlZmluZWQoX19HTlVDX01JTk9SX18pCisjICAgIGRlZmluZSBMWk9fQ0NfR05VQyAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMICsgX19HTlVDX01JTk9SX18gKiAweDEwMCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19DQ19HTlVDICAgICAgICAgKF9fR05VQ19fICogMHgxMDAwMEwpCisjICBlbmRpZgorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiZ2NjIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBfX1ZFUlNJT05fXworI2VsaWYgZGVmaW5lZChfX0FDS19fKSAmJiBkZWZpbmVkKF9BQ0spCisjICBkZWZpbmUgTFpPX0NDX0FDSyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIkFtc3RlcmRhbSBDb21waWxlciBLaXQgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fQVpURUNfQ19fKQorIyAgZGVmaW5lIExaT19DQ19BWlRFQ0MgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJBenRlYyBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fQVpURUNfQ19fKQorI2VsaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pCisjICBkZWZpbmUgTFpPX0NDX0JPUkxBTkRDICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIkJvcmxhbmQgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX0JPUkxBTkRDX18pCisjZWxpZiBkZWZpbmVkKF9DUkFZQykgJiYgZGVmaW5lZChfUkVMRUFTRSkKKyMgIGRlZmluZSBMWk9fQ0NfQ1JBWUMgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiQ3JheSBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9SRUxFQVNFKQorI2VsaWYgZGVmaW5lZChfX0RNQ19fKSAmJiBkZWZpbmVkKF9fU0NfXykKKyMgIGRlZmluZSBMWk9fQ0NfRE1DICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiRGlnaXRhbCBNYXJzIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19ETUNfXykKKyNlbGlmIGRlZmluZWQoX19ERUNDKQorIyAgZGVmaW5lIExaT19DQ19ERUNDICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJERUMgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX0RFQ0MpCisjZWxpZiBkZWZpbmVkKF9fSElHSENfXykKKyMgIGRlZmluZSBMWk9fQ0NfSElHSEMgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiTWV0YVdhcmUgSGlnaCBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyMgIGRlZmluZSBMWk9fQ0NfSUFSQyAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiSUFSIEMiCisjICBpZiBkZWZpbmVkKF9fVkVSX18pCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19WRVJfXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0lCTUNfXykKKyMgIGRlZmluZSBMWk9fQ0NfSUJNQyAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiSUJNIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19JQk1DX18pCisjZWxpZiBkZWZpbmVkKF9fS0VJTF9fKSAmJiBkZWZpbmVkKF9fQzE2Nl9fKQorIyAgZGVmaW5lIExaT19DQ19LRUlMQyAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJLZWlsIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19DMTY2X18pCisjZWxpZiBkZWZpbmVkKF9fTENDX18pICYmIGRlZmluZWQoX1dJTjMyKSAmJiBkZWZpbmVkKF9fTENDT1BUSU1MRVZFTCkKKyMgIGRlZmluZSBMWk9fQ0NfTENDV0lOMzIgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAibGNjLXdpbjMyIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbGlmIGRlZmluZWQoX19MQ0NfXykKKyMgIGRlZmluZSBMWk9fQ0NfTENDICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAibGNjIgorIyAgaWYgZGVmaW5lZChfX0xDQ19WRVJTSU9OX18pCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19MQ0NfVkVSU0lPTl9fKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAidW5rbm93biIKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9NU0NfVkVSKQorIyAgZGVmaW5lIExaT19DQ19NU0MgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJNaWNyb3NvZnQgQyIKKyMgIGlmIGRlZmluZWQoX01TQ19GVUxMX1ZFUikKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfTVNDX1ZFUikgIi4iIExaT19QUF9NQUNST19FWFBBTkQoX01TQ19GVUxMX1ZFUikKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfTVNDX1ZFUikKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fTVdFUktTX18pCisjICBkZWZpbmUgTFpPX0NDX01XRVJLUyAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIk1ldHJvd2Vya3MgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX01XRVJLU19fKQorI2VsaWYgKGRlZmluZWQoX19ORFBDX18pIHx8IGRlZmluZWQoX19ORFBYX18pKSAmJiBkZWZpbmVkKF9faTM4NikKKyMgIGRlZmluZSBMWk9fQ0NfTkRQQyAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiTWljcm93YXkgTkRQIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgICJ1bmtub3duIgorI2VsaWYgZGVmaW5lZChfX1BBQ0lGSUNfXykKKyMgIGRlZmluZSBMWk9fQ0NfUEFDSUZJQ0MgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiUGFjaWZpYyBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fUEFDSUZJQ19fKQorI2VsaWYgZGVmaW5lZChfX1BHSSkgJiYgKGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykpCisjICBkZWZpbmUgTFpPX0NDX1BHSSAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlBvcnRsYW5kIEdyb3VwIFBHSSBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbGlmIGRlZmluZWQoX19QVVJFQ19fKSAmJiBkZWZpbmVkKF9fVE9TX18pCisjICBkZWZpbmUgTFpPX0NDX1BVUkVDICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlB1cmUgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1BVUkVDX18pCisjZWxpZiBkZWZpbmVkKF9fU0NfXykgJiYgZGVmaW5lZChfX1pUQ19fKQorIyAgZGVmaW5lIExaT19DQ19TWU1BTlRFQ0MgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJTeW1hbnRlYyBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fU0NfXykKKyNlbGlmIGRlZmluZWQoX19TVU5QUk9fQykKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlN1blBybyBDIgorIyAgaWYgKChfX1NVTlBST19DKSswID4gMCkKKyMgICAgZGVmaW5lIExaT19DQ19TVU5QUk9DICAgICAgX19TVU5QUk9fQworIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fU1VOUFJPX0MpCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ0NfU1VOUFJPQyAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX1NVTlBST19DQykKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlN1blBybyBDIgorIyAgaWYgKChfX1NVTlBST19DQykrMCA+IDApCisjICAgIGRlZmluZSBMWk9fQ0NfU1VOUFJPQyAgICAgIF9fU1VOUFJPX0NDCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19TVU5QUk9fQ0MpCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ0NfU1VOUFJPQyAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX1RJTllDX18pCisjICBkZWZpbmUgTFpPX0NDX1RJTllDICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlRpbnkgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1RJTllDX18pCisjZWxpZiBkZWZpbmVkKF9fVFNDX18pCisjICBkZWZpbmUgTFpPX0NDX1RPUFNQRUVEQyAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlRvcFNwZWVkIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19UU0NfXykKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjICBkZWZpbmUgTFpPX0NDX1dBVENPTUMgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIldhdGNvbSBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fV0FUQ09NQ19fKQorI2VsaWYgZGVmaW5lZChfX1RVUkJPQ19fKQorIyAgZGVmaW5lIExaT19DQ19UVVJCT0MgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJUdXJibyBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fVFVSQk9DX18pCisjZWxpZiBkZWZpbmVkKF9fWlRDX18pCisjICBkZWZpbmUgTFpPX0NDX1pPUlRFQ0hDICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlpvcnRlY2ggQyIKKyMgIGlmIChfX1pUQ19fID09IDB4MzEwKQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAiMHgzMTAiCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19aVENfXykKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIExaT19DQ19VTktOT1dOICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJ1bmtub3duIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbmRpZgorI2lmIDAgJiYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKSAmJiAhZGVmaW5lZChfTVNDX0ZVTExfVkVSKQorIyAgZXJyb3IgIkxaT19DQ19NU0M6IF9NU0NfRlVMTF9WRVIgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0xaT19BUkNIX09WRVJSSURFKSAmJiAhZGVmaW5lZChMWk9fQVJDSF9HRU5FUklDKSAmJiBkZWZpbmVkKF9DUkFZKQorIyAgaWYgKFVJTlRfTUFYID4gTFpPXzB4ZmZmZmZmZmZMKSAmJiBkZWZpbmVkKF9DUkFZKQorIyAgICBpZiBkZWZpbmVkKF9DUkFZTVBQKSB8fCBkZWZpbmVkKF9DUkFZVDNEKSB8fCBkZWZpbmVkKF9DUkFZVDNFKQorIyAgICAgIGRlZmluZSBMWk9fQVJDSF9DUkFZX01QUCAgICAgMQorIyAgICBlbGlmIGRlZmluZWQoX0NSQVkxKQorIyAgICAgIGRlZmluZSBMWk9fQVJDSF9DUkFZX1BWUCAgICAgMQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fTFpPX0FSQ0hfT1ZFUlJJREUpCisjaWYgZGVmaW5lZChMWk9fQVJDSF9HRU5FUklDKQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImdlbmVyaWMiCisjZWxpZiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTA4NiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUExNiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiaTA4NiIKKyNlbGlmIGRlZmluZWQoX19hbHBoYV9fKSB8fCBkZWZpbmVkKF9fYWxwaGEpIHx8IGRlZmluZWQoX01fQUxQSEEpCisjICBkZWZpbmUgTFpPX0FSQ0hfQUxQSEEgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYWxwaGEiCisjZWxpZiAoTFpPX0FSQ0hfQ1JBWV9NUFApICYmIChkZWZpbmVkKF9DUkFZVDNEKSB8fCBkZWZpbmVkKF9DUkFZVDNFKSkKKyMgIGRlZmluZSBMWk9fQVJDSF9BTFBIQSAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJhbHBoYSIKKyNlbGlmIGRlZmluZWQoX19hbWQ2NF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX01fQU1ENjQpCisjICBkZWZpbmUgTFpPX0FSQ0hfQU1ENjQgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYW1kNjQiCisjZWxpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgKGRlZmluZWQoX01fQVJNKSAmJiBkZWZpbmVkKF9NX1RIVU1CKSkKKyMgIGRlZmluZSBMWk9fQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9BUk1fVEhVTUIgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJhcm1fdGh1bWIiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0NBUk1fXykKKyMgIGRlZmluZSBMWk9fQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyMgIGlmIGRlZmluZWQoX19DUFVfTU9ERV9fKSAmJiAoKF9fQ1BVX01PREVfXykrMCA9PSAxKQorIyAgICBkZWZpbmUgTFpPX0FSQ0hfQVJNX1RIVU1CICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImFybV90aHVtYiIKKyMgIGVsaWYgZGVmaW5lZChfX0NQVV9NT0RFX18pICYmICgoX19DUFVfTU9ERV9fKSswID09IDIpCisjICAgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAiYXJtIgorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImFybSIKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX01fQVJNKQorIyAgZGVmaW5lIExaT19BUkNIX0FSTSAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImFybSIKKyNlbGlmIChVSU5UX01BWCA8PSBMWk9fMHhmZmZmTCkgJiYgZGVmaW5lZChfX0FWUl9fKQorIyAgZGVmaW5lIExaT19BUkNIX0FWUiAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImF2ciIKKyNlbGlmIGRlZmluZWQoX19iZmluX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfQkxBQ0tGSU4gICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYmxhY2tmaW4iCisjZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpICYmIGRlZmluZWQoX19DMTY2X18pCisjICBkZWZpbmUgTFpPX0FSQ0hfQzE2NiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYzE2NiIKKyNlbGlmIGRlZmluZWQoX19jcmlzX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfQ1JJUyAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiY3JpcyIKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgJiYgZGVmaW5lZChfX0lDQ0VaODBfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9FWjgwICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJlejgwIgorI2VsaWYgZGVmaW5lZChfX0g4MzAwX18pIHx8IGRlZmluZWQoX19IODMwMEhfXykgfHwgZGVmaW5lZChfX0g4MzAwU19fKSB8fCBkZWZpbmVkKF9fSDgzMDBTWF9fKQorIyAgZGVmaW5lIExaT19BUkNIX0g4MzAwICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImg4MzAwIgorI2VsaWYgZGVmaW5lZChfX2hwcGFfXykgfHwgZGVmaW5lZChfX2hwcGEpCisjICBkZWZpbmUgTFpPX0FSQ0hfSFBQQSAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiaHBwYSIKKyNlbGlmIGRlZmluZWQoX18zODZfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9JMzg2KQorIyAgZGVmaW5lIExaT19BUkNIX0kzODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19BUkNIX0lBMzIgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImkzODYiCisjZWxpZiAoTFpPX0NDX1pPUlRFQ0hDICYmIGRlZmluZWQoX19JODZfXykpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTM4NiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUEzMiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiaTM4NiIKKyNlbGlmIChMWk9fT1NfRE9TMzIgJiYgTFpPX0NDX0hJR0hDKSAmJiBkZWZpbmVkKF9JMzg2KQorIyAgZGVmaW5lIExaT19BUkNIX0kzODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19BUkNIX0lBMzIgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImkzODYiCisjZWxpZiBkZWZpbmVkKF9faWE2NF9fKSB8fCBkZWZpbmVkKF9faWE2NCkgfHwgZGVmaW5lZChfTV9JQTY0KQorIyAgZGVmaW5lIExaT19BUkNIX0lBNjQgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImlhNjQiCisjZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpICYmIGRlZmluZWQoX19tMzJjX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTTE2QyAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibTE2YyIKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgJiYgZGVmaW5lZChfX0lDQ00xNkNfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9NMTZDICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJtMTZjIgorI2VsaWYgZGVmaW5lZChfX20zMnJfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9NMzJSICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJtMzJyIgorI2VsaWYgKExaT19PU19UT1MpIHx8IGRlZmluZWQoX19tNjhrX18pIHx8IGRlZmluZWQoX19tNjgwMDBfXykgfHwgZGVmaW5lZChfX21jNjgwMDBfXykgfHwgZGVmaW5lZChfX21jNjgwMjBfXykgfHwgZGVmaW5lZChfTV9NNjhLKQorIyAgZGVmaW5lIExaT19BUkNIX002OEsgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm02OGsiCisjZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpICYmIGRlZmluZWQoX19DMjUxX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTUNTMjUxICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibWNzMjUxIgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fQzUxX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTUNTNTEgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibWNzNTEiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0M4MDUxX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTUNTNTEgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibWNzNTEiCisjZWxpZiBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fbWlwcykgfHwgZGVmaW5lZChfTUlQU19BUkNIKSB8fCBkZWZpbmVkKF9NX01SWDAwMCkKKyMgIGRlZmluZSBMWk9fQVJDSF9NSVBTICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJtaXBzIgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fTVNQNDMwX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTVNQNDMwICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibXNwNDMwIgorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fSUNDNDMwX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTVNQNDMwICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibXNwNDMwIgorI2VsaWYgZGVmaW5lZChfX3Bvd2VycGNfXykgfHwgZGVmaW5lZChfX3Bvd2VycGMpIHx8IGRlZmluZWQoX19wcGNfXykgfHwgZGVmaW5lZChfX1BQQ19fKSB8fCBkZWZpbmVkKF9NX1BQQykgfHwgZGVmaW5lZChfQVJDSF9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFdSKQorIyAgZGVmaW5lIExaT19BUkNIX1BPV0VSUEMgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgInBvd2VycGMiCisjZWxpZiBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MCkgfHwgZGVmaW5lZChfX3MzOTB4X18pIHx8IGRlZmluZWQoX19zMzkweCkKKyMgIGRlZmluZSBMWk9fQVJDSF9TMzkwICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJzMzkwIgorI2VsaWYgZGVmaW5lZChfX3NoX18pIHx8IGRlZmluZWQoX01fU0gpCisjICBkZWZpbmUgTFpPX0FSQ0hfU0ggICAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAic2giCisjZWxpZiBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX3NwYXJjKSB8fCBkZWZpbmVkKF9fc3BhcmN2OCkKKyMgIGRlZmluZSBMWk9fQVJDSF9TUEFSQyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJzcGFyYyIKKyNlbGlmIGRlZmluZWQoX19TUFVfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9TUFUgICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJzcHUiCisjZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpICYmIGRlZmluZWQoX196ODApCisjICBkZWZpbmUgTFpPX0FSQ0hfWjgwICAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiejgwIgorI2VsaWYgKExaT19BUkNIX0NSQVlfUFZQKQorIyAgaWYgZGVmaW5lZChfQ1JBWVNWMSkKKyMgICAgZGVmaW5lIExaT19BUkNIX0NSQVlfU1YxICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICJjcmF5X3N2MSIKKyMgIGVsaWYgKF9BRERSNjQpCisjICAgIGRlZmluZSBMWk9fQVJDSF9DUkFZX1Q5MCAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAiY3JheV90OTAiCisjICBlbGlmIChfQUREUjMyKQorIyAgICBkZWZpbmUgTFpPX0FSQ0hfQ1JBWV9ZTVAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImNyYXlfeW1wIgorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0FSQ0hfQ1JBWV9YTVAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImNyYXlfeG1wIgorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgTFpPX0FSQ0hfVU5LTk9XTiAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAidW5rbm93biIKKyNlbmRpZgorI2VuZGlmCisjaWYgMSAmJiAoTFpPX0FSQ0hfVU5LTk9XTikgJiYgKExaT19PU19ET1MzMiB8fCBMWk9fT1NfT1MyKQorIyAgZXJyb3IgIkZJWE1FIC0gbWlzc2luZyBkZWZpbmUgZm9yIENQVSBhcmNoaXRlY3R1cmUiCisjZW5kaWYKKyNpZiAxICYmIChMWk9fQVJDSF9VTktOT1dOKSAmJiAoTFpPX09TX1dJTjMyKQorIyAgZXJyb3IgIkZJWE1FIC0gbWlzc2luZyBXSU4zMiBkZWZpbmUgZm9yIENQVSBhcmNoaXRlY3R1cmUiCisjZW5kaWYKKyNpZiAxICYmIChMWk9fQVJDSF9VTktOT1dOKSAmJiAoTFpPX09TX1dJTjY0KQorIyAgZXJyb3IgIkZJWE1FIC0gbWlzc2luZyBXSU42NCBkZWZpbmUgZm9yIENQVSBhcmNoaXRlY3R1cmUiCisjZW5kaWYKKyNpZiAoTFpPX09TX09TMjE2IHx8IExaT19PU19XSU4xNikKKyMgIGRlZmluZSBMWk9fQVJDSF9JMDg2UE0gICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTE2UE0gICAgICAgICAgIDEKKyNlbGlmIDEgJiYgKExaT19PU19ET1MxNiAmJiBkZWZpbmVkKEJMWDI4NikpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZWxpZiAxICYmIChMWk9fT1NfRE9TMTYgJiYgZGVmaW5lZChET1NYMjg2KSkKKyMgIGRlZmluZSBMWk9fQVJDSF9JMDg2UE0gICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTE2UE0gICAgICAgICAgIDEKKyNlbGlmIDEgJiYgKExaT19PU19ET1MxNiAmJiBMWk9fQ0NfQk9STEFOREMgJiYgZGVmaW5lZChfX0RQTUkxNl9fKSkKKyMgIGRlZmluZSBMWk9fQVJDSF9JMDg2UE0gICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTE2UE0gICAgICAgICAgIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FSQ0hfQVJNX1RIVU1CKSAmJiAhZGVmaW5lZChMWk9fQVJDSF9BUk0pCisjICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FSQ0hfSTA4NlBNKSAmJiAhZGVmaW5lZChMWk9fQVJDSF9JMDg2KQorIyAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjZW5kaWYKKyNpZiAoTFpPX0FSQ0hfSTA4NikKKyMgIGlmIChVSU5UX01BWCAhPSBMWk9fMHhmZmZmTCkKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorIyAgaWYgKFVMT05HX01BWCAhPSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIChMWk9fQVJDSF9JMzg2KQorIyAgaWYgKFVJTlRfTUFYICE9IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9faTM4Nl9pbnQxNl9fKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjICBpZiAoVUlOVF9NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKSAmJiAhZGVmaW5lZChfX2kzODZfaW50MTZfXykKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorIyAgaWYgKFVMT05HX01BWCAhPSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fTFpPX01NX09WRVJSSURFKQorI2lmIChMWk9fQVJDSF9JMDg2KQorI2lmIChVSU5UX01BWCAhPSBMWk9fMHhmZmZmTCkKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX1RJTllfXykgfHwgZGVmaW5lZChNX0k4NlRNKSB8fCBkZWZpbmVkKF9NX0k4NlRNKQorIyAgZGVmaW5lIExaT19NTV9USU5ZICAgICAgICAgICAxCisjZWxpZiBkZWZpbmVkKF9fSFVHRV9fKSB8fCBkZWZpbmVkKF9IVUdFXykgfHwgZGVmaW5lZChNX0k4NkhNKSB8fCBkZWZpbmVkKF9NX0k4NkhNKQorIyAgZGVmaW5lIExaT19NTV9IVUdFICAgICAgICAgICAxCisjZWxpZiBkZWZpbmVkKF9fU01BTExfXykgfHwgZGVmaW5lZChNX0k4NlNNKSB8fCBkZWZpbmVkKF9NX0k4NlNNKSB8fCBkZWZpbmVkKFNNQUxMX01PREVMKQorIyAgZGVmaW5lIExaT19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiBkZWZpbmVkKF9fTUVESVVNX18pIHx8IGRlZmluZWQoTV9JODZNTSkgfHwgZGVmaW5lZChfTV9JODZNTSkKKyMgIGRlZmluZSBMWk9fTU1fTUVESVVNICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX0NPTVBBQ1RfXykgfHwgZGVmaW5lZChNX0k4NkNNKSB8fCBkZWZpbmVkKF9NX0k4NkNNKQorIyAgZGVmaW5lIExaT19NTV9DT01QQUNUICAgICAgICAxCisjZWxpZiBkZWZpbmVkKF9fTEFSR0VfXykgfHwgZGVmaW5lZChNX0k4NkxNKSB8fCBkZWZpbmVkKF9NX0k4NkxNKSB8fCBkZWZpbmVkKExBUkdFX01PREVMKQorIyAgZGVmaW5lIExaT19NTV9MQVJHRSAgICAgICAgICAxCisjZWxpZiAoTFpPX0NDX0FaVEVDQykKKyMgIGlmIGRlZmluZWQoX0xBUkdFX0NPREUpICYmIGRlZmluZWQoX0xBUkdFX0RBVEEpCisjICAgIGRlZmluZSBMWk9fTU1fTEFSR0UgICAgICAgIDEKKyMgIGVsaWYgZGVmaW5lZChfTEFSR0VfQ09ERSkKKyMgICAgZGVmaW5lIExaT19NTV9NRURJVU0gICAgICAgMQorIyAgZWxpZiBkZWZpbmVkKF9MQVJHRV9EQVRBKQorIyAgICBkZWZpbmUgTFpPX01NX0NPTVBBQ1QgICAgICAxCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fTU1fU01BTEwgICAgICAgIDEKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0NDX1pPUlRFQ0hDICYmIGRlZmluZWQoX19WQ01fXykpCisjICBkZWZpbmUgTFpPX01NX0xBUkdFICAgICAgICAgIDEKKyNlbHNlCisjICBlcnJvciAidW5rbm93biBtZW1vcnkgbW9kZWwiCisjZW5kaWYKKyNpZiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjZGVmaW5lIExaT19IQVZFX01NX0hVR0VfUFRSICAgICAgICAxCisjZGVmaW5lIExaT19IQVZFX01NX0hVR0VfQVJSQVkgICAgICAxCisjaWYgKExaT19NTV9USU5ZKQorIyAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9BUlJBWQorI2VuZGlmCisjaWYgKExaT19DQ19BWlRFQ0MgfHwgTFpPX0NDX1BBQ0lGSUNDIHx8IExaT19DQ19aT1JURUNIQykKKyMgIHVuZGVmIExaT19IQVZFX01NX0hVR0VfUFRSCisjICB1bmRlZiBMWk9fSEFWRV9NTV9IVUdFX0FSUkFZCisjZWxpZiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDKQorIyAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9BUlJBWQorI2VsaWYgKExaT19DQ19NU0MgJiYgZGVmaW5lZChfUUMpKQorIyAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9BUlJBWQorIyAgaWYgKF9NU0NfVkVSIDwgNjAwKQorIyAgICB1bmRlZiBMWk9fSEFWRV9NTV9IVUdFX1BUUgorIyAgZW5kaWYKKyNlbGlmIChMWk9fQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fIDwgMHgwMjk1KSkKKyMgIHVuZGVmIExaT19IQVZFX01NX0hVR0VfQVJSQVkKKyNlbmRpZgorI2lmIChMWk9fQVJDSF9JMDg2UE0pICYmICFkZWZpbmVkKExaT19IQVZFX01NX0hVR0VfUFRSKQorIyAgaWYgKExaT19PU19ET1MxNikKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbGlmIChMWk9fQ0NfWk9SVEVDSEMpCisjICBlbHNlCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2lmIChMWk9fQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDAyMDApKQorICAgZXh0ZXJuIHZvaWQgX19uZWFyIF9fY2RlY2wgX0FIU0hJRlQodm9pZCk7CisjICBkZWZpbmUgTFpPX01NX0FIU0hJRlQgICAgICAoKHVuc2lnbmVkKSBfQUhTSElGVCkKKyNlbGlmIChMWk9fQ0NfRE1DIHx8IExaT19DQ19TWU1BTlRFQ0MgfHwgTFpPX0NDX1pPUlRFQ0hDKQorICAgZXh0ZXJuIHZvaWQgX19uZWFyIF9fY2RlY2wgX0FIU0hJRlQodm9pZCk7CisjICBkZWZpbmUgTFpPX01NX0FIU0hJRlQgICAgICAoKHVuc2lnbmVkKSBfQUhTSElGVCkKKyNlbGlmIChMWk9fQ0NfTVNDIHx8IExaT19DQ19UT1BTUEVFREMpCisgICBleHRlcm4gdm9pZCBfX25lYXIgX19jZGVjbCBfQUhTSElGVCh2b2lkKTsKKyMgIGRlZmluZSBMWk9fTU1fQUhTSElGVCAgICAgICgodW5zaWduZWQpIF9BSFNISUZUKQorI2VsaWYgKExaT19DQ19UVVJCT0MgJiYgKF9fVFVSQk9DX18gPj0gMHgwMjk1KSkKKyAgIGV4dGVybiB2b2lkIF9fbmVhciBfX2NkZWNsIF9BSFNISUZUKHZvaWQpOworIyAgZGVmaW5lIExaT19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0FIU0hJRlQpCisjZWxpZiAoKExaT19DQ19BWlRFQ0MgfHwgTFpPX0NDX1BBQ0lGSUNDIHx8IExaT19DQ19UVVJCT0MpICYmIExaT19PU19ET1MxNikKKyMgIGRlZmluZSBMWk9fTU1fQUhTSElGVCAgICAgIDEyCisjZWxpZiAoTFpPX0NDX1dBVENPTUMpCisgICBleHRlcm4gdW5zaWduZWQgY2hhciBfSFNoaWZ0OworIyAgZGVmaW5lIExaT19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0hTaGlmdCkKKyNlbHNlCisjICBlcnJvciAiRklYTUUgLSBpbXBsZW1lbnQgTFpPX01NX0FIU0hJRlQiCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYKKyNlbGlmIChMWk9fQVJDSF9DMTY2KQorI2lmICFkZWZpbmVkKF9fTU9ERUxfXykKKyMgIGVycm9yICJGSVhNRSAtIEMxNjYgX19NT0RFTF9fIgorI2VsaWYgKChfX01PREVMX18pID09IDApCisjICBkZWZpbmUgTFpPX01NX1NNQUxMICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAxKQorIyAgZGVmaW5lIExaT19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMikKKyMgIGRlZmluZSBMWk9fTU1fTEFSR0UgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDMpCisjICBkZWZpbmUgTFpPX01NX1RJTlkgICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA0KQorIyAgZGVmaW5lIExaT19NTV9YVElOWSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNSkKKyMgIGRlZmluZSBMWk9fTU1fWFNNQUxMICAgICAgICAgMQorI2Vsc2UKKyMgIGVycm9yICJGSVhNRSAtIEMxNjYgX19NT0RFTF9fIgorI2VuZGlmCisjZWxpZiAoTFpPX0FSQ0hfTUNTMjUxKQorI2lmICFkZWZpbmVkKF9fTU9ERUxfXykKKyMgIGVycm9yICJGSVhNRSAtIE1DUzI1MSBfX01PREVMX18iCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMCkKKyMgIGRlZmluZSBMWk9fTU1fU01BTEwgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDIpCisjICBkZWZpbmUgTFpPX01NX0xBUkdFICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAzKQorIyAgZGVmaW5lIExaT19NTV9USU5ZICAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNCkKKyMgIGRlZmluZSBMWk9fTU1fWFRJTlkgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDUpCisjICBkZWZpbmUgTFpPX01NX1hTTUFMTCAgICAgICAgIDEKKyNlbHNlCisjICBlcnJvciAiRklYTUUgLSBNQ1MyNTEgX19NT0RFTF9fIgorI2VuZGlmCisjZWxpZiAoTFpPX0FSQ0hfTUNTNTEpCisjaWYgIWRlZmluZWQoX19NT0RFTF9fKQorIyAgZXJyb3IgIkZJWE1FIC0gTUNTNTEgX19NT0RFTF9fIgorI2VsaWYgKChfX01PREVMX18pID09IDEpCisjICBkZWZpbmUgTFpPX01NX1NNQUxMICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAyKQorIyAgZGVmaW5lIExaT19NTV9MQVJHRSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMykKKyMgIGRlZmluZSBMWk9fTU1fVElOWSAgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDQpCisjICBkZWZpbmUgTFpPX01NX1hUSU5ZICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA1KQorIyAgZGVmaW5lIExaT19NTV9YU01BTEwgICAgICAgICAxCisjZWxzZQorIyAgZXJyb3IgIkZJWE1FIC0gTUNTNTEgX19NT0RFTF9fIgorI2VuZGlmCisjZWxpZiAoTFpPX0FSQ0hfQ1JBWV9QVlApCisjICBkZWZpbmUgTFpPX01NX1BWUCAgICAgICAgICAgIDEKKyNlbHNlCisjICBkZWZpbmUgTFpPX01NX0ZMQVQgICAgICAgICAgIDEKKyNlbmRpZgorI2lmIChMWk9fTU1fQ09NUEFDVCkKKyMgIGRlZmluZSBMWk9fSU5GT19NTSAgICAgICAgICAgImNvbXBhY3QiCisjZWxpZiAoTFpPX01NX0ZMQVQpCisjICBkZWZpbmUgTFpPX0lORk9fTU0gICAgICAgICAgICJmbGF0IgorI2VsaWYgKExaT19NTV9IVUdFKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAiaHVnZSIKKyNlbGlmIChMWk9fTU1fTEFSR0UpCisjICBkZWZpbmUgTFpPX0lORk9fTU0gICAgICAgICAgICJsYXJnZSIKKyNlbGlmIChMWk9fTU1fTUVESVVNKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAibWVkaXVtIgorI2VsaWYgKExaT19NTV9QVlApCisjICBkZWZpbmUgTFpPX0lORk9fTU0gICAgICAgICAgICJwdnAiCisjZWxpZiAoTFpPX01NX1NNQUxMKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAic21hbGwiCisjZWxpZiAoTFpPX01NX1RJTlkpCisjICBkZWZpbmUgTFpPX0lORk9fTU0gICAgICAgICAgICJ0aW55IgorI2Vsc2UKKyMgIGVycm9yICJ1bmtub3duIG1lbW9yeSBtb2RlbCIKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfU0hPUlQpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9TSE9SVCAgICAgICAgICAoU0laRU9GX1NIT1JUKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfSU5UKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgICAgKFNJWkVPRl9JTlQpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9MT05HKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgICAgKFNJWkVPRl9MT05HKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgKFNJWkVPRl9MT05HX0xPTkcpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9fX0lOVDE2KQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQxNiAgICAgICAgKFNJWkVPRl9fX0lOVDE2KQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfX19JTlQzMikKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UMzIgICAgICAgIChTSVpFT0ZfX19JTlQzMikKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX19fSU5UNjQpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9fX0lOVDY0ICAgICAgICAoU0laRU9GX19fSU5UNjQpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9WT0lEX1ApCisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICAoU0laRU9GX1ZPSURfUCkKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX1NJWkVfVCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX1NJWkVfVCAgICAgICAgIChTSVpFT0ZfU0laRV9UKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfUFRSRElGRl9UKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfUFRSRElGRl9UICAgICAgKFNJWkVPRl9QVFJESUZGX1QpCisjZW5kaWYKKyNkZWZpbmUgX19MWk9fTFNSKHgsYikgICAgKCgoeCkrMHVsKSA+PiAoYikpCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9TSE9SVCkKKyMgIGlmIChMWk9fQVJDSF9DUkFZX1BWUCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDgKKyMgIGVsaWYgKFVTSFJUX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDIKKyMgIGVsaWYgKF9fTFpPX0xTUihVU0hSVF9NQVgsNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDEKKyMgIGVsaWYgKF9fTFpPX0xTUihVU0hSVF9NQVgsMTUpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1NIT1JUICAgICAgICAyCisjICBlbGlmIChfX0xaT19MU1IoVVNIUlRfTUFYLDMxKSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9TSE9SVCAgICAgICAgNAorIyAgZWxpZiAoX19MWk9fTFNSKFVTSFJUX01BWCw2MykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDgKKyMgIGVsaWYgKF9fTFpPX0xTUihVU0hSVF9NQVgsMTI3KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9TSE9SVCAgICAgICAgMTYKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkxaT19TSVpFT0ZfU0hPUlQiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9JTlQpCisjICBpZiAoTFpPX0FSQ0hfQ1JBWV9QVlApCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0lOVCAgICAgICAgICA4CisjICBlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDIKKyMgIGVsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZmZmZmTCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDQKKyMgIGVsaWYgKF9fTFpPX0xTUihVSU5UX01BWCw3KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9JTlQgICAgICAgICAgMQorIyAgZWxpZiAoX19MWk9fTFNSKFVJTlRfTUFYLDE1KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9JTlQgICAgICAgICAgMgorIyAgZWxpZiAoX19MWk9fTFNSKFVJTlRfTUFYLDMxKSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9JTlQgICAgICAgICAgNAorIyAgZWxpZiAoX19MWk9fTFNSKFVJTlRfTUFYLDYzKSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9JTlQgICAgICAgICAgOAorIyAgZWxpZiAoX19MWk9fTFNSKFVJTlRfTUFYLDEyNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDE2CisjICBlbHNlCisjICAgIGVycm9yICJMWk9fU0laRU9GX0lOVCIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX0xPTkcpCisjICBpZiAoVUxPTkdfTUFYID09IExaT18weGZmZmZmZmZmTCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgIDQKKyMgIGVsaWYgKF9fTFpPX0xTUihVTE9OR19NQVgsNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgIDEKKyMgIGVsaWYgKF9fTFpPX0xTUihVTE9OR19NQVgsMTUpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkcgICAgICAgICAyCisjICBlbGlmIChfX0xaT19MU1IoVUxPTkdfTUFYLDMxKSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HICAgICAgICAgNAorIyAgZWxpZiAoX19MWk9fTFNSKFVMT05HX01BWCw2MykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgIDgKKyMgIGVsaWYgKF9fTFpPX0xTUihVTE9OR19NQVgsMTI3KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HICAgICAgICAgMTYKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkxaT19TSVpFT0ZfTE9ORyIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTFpPX1NJWkVPRl9fX0lOVDY0KQorI2lmIChMWk9fU0laRU9GX0xPTkcgPiAwICYmIExaT19TSVpFT0ZfTE9ORyA8IDgpCisjICBpZiBkZWZpbmVkKF9fTE9OR19NQVhfXykgJiYgZGVmaW5lZChfX0xPTkdfTE9OR19NQVhfXykKKyMgICAgaWYgKExaT19DQ19HTlVDID49IDB4MDMwMzAwdWwpCisjICAgICAgaWYgKChfX0xPTkdfTUFYX18pKzAgPT0gKF9fTE9OR19MT05HX01BWF9fKSswKQorIyAgICAgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgTFpPX1NJWkVPRl9MT05HCisjICAgICAgZWxpZiAoX19MWk9fTFNSKF9fTE9OR19MT05HX01BWF9fLDMwKSA9PSAxKQorIyAgICAgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgNAorIyAgICAgIGVuZGlmCisjICAgIGVuZGlmCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX0xPTkdfTE9ORykgJiYgIWRlZmluZWQoTFpPX1NJWkVPRl9fX0lOVDY0KQorI2lmIChMWk9fU0laRU9GX0xPTkcgPiAwICYmIExaT19TSVpFT0ZfTE9ORyA8IDgpCisjaWYgKExaT19BUkNIX0kwODYgJiYgTFpPX0NDX0RNQykKKyNlbGlmIChMWk9fQ0NfQ0lMTFkpICYmIGRlZmluZWQoX19HTlVDX18pCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoTFpPX0NDX0dOVUMgfHwgTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmICgoTFpPX09TX1dJTjMyIHx8IExaT19PU19XSU42NCB8fCBkZWZpbmVkKF9XSU4zMikpICYmIExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDE0MDApKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19PU19XSU42NCB8fCBkZWZpbmVkKF9XSU42NCkpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9fX0lOVDY0ICAgICAgICA4CisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX0NDX0RNQykpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX0NDX1NZTUFOVEVDQyAmJiAoX19TQ19fID49IDB4NzAwKSkpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX0NDX0lOVEVMQyAmJiBkZWZpbmVkKF9fbGludXhfXykpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19NV0VSS1MgfHwgTFpPX0NDX1BFTExFU0MgfHwgTFpPX0NDX1BHSSB8fCBMWk9fQ0NfU1VOUFJPQykpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX0NDX0lOVEVMQyB8fCBMWk9fQ0NfTVNDKSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmICgoTFpPX09TX1dJTjMyIHx8IGRlZmluZWQoX1dJTjMyKSkgJiYgKExaT19DQ19NU0MpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDUyMCkpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19XQVRDT01DICYmIChfX1dBVENPTUNfXyA+PSAxMTAwKSkpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9fX0lOVDY0ICAgICAgICA4CisjZWxpZiAoTFpPX0NDX1dBVENPTUMgJiYgZGVmaW5lZChfSU5URUdSQUxfTUFYX0JJVFMpICYmIChfSU5URUdSQUxfTUFYX0JJVFMgPT0gNjQpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKExaT19PU19PUzQwMCB8fCBkZWZpbmVkKF9fT1M0MDBfXykpICYmIGRlZmluZWQoX19MTFA2NF9JRkNfXykKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChkZWZpbmVkKF9fdm1zKSB8fCBkZWZpbmVkKF9fVk1TKSkgJiYgKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUrMCA9PSA2NCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChMWk9fQ0NfU0RDQykgJiYgKExaT19TSVpFT0ZfSU5UID09IDIpCisjZWxpZiAxICYmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiBkZWZpbmVkKExaT19DQ19HTlVDKQorIyAgaWYgKExaT19DQ19HTlVDIDwgMHgwMjA4MDB1bCkKKyMgICAgdW5kZWYgTFpPX1NJWkVPRl9MT05HX0xPTkcKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19DRkdfTk9fTE9OR19MT05HKSB8fCBkZWZpbmVkKF9fTk9fTE9OR19MT05HKQorIyAgdW5kZWYgTFpPX1NJWkVPRl9MT05HX0xPTkcKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19TSVpFT0ZfVk9JRF9QKQorI2lmIChMWk9fQVJDSF9JMDg2KQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgMgorIyAgaWYgKExaT19NTV9USU5ZIHx8IExaT19NTV9TTUFMTCB8fCBMWk9fTU1fTUVESVVNKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgMgorIyAgZWxpZiAoTFpPX01NX0NPTVBBQ1QgfHwgTFpPX01NX0xBUkdFIHx8IExaT19NTV9IVUdFKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgNAorIyAgZWxzZQorIyAgICBlcnJvciAiTFpPX01NIgorIyAgZW5kaWYKKyNlbGlmIChMWk9fQVJDSF9BVlIgfHwgTFpPX0FSQ0hfWjgwKQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgMgorI2VsaWYgKExaT19BUkNIX0MxNjYgfHwgTFpPX0FSQ0hfTUNTNTEgfHwgTFpPX0FSQ0hfTUNTMjUxIHx8IExaT19BUkNIX01TUDQzMCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIDIKKyNlbGlmIChMWk9fQVJDSF9IODMwMCkKKyMgIGlmIGRlZmluZWQoX19OT1JNQUxfTU9ERV9fKQorIyAgICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgNAorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgMgorIyAgZWxpZiBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykgfHwgZGVmaW5lZChfX0g4MzAwU1hfXykKKyMgICAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgIDQKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgIDIKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVuZGlmCisjICBpZiAoTFpPX0NDX0dOVUMgJiYgKExaT19DQ19HTlVDIDwgMHgwNDAwMDB1bCkpICYmIChMWk9fU0laRU9GX0lOVCA9PSA0KQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9TSVpFX1QgICAgICAgTFpPX1NJWkVPRl9JTlQKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfUFRSRElGRl9UICAgIExaT19TSVpFT0ZfSU5UCisjICBlbmRpZgorI2VsaWYgKExaT19BUkNIX00xNkMpCisjICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgICAyCisjICBpZiBkZWZpbmVkKF9fbTMyY19jcHVfXykgfHwgZGVmaW5lZChfX20zMmNtX2NwdV9fKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgNAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgMgorIyAgZW5kaWYKKyNlbGlmIChMWk9fU0laRU9GX0xPTkcgPT0gOCkgJiYgKChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fUjU5MDBfXykpIHx8IGRlZmluZWQoX19NSVBTX1BTWDJfXykpCisjICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgICA4CisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICA0CisjZWxpZiBkZWZpbmVkKF9fTExQNjRfXykgfHwgZGVmaW5lZChfX0xMUDY0KSB8fCBkZWZpbmVkKF9MTFA2NCkgfHwgZGVmaW5lZChfV0lONjQpCisjICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgICA4CisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICA4CisjZWxpZiAoTFpPX09TX09TNDAwIHx8IGRlZmluZWQoX19PUzQwMF9fKSkgJiYgZGVmaW5lZChfX0xMUDY0X0lGQ19fKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjICBkZWZpbmUgTFpPX1NJWkVPRl9TSVpFX1QgICAgICAgICBMWk9fU0laRU9GX0xPTkcKKyMgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgICAgIExaT19TSVpFT0ZfTE9ORworI2VsaWYgKExaT19PU19PUzQwMCB8fCBkZWZpbmVkKF9fT1M0MDBfXykpCisjICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgICBMWk9fU0laRU9GX0xPTkcKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIDE2CisjICBkZWZpbmUgTFpPX1NJWkVPRl9TSVpFX1QgICAgICAgICBMWk9fU0laRU9GX0xPTkcKKyMgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgICAgIExaT19TSVpFT0ZfTE9ORworI2VsaWYgKGRlZmluZWQoX192bXMpIHx8IGRlZmluZWQoX19WTVMpKSAmJiAoX19JTklUSUFMX1BPSU5URVJfU0laRSswID09IDY0KQorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgOAorIyAgZGVmaW5lIExaT19TSVpFT0ZfU0laRV9UICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgICAgICBMWk9fU0laRU9GX0xPTkcKKyNlbGlmIChMWk9fQVJDSF9TUFUpCisjIGlmIDAKKyMgIGRlZmluZSBfX0xaT19XT1JEU0laRSAgICAgICAgICAgIDE2CisjIGVuZGlmCisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICA0CisjZWxzZQorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19XT1JEU0laRSkKKyMgIGlmIGRlZmluZWQoX19MWk9fV09SRFNJWkUpCisjICAgIGRlZmluZSBMWk9fV09SRFNJWkUgICAgICAgICAgICBfX0xaT19XT1JEU0laRQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX1dPUkRTSVpFICAgICAgICAgICAgTFpPX1NJWkVPRl9WT0lEX1AKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX1NJWkVfVCkKKyNpZiAoTFpPX0FSQ0hfSTA4NiB8fCBMWk9fQVJDSF9NMTZDKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfU0laRV9UICAgICAgICAgMgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fU0laRU9GX1NJWkVfVCAgICAgICAgIExaT19TSVpFT0ZfVk9JRF9QCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19TSVpFT0ZfUFRSRElGRl9UKQorI2lmIChMWk9fQVJDSF9JMDg2KQorIyAgaWYgKExaT19NTV9USU5ZIHx8IExaT19NTV9TTUFMTCB8fCBMWk9fTU1fTUVESVVNIHx8IExaT19NTV9IVUdFKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgICAgTFpPX1NJWkVPRl9WT0lEX1AKKyMgIGVsaWYgKExaT19NTV9DT01QQUNUIHx8IExaT19NTV9MQVJHRSkKKyMgICAgaWYgKExaT19DQ19CT1JMQU5EQyB8fCBMWk9fQ0NfVFVSQk9DKQorIyAgICAgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgNAorIyAgICBlbHNlCisjICAgICAgZGVmaW5lIExaT19TSVpFT0ZfUFRSRElGRl9UICAyCisjICAgIGVuZGlmCisjICBlbHNlCisjICAgIGVycm9yICJMWk9fTU0iCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgICAgIExaT19TSVpFT0ZfU0laRV9UCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FCSV9ORVVUUkFMX0VORElBTikKKyMgIHVuZGVmIExaT19BQklfQklHX0VORElBTgorIyAgdW5kZWYgTFpPX0FCSV9MSVRUTEVfRU5ESUFOCisjZWxpZiAhZGVmaW5lZChMWk9fQUJJX0JJR19FTkRJQU4pICYmICFkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyNpZiAoTFpPX0FSQ0hfQUxQSEEpICYmIChMWk9fQVJDSF9DUkFZX01QUCkKKyMgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIChMWk9fQVJDSF9BTFBIQSB8fCBMWk9fQVJDSF9BTUQ2NCB8fCBMWk9fQVJDSF9CTEFDS0ZJTiB8fCBMWk9fQVJDSF9DUklTIHx8IExaT19BUkNIX0kwODYgfHwgTFpPX0FSQ0hfSTM4NiB8fCBMWk9fQVJDSF9NU1A0MzApCisjICBkZWZpbmUgTFpPX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfTTY4SyB8fCBMWk9fQVJDSF9TMzkwKQorIyAgZGVmaW5lIExaT19BQklfQklHX0VORElBTiAgICAgICAgMQorI2VsaWYgMSAmJiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX18pCisjICBpZiAoX19MSVRUTEVfRU5ESUFOX18gPT0gMSkKKyMgICAgZGVmaW5lIExaT19BQklfTElUVExFX0VORElBTiAgIDEKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19BQklfQklHX0VORElBTiAgICAgIDEKKyMgIGVuZGlmCisjZWxpZiAxICYmIGRlZmluZWQoX19CSUdfRU5ESUFOX18pICYmICFkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorIyAgZGVmaW5lIExaT19BQklfQklHX0VORElBTiAgICAgICAgMQorI2VsaWYgMSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX0JJR19FTkRJQU5fXykKKyMgIGRlZmluZSBMWk9fQUJJX0xJVFRMRV9FTkRJQU4gICAgIDEKKyNlbGlmIDEgJiYgKExaT19BUkNIX0FSTSkgJiYgZGVmaW5lZChfX0FSTUVCX18pICYmICFkZWZpbmVkKF9fQVJNRUxfXykKKyMgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgKExaT19BUkNIX0FSTSkgJiYgZGVmaW5lZChfX0FSTUVMX18pICYmICFkZWZpbmVkKF9fQVJNRUJfXykKKyMgIGRlZmluZSBMWk9fQUJJX0xJVFRMRV9FTkRJQU4gICAgIDEKKyNlbGlmIDEgJiYgKExaT19BUkNIX01JUFMpICYmIGRlZmluZWQoX19NSVBTRUJfXykgJiYgIWRlZmluZWQoX19NSVBTRUxfXykKKyMgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgKExaT19BUkNIX01JUFMpICYmIGRlZmluZWQoX19NSVBTRUxfXykgJiYgIWRlZmluZWQoX19NSVBTRUJfXykKKyMgIGRlZmluZSBMWk9fQUJJX0xJVFRMRV9FTkRJQU4gICAgIDEKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQUJJX0JJR19FTkRJQU4pICYmIGRlZmluZWQoTFpPX0FCSV9MSVRUTEVfRU5ESUFOKQorIyAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BQklfQklHX0VORElBTikKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfRU5ESUFOICAgICAgICJiZSIKKyNlbGlmIGRlZmluZWQoTFpPX0FCSV9MSVRUTEVfRU5ESUFOKQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9FTkRJQU4gICAgICAgImxlIgorI2VsaWYgZGVmaW5lZChMWk9fQUJJX05FVVRSQUxfRU5ESUFOKQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9FTkRJQU4gICAgICAgIm5ldXRyYWwiCisjZW5kaWYKKyNpZiAoTFpPX1NJWkVPRl9JTlQgPT0gMSAmJiBMWk9fU0laRU9GX0xPTkcgPT0gMiAmJiBMWk9fU0laRU9GX1ZPSURfUCA9PSAyKQorIyAgZGVmaW5lIExaT19BQklfSThMUDE2ICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAiaThscDE2IgorI2VsaWYgKExaT19TSVpFT0ZfSU5UID09IDIgJiYgTFpPX1NJWkVPRl9MT05HID09IDIgJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gMikKKyMgIGRlZmluZSBMWk9fQUJJX0lMUDE2ICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAiaWxwMTYiCisjZWxpZiAoTFpPX1NJWkVPRl9JTlQgPT0gNCAmJiBMWk9fU0laRU9GX0xPTkcgPT0gNCAmJiBMWk9fU0laRU9GX1ZPSURfUCA9PSA0KQorIyAgZGVmaW5lIExaT19BQklfSUxQMzIgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQUJJX1BNICAgICAgICJpbHAzMiIKKyNlbGlmIChMWk9fU0laRU9GX0lOVCA9PSA0ICYmIExaT19TSVpFT0ZfTE9ORyA9PSA0ICYmIExaT19TSVpFT0ZfVk9JRF9QID09IDggJiYgTFpPX1NJWkVPRl9TSVpFX1QgPT0gOCkKKyMgIGRlZmluZSBMWk9fQUJJX0xMUDY0ICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAibGxwNjQiCisjZWxpZiAoTFpPX1NJWkVPRl9JTlQgPT0gNCAmJiBMWk9fU0laRU9GX0xPTkcgPT0gOCAmJiBMWk9fU0laRU9GX1ZPSURfUCA9PSA4KQorIyAgZGVmaW5lIExaT19BQklfTFA2NCAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQUJJX1BNICAgICAgICJscDY0IgorI2VsaWYgKExaT19TSVpFT0ZfSU5UID09IDggJiYgTFpPX1NJWkVPRl9MT05HID09IDggJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gOCkKKyMgIGRlZmluZSBMWk9fQUJJX0lMUDY0ICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAiaWxwNjQiCisjZWxpZiAoTFpPX1NJWkVPRl9JTlQgPT0gNCAmJiBMWk9fU0laRU9GX0xPTkcgPT0gOCAmJiBMWk9fU0laRU9GX1ZPSURfUCA9PSA0KQorIyAgZGVmaW5lIExaT19BQklfSVAzMkw2NCAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQUJJX1BNICAgICAgICJpcDMybDY0IgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19MWk9fTElCQ19PVkVSUklERSkKKyNpZiBkZWZpbmVkKExaT19MSUJDX05BS0VEKQorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAibmFrZWQiCisjZWxpZiBkZWZpbmVkKExaT19MSUJDX0ZSRUVTVEFORElORykKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImZyZWVzdGFuZGluZyIKKyNlbGlmIGRlZmluZWQoTFpPX0xJQkNfTU9TVExZX0ZSRUVTVEFORElORykKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgIm1mcmVlc3RhbmRpbmciCisjZWxpZiBkZWZpbmVkKExaT19MSUJDX0lTT0M5MCkKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImlzb2M5MCIKKyNlbGlmIGRlZmluZWQoTFpPX0xJQkNfSVNPQzk5KQorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAiaXNvYzk5IgorI2VsaWYgZGVmaW5lZChfX2RpZXRsaWJjX18pCisjICBkZWZpbmUgTFpPX0xJQkNfRElFVExJQkMgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImRpZXRsaWJjIgorI2VsaWYgZGVmaW5lZChfTkVXTElCX1ZFUlNJT04pCisjICBkZWZpbmUgTFpPX0xJQkNfTkVXTElCICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgIm5ld2xpYiIKKyNlbGlmIGRlZmluZWQoX19VQ0xJQkNfXykgJiYgZGVmaW5lZChfX1VDTElCQ19NQUpPUl9fKSAmJiBkZWZpbmVkKF9fVUNMSUJDX01JTk9SX18pCisjICBpZiBkZWZpbmVkKF9fVUNMSUJDX1NVQkxFVkVMX18pCisjICAgIGRlZmluZSBMWk9fTElCQ19VQ0xJQkMgICAgIChfX1VDTElCQ19NQUpPUl9fICogMHgxMDAwMEwgKyBfX1VDTElCQ19NSU5PUl9fICogMHgxMDAgKyBfX1VDTElCQ19TVUJMRVZFTF9fKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0xJQkNfVUNMSUJDICAgICAweDAwMDkwYkwKKyMgIGVuZGlmCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJ1Y2xpYmMiCisjZWxpZiBkZWZpbmVkKF9fR0xJQkNfXykgJiYgZGVmaW5lZChfX0dMSUJDX01JTk9SX18pCisjICBkZWZpbmUgTFpPX0xJQkNfR0xJQkMgICAgICAgIChfX0dMSUJDX18gKiAweDEwMDAwTCArIF9fR0xJQkNfTUlOT1JfXyAqIDB4MTAwKQorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAiZ2xpYmMiCisjZWxpZiAoTFpPX0NDX01XRVJLUykgJiYgZGVmaW5lZChfX01TTF9fKQorIyAgZGVmaW5lIExaT19MSUJDX01TTCAgICAgICAgICBfX01TTF9fCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJtc2wiCisjZWxpZiAxICYmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykKKyMgIGRlZmluZSBMWk9fTElCQ19JU09DOTAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAiaXNvYzkwIgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fTElCQ19ERUZBVUxUICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAiZGVmYXVsdCIKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fZ251Y19leHRlbnNpb25fXykKKyNpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMjA4MDB1bCkKKyMgIGRlZmluZSBfX2x6b19nbnVjX2V4dGVuc2lvbl9fICAgIF9fZXh0ZW5zaW9uX18KKyNlbGlmIChMWk9fQ0NfTExWTSB8fCBMWk9fQ0NfUEFUSFNDQUxFKQorIyAgZGVmaW5lIF9fbHpvX2dudWNfZXh0ZW5zaW9uX18gICAgX19leHRlbnNpb25fXworI2Vsc2UKKyMgIGRlZmluZSBfX2x6b19nbnVjX2V4dGVuc2lvbl9fCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX3VhX3ZvbGF0aWxlKQorIyAgZGVmaW5lIF9fbHpvX3VhX3ZvbGF0aWxlICAgICB2b2xhdGlsZQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fYWxpZ25vZikKKyNpZiAoTFpPX0NDX0NJTExZIHx8IExaT19DQ19HTlVDIHx8IExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUgfHwgTFpPX0NDX1BHSSkKKyMgIGRlZmluZSBfX2x6b19hbGlnbm9mKGUpICAgICAgX19hbGlnbm9mX18oZSkKKyNlbGlmIChMWk9fQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDcwMCkpCisjICBkZWZpbmUgX19sem9fYWxpZ25vZihlKSAgICAgIF9fYWxpZ25vZl9fKGUpCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkpCisjICBkZWZpbmUgX19sem9fYWxpZ25vZihlKSAgICAgIF9fYWxpZ25vZihlKQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX2FsaWdub2YpCisjICBkZWZpbmUgX19sem9fSEFWRV9hbGlnbm9mIDEKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NvbnN0cnVjdG9yKQorI2lmIChMWk9fQ0NfR05VQyA+PSAweDAzMDQwMHVsKQorIyAgZGVmaW5lIF9fbHpvX2NvbnN0cnVjdG9yICAgICBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0cnVjdG9yX18sX191c2VkX18pKQorI2VsaWYgKExaT19DQ19HTlVDID49IDB4MDIwNzAwdWwpCisjICBkZWZpbmUgX19sem9fY29uc3RydWN0b3IgICAgIF9fYXR0cmlidXRlX18oKF9fY29uc3RydWN0b3JfXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19jb25zdHJ1Y3RvciAgICAgX19hdHRyaWJ1dGVfXygoX19jb25zdHJ1Y3Rvcl9fKSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19jb25zdHJ1Y3RvcikKKyMgIGRlZmluZSBfX2x6b19IQVZFX2NvbnN0cnVjdG9yIDEKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2Rlc3RydWN0b3IpCisjaWYgKExaT19DQ19HTlVDID49IDB4MDMwNDAwdWwpCisjICBkZWZpbmUgX19sem9fZGVzdHJ1Y3RvciAgICAgIF9fYXR0cmlidXRlX18oKF9fZGVzdHJ1Y3Rvcl9fLF9fdXNlZF9fKSkKKyNlbGlmIChMWk9fQ0NfR05VQyA+PSAweDAyMDcwMHVsKQorIyAgZGVmaW5lIF9fbHpvX2Rlc3RydWN0b3IgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Rlc3RydWN0b3JfXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19kZXN0cnVjdG9yICAgICAgX19hdHRyaWJ1dGVfXygoX19kZXN0cnVjdG9yX18pKQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX2Rlc3RydWN0b3IpCisjICBkZWZpbmUgX19sem9fSEFWRV9kZXN0cnVjdG9yIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fSEFWRV9kZXN0cnVjdG9yKSAmJiAhZGVmaW5lZChfX2x6b19IQVZFX2NvbnN0cnVjdG9yKQorIyAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19pbmxpbmUpCisjaWYgKExaT19DQ19UVVJCT0MgJiYgKF9fVFVSQk9DX18gPD0gMHgwMjk1KSkKKyNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIGlubGluZQorI2VsaWYgKExaT19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDU1MCkpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiAoTFpPX0NDX0NJTExZIHx8IExaT19DQ19HTlVDIHx8IExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUgfHwgTFpPX0NDX1BHSSkKKyMgIGRlZmluZSBfX2x6b19pbmxpbmUgICAgICAgICAgX19pbmxpbmVfXworI2VsaWYgKExaT19DQ19ETUMpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiAoTFpPX0NDX0lOVEVMQykKKyMgIGRlZmluZSBfX2x6b19pbmxpbmUgICAgICAgICAgX19pbmxpbmUKKyNlbGlmIChMWk9fQ0NfTVdFUktTICYmIChfX01XRVJLU19fID49IDB4MjQwNSkpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gOTAwKSkKKyMgIGRlZmluZSBfX2x6b19pbmxpbmUgICAgICAgICAgX19pbmxpbmUKKyNlbGlmIGRlZmluZWQoX19TVERDX1ZFUlNJT05fXykgJiYgKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkKKyMgIGRlZmluZSBfX2x6b19pbmxpbmUgICAgICAgICAgaW5saW5lCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9faW5saW5lKQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfaW5saW5lIDEKKyNlbHNlCisjICBkZWZpbmUgX19sem9faW5saW5lCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19mb3JjZWlubGluZSkKKyNpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMzAyMDB1bCkKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZSAgICAgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA0NTApICYmIExaT19DQ19TWU5UQVhfTVNDKQorIyAgZGVmaW5lIF9fbHpvX2ZvcmNlaW5saW5lICAgICBfX2ZvcmNlaW5saW5lCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA4MDApICYmIExaT19DQ19TWU5UQVhfR05VQykKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZSAgICAgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZSAgICAgX19pbmxpbmVfXyBfX2F0dHJpYnV0ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTIwMCkpCisjICBkZWZpbmUgX19sem9fZm9yY2VpbmxpbmUgICAgIF9fZm9yY2VpbmxpbmUKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19mb3JjZWlubGluZSkKKyMgIGRlZmluZSBfX2x6b19IQVZFX2ZvcmNlaW5saW5lIDEKKyNlbHNlCisjICBkZWZpbmUgX19sem9fZm9yY2VpbmxpbmUKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX25vaW5saW5lKQorI2lmIDEgJiYgKExaT19BUkNIX0kzODYpICYmIChMWk9fQ0NfR05VQyA+PSAweDA0MDAwMHVsKSAmJiAoTFpPX0NDX0dOVUMgPCAweDA0MDAwM3VsKQorIyAgZGVmaW5lIF9fbHpvX25vaW5saW5lICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18sX191c2VkX18pKQorI2VsaWYgKExaT19DQ19HTlVDID49IDB4MDMwMjAwdWwpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA2MDApICYmIExaT19DQ19TWU5UQVhfTVNDKQorIyAgZGVmaW5lIF9fbHpvX25vaW5saW5lICAgICAgICBfX2RlY2xzcGVjKG5vaW5saW5lKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSAmJiBMWk9fQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19ub2lubGluZSAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fKSkKKyNlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMzAwKSkKKyMgIGRlZmluZSBfX2x6b19ub2lubGluZSAgICAgICAgX19kZWNsc3BlYyhub2lubGluZSkKKyNlbGlmIChMWk9fQ0NfTVdFUktTICYmIChfX01XRVJLU19fID49IDB4MzIwMCkgJiYgKExaT19PU19XSU4zMiB8fCBMWk9fT1NfV0lONjQpKQorIyAgaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fbHpvX25vaW5saW5lICAgICAgX19kZWNsc3BlYyhub2lubGluZSkKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fbm9pbmxpbmUpCisjICBkZWZpbmUgX19sem9fSEFWRV9ub2lubGluZSAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX25vaW5saW5lCisjZW5kaWYKKyNpZiAoZGVmaW5lZChfX2x6b19IQVZFX2ZvcmNlaW5saW5lKSB8fCBkZWZpbmVkKF9fbHpvX0hBVkVfbm9pbmxpbmUpKSAmJiAhZGVmaW5lZChfX2x6b19IQVZFX2lubGluZSkKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fbm9yZXR1cm4pCisjaWYgKExaT19DQ19HTlVDID49IDB4MDIwNzAwdWwpCisjICBkZWZpbmUgX19sem9fbm9yZXR1cm4gICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA0NTApICYmIExaT19DQ19TWU5UQVhfTVNDKQorIyAgZGVmaW5lIF9fbHpvX25vcmV0dXJuICAgICAgICBfX2RlY2xzcGVjKG5vcmV0dXJuKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNjAwKSAmJiBMWk9fQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19sem9fbm9yZXR1cm4gICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19ub3JldHVybiAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub3JldHVybl9fKSkKKyNlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkKKyMgIGRlZmluZSBfX2x6b19ub3JldHVybiAgICAgICAgX19kZWNsc3BlYyhub3JldHVybikKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19ub3JldHVybikKKyMgIGRlZmluZSBfX2x6b19IQVZFX25vcmV0dXJuIDEKKyNlbHNlCisjICBkZWZpbmUgX19sem9fbm9yZXR1cm4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX25vdGhyb3cpCisjaWYgKExaT19DQ19HTlVDID49IDB4MDMwMzAwdWwpCisjICBkZWZpbmUgX19sem9fbm90aHJvdyAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm90aHJvd19fKSkKKyNlbGlmIChMWk9fQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDQ1MCkgJiYgTFpPX0NDX1NZTlRBWF9NU0MpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBkZWZpbmUgX19sem9fbm90aHJvdyAgICAgICAgIF9fZGVjbHNwZWMobm90aHJvdykKKyNlbGlmIChMWk9fQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDgwMCkgJiYgTFpPX0NDX1NZTlRBWF9HTlVDKQorIyAgZGVmaW5lIF9fbHpvX25vdGhyb3cgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vdGhyb3dfXykpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19ub3Rocm93ICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub3Rocm93X18pKQorI2VsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIF9fbHpvX25vdGhyb3cgICAgICAgICBfX2RlY2xzcGVjKG5vdGhyb3cpCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fbm90aHJvdykKKyMgIGRlZmluZSBfX2x6b19IQVZFX25vdGhyb3cgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2x6b19ub3Rocm93CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19yZXN0cmljdCkKKyNpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMzA0MDB1bCkKKyMgIGRlZmluZSBfX2x6b19yZXN0cmljdCAgICAgICAgX19yZXN0cmljdF9fCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA2MDApICYmIExaT19DQ19TWU5UQVhfR05VQykKKyMgIGRlZmluZSBfX2x6b19yZXN0cmljdCAgICAgICAgX19yZXN0cmljdF9fCisjZWxpZiAoTFpPX0NDX0xMVk0pCisjICBkZWZpbmUgX19sem9fcmVzdHJpY3QgICAgICAgIF9fcmVzdHJpY3RfXworI2VsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDE0MDApKQorIyAgZGVmaW5lIF9fbHpvX3Jlc3RyaWN0ICAgICAgICBfX3Jlc3RyaWN0CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fcmVzdHJpY3QpCisjICBkZWZpbmUgX19sem9fSEFWRV9yZXN0cmljdCAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX3Jlc3RyaWN0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19saWtlbHkpICYmICFkZWZpbmVkKF9fbHpvX3VubGlrZWx5KQorI2lmIChMWk9fQ0NfR05VQyA+PSAweDAzMDIwMHVsKQorIyAgZGVmaW5lIF9fbHpvX2xpa2VseShlKSAgICAgICAoX19idWlsdGluX2V4cGVjdCghIShlKSwxKSkKKyMgIGRlZmluZSBfX2x6b191bmxpa2VseShlKSAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMCkpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA4MDApKQorIyAgZGVmaW5lIF9fbHpvX2xpa2VseShlKSAgICAgICAoX19idWlsdGluX2V4cGVjdCghIShlKSwxKSkKKyMgIGRlZmluZSBfX2x6b191bmxpa2VseShlKSAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMCkpCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19saWtlbHkoZSkgICAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMSkpCisjICBkZWZpbmUgX19sem9fdW5saWtlbHkoZSkgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDApKQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX2xpa2VseSkKKyMgIGRlZmluZSBfX2x6b19IQVZFX2xpa2VseSAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX2xpa2VseShlKSAgICAgICAoZSkKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fdW5saWtlbHkpCisjICBkZWZpbmUgX19sem9fSEFWRV91bmxpa2VseSAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX3VubGlrZWx5KGUpICAgICAoZSkKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19VTlVTRUQpCisjICBpZiAoTFpPX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPj0gMHgwNjAwKSkKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgICgodm9pZCkgJnZhcikKKyMgIGVsaWYgKExaT19DQ19CT1JMQU5EQyB8fCBMWk9fQ0NfSElHSEMgfHwgTFpPX0NDX05EUEMgfHwgTFpPX0NDX1BFTExFU0MgfHwgTFpPX0NDX1RVUkJPQykKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgIGlmICgmdmFyKSA7IGVsc2UKKyMgIGVsaWYgKExaT19DQ19HTlVDIHx8IExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICAoKHZvaWQpIHZhcikKKyMgIGVsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSIDwgOTAwKSkKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgIGlmICgmdmFyKSA7IGVsc2UKKyMgIGVsaWYgKExaT19DQ19LRUlMQykKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgIHtleHRlcm4gaW50IF9fbHpvX3VudXNlZFsxLTIqIShzaXplb2YodmFyKT4wKV07fQorIyAgZWxpZiAoTFpPX0NDX1BBQ0lGSUNDKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSBzaXplb2YodmFyKSkKKyMgIGVsaWYgKExaT19DQ19XQVRDT01DKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSB2YXIpCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICAoKHZvaWQpICZ2YXIpCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1VOVVNFRF9GVU5DKQorIyAgaWYgKExaT19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDYwMCkpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0ZVTkMoZnVuYykgICAoKHZvaWQpIGZ1bmMpCisjICBlbGlmIChMWk9fQ0NfQk9STEFOREMgfHwgTFpPX0NDX05EUEMgfHwgTFpPX0NDX1RVUkJPQykKKyMgICAgZGVmaW5lIExaT19VTlVTRURfRlVOQyhmdW5jKSAgIGlmIChmdW5jKSA7IGVsc2UKKyMgIGVsaWYgKExaT19DQ19MTFZNKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSAmZnVuYykKKyMgIGVsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSIDwgOTAwKSkKKyMgICAgZGVmaW5lIExaT19VTlVTRURfRlVOQyhmdW5jKSAgIGlmIChmdW5jKSA7IGVsc2UKKyMgIGVsaWYgKExaT19DQ19NU0MpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0ZVTkMoZnVuYykgICAoKHZvaWQpICZmdW5jKQorIyAgZWxpZiAoTFpPX0NDX0tFSUxDIHx8IExaT19DQ19QRUxMRVNDKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9GVU5DKGZ1bmMpICAge2V4dGVybiBpbnQgX19sem9fdW51c2VkWzEtMiohKHNpemVvZigoaW50KWZ1bmMpPjApXTt9CisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0ZVTkMoZnVuYykgICAoKHZvaWQpIGZ1bmMpCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1VOVVNFRF9MQUJFTCkKKyMgIGlmIChMWk9fQ0NfV0FUQ09NQykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICAgZGVmaW5lIExaT19VTlVTRURfTEFCRUwobCkgICAgIHN3aXRjaCgwKSBjYXNlIDE6Z290byBsCisjICBlbGlmIChMWk9fQ0NfSU5URUxDIHx8IExaT19DQ19XQVRDT01DKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9MQUJFTChsKSAgICAgaWYgKDApIGdvdG8gbAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9MQUJFTChsKSAgICAgc3dpdGNoKDApIGNhc2UgMTpnb3RvIGwKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fREVGSU5FX1VOSU5JVElBTElaRURfVkFSKQorIyAgaWYgMAorIyAgICBkZWZpbmUgTFpPX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUih0eXBlLHZhcixpbml0KSAgdHlwZSB2YXIKKyMgIGVsaWYgMCAmJiAoTFpPX0NDX0dOVUMpCisjICAgIGRlZmluZSBMWk9fREVGSU5FX1VOSU5JVElBTElaRURfVkFSKHR5cGUsdmFyLGluaXQpICB0eXBlIHZhciA9IHZhcgorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUih0eXBlLHZhcixpbml0KSAgdHlwZSB2YXIgPSBpbml0CisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKQorIyAgaWYgKExaT19DQ19BWlRFQ0MgfHwgTFpPX0NDX1pPUlRFQ0hDKQorIyAgICBkZWZpbmUgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGUpICBleHRlcm4gaW50IF9fbHpvX2N0YVsxLSEoZSldOworIyAgZWxpZiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDKQorIyAgICBkZWZpbmUgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGUpICBleHRlcm4gaW50IF9fbHpvX2N0YVsxdS0yKiEoZSldOworIyAgZWxpZiAoTFpPX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA9PSAweDAyOTUpKQorIyAgICBkZWZpbmUgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGUpICBleHRlcm4gaW50IF9fbHpvX2N0YVsxLSEoZSldOworIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKGUpICBleHRlcm4gaW50IF9fbHpvX2N0YVsxLTIqIShlKV07CisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX0NPTVBJTEVfVElNRV9BU1NFUlQpCisjICBpZiAoTFpPX0NDX0FaVEVDQykKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGUpICB7dHlwZWRlZiBpbnQgX19sem9fY3RhX3RbMS0hKGUpXTt9CisjICBlbGlmIChMWk9fQ0NfRE1DIHx8IExaT19DQ19QQUNJRklDQyB8fCBMWk9fQ0NfU1lNQU5URUNDIHx8IExaT19DQ19aT1JURUNIQykKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGUpICBzd2l0Y2goMCkgY2FzZSAxOmNhc2UgIShlKTpicmVhazsKKyMgIGVsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSIDwgOTAwKSkKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGUpICBzd2l0Y2goMCkgY2FzZSAxOmNhc2UgIShlKTpicmVhazsKKyMgIGVsaWYgKExaT19DQ19UVVJCT0MgJiYgKF9fVFVSQk9DX18gPT0gMHgwMjk1KSkKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGUpICBzd2l0Y2goMCkgY2FzZSAxOmNhc2UgIShlKTpicmVhazsKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGUpICB7dHlwZWRlZiBpbnQgX19sem9fY3RhX3RbMS0yKiEoZSldO30KKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoTFpPX0FSQ0hfSTA4NiB8fCBMWk9fQVJDSF9JMzg2KSAmJiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19ET1MzMiB8fCBMWk9fT1NfT1MyIHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYgfHwgTFpPX09TX1dJTjMyIHx8IExaT19PU19XSU42NCkKKyMgIGlmIChMWk9fQ0NfR05VQyB8fCBMWk9fQ0NfSElHSEMgfHwgTFpPX0NDX05EUEMgfHwgTFpPX0NDX1BBQ0lGSUNDKQorIyAgZWxpZiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDIHx8IExaT19DQ19aT1JURUNIQykKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsICAgICAgICAgICAgICAgICBfX2NkZWNsCisjICAgIGRlZmluZSBfX2x6b19jZGVjbF9hdGV4aXQKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX21haW4gICAgICAgICAgICBfX2NkZWNsCisjICAgIGlmIChMWk9fT1NfT1MyICYmIChMWk9fQ0NfRE1DIHx8IExaT19DQ19TWU1BTlRFQ0MpKQorIyAgICAgIGRlZmluZSBfX2x6b19jZGVjbF9xc29ydCAgICAgICAgIF9fcGFzY2FsCisjICAgIGVsaWYgKExaT19PU19PUzIgJiYgKExaT19DQ19aT1JURUNIQykpCisjICAgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3Fzb3J0ICAgICAgICAgX3N0ZGNhbGwKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBfX2x6b19jZGVjbF9xc29ydCAgICAgICAgIF9fY2RlY2wKKyMgICAgZW5kaWYKKyMgIGVsaWYgKExaT19DQ19XQVRDT01DKQorIyAgICBkZWZpbmUgX19sem9fY2RlY2wgICAgICAgICAgICAgICAgIF9fY2RlY2wKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsICAgICAgICAgICAgICAgICBfX2NkZWNsCisjICAgIGRlZmluZSBfX2x6b19jZGVjbF9hdGV4aXQgICAgICAgICAgX19jZGVjbAorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfbWFpbiAgICAgICAgICAgIF9fY2RlY2wKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3Fzb3J0ICAgICAgICAgICBfX2NkZWNsCisjICBlbmRpZgorIyAgaWYgKExaT19DQ19HTlVDIHx8IExaT19DQ19ISUdIQyB8fCBMWk9fQ0NfTkRQQyB8fCBMWk9fQ0NfUEFDSUZJQ0MgfHwgTFpPX0NDX1dBVENPTUMpCisjICBlbGlmIChMWk9fT1NfT1MyICYmIChMWk9fQ0NfRE1DIHx8IExaT19DQ19TWU1BTlRFQ0MpKQorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlciAgICAgIF9fcGFzY2FsCisjICBlbGlmIChMWk9fT1NfT1MyICYmIChMWk9fQ0NfWk9SVEVDSEMpKQorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlciAgICAgIF9zdGRjYWxsCisjICBlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkgJiYgZGVmaW5lZChfTV9DRUVfUFVSRSkKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfX2NscmNhbGwKKyMgIGVsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDYwMCAmJiBfTVNDX1ZFUiA8IDcwMCkpCisjICAgIGlmIGRlZmluZWQoX0RMTCkKKyMgICAgICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlciAgICBfZmFyIF9jZGVjbCBfbG9hZGRzCisjICAgIGVsaWYgZGVmaW5lZChfTVQpCisjICAgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgX2ZhciBfY2RlY2wKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBfX2x6b19jZGVjbF9zaWdoYW5kbGVyICAgIF9jZGVjbAorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlciAgICAgIF9fY2RlY2wKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0FSQ0hfSTM4NikgJiYgKExaT19DQ19XQVRDT01DKQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsICAgICAgICAgICAgICAgICAgIF9fY2RlY2wKKyNlbGlmIChMWk9fQVJDSF9NNjhLICYmIExaT19PU19UT1MgJiYgKExaT19DQ19QVVJFQyB8fCBMWk9fQ0NfVFVSQk9DKSkKKyMgIGRlZmluZSBfX2x6b19jZGVjbCAgICAgICAgICAgICAgICAgICBjZGVjbAorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fY2RlY2wpCisjICBkZWZpbmUgX19sem9fY2RlY2wKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsX2F0ZXhpdCkKKyMgIGRlZmluZSBfX2x6b19jZGVjbF9hdGV4aXQKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsX21haW4pCisjICBkZWZpbmUgX19sem9fY2RlY2xfbWFpbgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fY2RlY2xfcXNvcnQpCisjICBkZWZpbmUgX19sem9fY2RlY2xfcXNvcnQKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIpCisjICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlcgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fY2RlY2xfdmEpCisjICBkZWZpbmUgX19sem9fY2RlY2xfdmEgICAgICAgICAgICAgICAgX19sem9fY2RlY2wKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19DRkdfTk9fV0lORE9XU19IKQorI2lmIChMWk9fT1NfQ1lHV0lOIHx8IChMWk9fT1NfRU1YICYmIGRlZmluZWQoX19SU1hOVF9fKSkgfHwgTFpPX09TX1dJTjMyIHx8IExaT19PU19XSU42NCkKKyMgIGlmIChMWk9fQ0NfV0FUQ09NQyAmJiAoX19XQVRDT01DX18gPCAxMDAwKSkKKyMgIGVsaWYgKExaT19PU19XSU4zMiAmJiBMWk9fQ0NfR05VQykgJiYgZGVmaW5lZChfX1BXMzJfXykKKyMgIGVsaWYgKChMWk9fT1NfQ1lHV0lOIHx8IGRlZmluZWQoX19NSU5HVzMyX18pKSAmJiAoTFpPX0NDX0dOVUMgJiYgKExaT19DQ19HTlVDIDwgMHgwMjVmMDB1bCkpKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0hBVkVfV0lORE9XU19IIDEKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIChMWk9fQVJDSF9BTFBIQSkKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VJTlRfSU5ERVggIDEKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1NIT1JUICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VTSE9SVCAgICAgIDEKKyNlbGlmIChMWk9fQVJDSF9BTUQ2NCkKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX0lOVF9JTkRFWCAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VJTlRfSU5ERVggIDEKKyMgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDE2ICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDMyICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDY0ICAgICAgIDEKKyNlbGlmIChMWk9fQVJDSF9BUk0gJiYgTFpPX0FSQ0hfQVJNX1RIVU1CKQorI2VsaWYgKExaT19BUkNIX0FSTSkKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1NIT1JUICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VTSE9SVCAgICAgIDEKKyNlbGlmIChMWk9fQVJDSF9DUklTKQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMTYgICAgICAgMQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMzIgICAgICAgMQorI2VsaWYgKExaT19BUkNIX0kzODYpCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQxNiAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQzMiAgICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfSUE2NCkKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX0lOVF9JTkRFWCAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VJTlRfSU5ERVggIDEKKyMgIGRlZmluZSBMWk9fT1BUX1BSRUZFUl9QT1NUSU5DICAgIDEKKyNlbGlmIChMWk9fQVJDSF9NNjhLKQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BPU1RJTkMgICAgMQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BSRURFQyAgICAgMQorIyAgaWYgZGVmaW5lZChfX21jNjgwMjBfXykgJiYgIWRlZmluZWQoX19tY29sZGZpcmVfXykKKyMgICAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMTYgICAgIDEKKyMgICAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMzIgICAgIDEKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0FSQ0hfTUlQUykKKyMgIGRlZmluZSBMWk9fT1BUX0FWT0lEX1VJTlRfSU5ERVggIDEKKyNlbGlmIChMWk9fQVJDSF9QT1dFUlBDKQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BSRUlOQyAgICAgMQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BSRURFQyAgICAgMQorIyAgaWYgZGVmaW5lZChMWk9fQUJJX0JJR19FTkRJQU4pCisjICAgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDE2ICAgICAxCisjICAgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDMyICAgICAxCisjICBlbmRpZgorI2VsaWYgKExaT19BUkNIX1MzOTApCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQxNiAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQzMiAgICAgICAxCisjICBpZiAoTFpPX1NJWkVPRl9TSVpFX1QgPT0gOCkKKyMgICAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVENjQgICAgIDEKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0FSQ0hfU0gpCisjICBkZWZpbmUgTFpPX09QVF9QUkVGRVJfUE9TVElOQyAgICAxCisjICBkZWZpbmUgTFpPX09QVF9QUkVGRVJfUFJFREVDICAgICAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fQ0ZHX05PX0lOTElORV9BU00pCisjaWYgZGVmaW5lZChMWk9fQ0NfTExWTSkKKyMgIGRlZmluZSBMWk9fQ0ZHX05PX0lOTElORV9BU00gMQorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fQ0ZHX05PX1VOQUxJR05FRCkKKyNpZiBkZWZpbmVkKExaT19BQklfTkVVVFJBTF9FTkRJQU4pIHx8IGRlZmluZWQoTFpPX0FSQ0hfR0VORVJJQykKKyMgIGRlZmluZSBMWk9fQ0ZHX05PX1VOQUxJR05FRCAxCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0NGR19OT19VTkFMSUdORUQpCisjICB1bmRlZiBMWk9fT1BUX1VOQUxJR05FRDE2CisjICB1bmRlZiBMWk9fT1BUX1VOQUxJR05FRDMyCisjICB1bmRlZiBMWk9fT1BUX1VOQUxJR05FRDY0CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19DRkdfTk9fSU5MSU5FX0FTTSkKKyNlbGlmIChMWk9fQVJDSF9JMzg2ICYmIChMWk9fT1NfRE9TMzIgfHwgTFpPX09TX1dJTjMyKSAmJiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfSU5URUxDIHx8IExaT19DQ19NU0MgfHwgTFpPX0NDX1BFTExFU0MpKQorIyAgZGVmaW5lIExaT19BU01fU1lOVEFYX01TQyAxCisjZWxpZiAoTFpPX09TX1dJTjY0ICYmIChMWk9fQ0NfRE1DIHx8IExaT19DQ19JTlRFTEMgfHwgTFpPX0NDX01TQyB8fCBMWk9fQ0NfUEVMTEVTQykpCisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX0NDX0dOVUMgfHwgTFpPX0NDX0lOVEVMQyB8fCBMWk9fQ0NfUEFUSFNDQUxFKSkKKyMgIGRlZmluZSBMWk9fQVNNX1NZTlRBWF9HTlVDIDEKKyNlbGlmIChMWk9fQVJDSF9BTUQ2NCAmJiAoTFpPX0NDX0dOVUMgfHwgTFpPX0NDX0lOVEVMQyB8fCBMWk9fQ0NfUEFUSFNDQUxFKSkKKyMgIGRlZmluZSBMWk9fQVNNX1NZTlRBWF9HTlVDIDEKKyNlbmRpZgorI2lmIChMWk9fQVNNX1NZTlRBWF9HTlVDKQorI2lmIChMWk9fQVJDSF9JMzg2ICYmIExaT19DQ19HTlVDICYmIChMWk9fQ0NfR05VQyA8IDB4MDIwMDAwdWwpKQorIyAgZGVmaW5lIF9fTFpPX0FTTV9DTE9CQkVSICAgICAgICAgImF4IgorI2VsaWYgKExaT19DQ19JTlRFTEMpCisjICBkZWZpbmUgX19MWk9fQVNNX0NMT0JCRVIgICAgICAgICAibWVtb3J5IgorI2Vsc2UKKyMgIGRlZmluZSBfX0xaT19BU01fQ0xPQkJFUiAgICAgICAgICJjYyIsICJtZW1vcnkiCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9fSU5GT1NUUl9NTSkKKyNlbGlmIChMWk9fTU1fRkxBVCkgJiYgKGRlZmluZWQoX19MWk9fSU5GT1NUUl9QTSkgfHwgZGVmaW5lZChMWk9fSU5GT19BQklfUE0pKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfTU0gICAgICAgICAgIiIKKyNlbGlmIGRlZmluZWQoTFpPX0lORk9fTU0pCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9NTSAgICAgICAgICAiLiIgTFpPX0lORk9fTU0KKyNlbHNlCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9NTSAgICAgICAgICAiIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0xaT19JTkZPU1RSX1BNKQorI2VsaWYgZGVmaW5lZChMWk9fSU5GT19BQklfUE0pCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9QTSAgICAgICAgICAiLiIgTFpPX0lORk9fQUJJX1BNCisjZWxzZQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfUE0gICAgICAgICAgIiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9fSU5GT1NUUl9FTkRJQU4pCisjZWxpZiBkZWZpbmVkKExaT19JTkZPX0FCSV9FTkRJQU4pCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9FTkRJQU4gICAgICAiLiIgTFpPX0lORk9fQUJJX0VORElBTgorI2Vsc2UKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX0VORElBTiAgICAgICIiCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fTFpPX0lORk9TVFJfT1NOQU1FKQorI2VsaWYgZGVmaW5lZChMWk9fSU5GT19PU19DT05TT0xFKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfT1NOQU1FICAgICAgTFpPX0lORk9fT1MgIi4iIExaT19JTkZPX09TX0NPTlNPTEUKKyNlbGlmIGRlZmluZWQoTFpPX0lORk9fT1NfUE9TSVgpCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9PU05BTUUgICAgICBMWk9fSU5GT19PUyAiLiIgTFpPX0lORk9fT1NfUE9TSVgKKyNlbHNlCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9PU05BTUUgICAgICBMWk9fSU5GT19PUworI2VuZGlmCisjaWYgZGVmaW5lZChfX0xaT19JTkZPU1RSX0xJQkMpCisjZWxpZiBkZWZpbmVkKExaT19JTkZPX0xJQkMpCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9MSUJDICAgICAgICAiLiIgTFpPX0lORk9fTElCQworI2Vsc2UKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX0xJQkMgICAgICAgICIiCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fTFpPX0lORk9TVFJfQ0NWRVIpCisjZWxpZiBkZWZpbmVkKExaT19JTkZPX0NDVkVSKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfQ0NWRVIgICAgICAgIiAiIExaT19JTkZPX0NDVkVSCisjZWxzZQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfQ0NWRVIgICAgICAgIiIKKyNlbmRpZgorI2RlZmluZSBMWk9fSU5GT19TVFJJTkcgXAorICAgIExaT19JTkZPX0FSQ0ggX19MWk9fSU5GT1NUUl9NTSBfX0xaT19JTkZPU1RSX1BNIF9fTFpPX0lORk9TVFJfRU5ESUFOIFwKKyAgICAiICIgX19MWk9fSU5GT1NUUl9PU05BTUUgX19MWk9fSU5GT1NUUl9MSUJDICIgIiBMWk9fSU5GT19DQyBfX0xaT19JTkZPU1RSX0NDVkVSCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qIHZpbTpzZXQgdHM9NCBldDogKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b3V0aWwuaCBiL2x6by0yLjAzL2luY2x1ZGUvbHpvL2x6b3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODA4OTg0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvaW5jbHVkZS9sem8vbHpvdXRpbC5oCkBAIC0wLDAgKzEsNzMgQEAKKy8qIGx6b3V0aWwuaCAtLSB1dGlsaXRpeSBmdW5jdGlvbnMgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgW0RFUFJFQ0FURURdCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZm5kZWYgX19MWk9VVElMX0hfSU5DTFVERUQKKyNkZWZpbmUgX19MWk9VVElMX0hfSU5DTFVERUQKKworI2lmbmRlZiBfX0xaT0NPTkZfSF9JTkNMVURFRAorI2luY2x1ZGUgImx6b2NvbmYuaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBMWk8tdjEgZGVwcmVjYXRlZCBtYWNyb3MgKHdoaWNoIHdlcmUgdXNlZCBpbiB0aGUgb2xkIGV4YW1wbGUgcHJvZ3JhbXMpCisvLyBETyBOT1QgVVNFCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgbHpvX2FsbG9jKGEsYikgICAgICAobWFsbG9jKChhKSooYikpKQorI2RlZmluZSBsem9fbWFsbG9jKGEpICAgICAgIChtYWxsb2MoYSkpCisjZGVmaW5lIGx6b19mcmVlKGEpICAgICAgICAgKGZyZWUoYSkpCisKKyNkZWZpbmUgbHpvX2ZyZWFkKGYsYixzKSAgICAoZnJlYWQoYiwxLHMsZikpCisjZGVmaW5lIGx6b19md3JpdGUoZixiLHMpICAgKGZ3cml0ZShiLDEscyxmKSkKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKworLyogdmltOnNldCB0cz00IGV0OiAqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvbHpvdGVzdC9NYWtlZmlsZS5hbSBiL2x6by0yLjAzL2x6b3Rlc3QvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQyY2NmYgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2x6b3Rlc3QvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNSBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKKworbm9pbnN0X1BST0dSQU1TID0gbHpvdGVzdAorCitsem90ZXN0X1NPVVJDRVMgPSBsem90ZXN0LmMKK2x6b3Rlc3RfTERBREQgPSAuLi9zcmMvbGlibHpvMi5sYQorbHpvdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9zcmMvbGlibHpvMi5sYQorCitFWFRSQV9ESVNUID0gYXNtLmggZGIuaCB3cmFwLmggd3JhcG1pc2MuaCBteWdldG9wdC5jaCBteWdldG9wdC5oCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2x6b3Rlc3QvTWFrZWZpbGUuaW4gYi9sem8tMi4wMy9sem90ZXN0L01ha2VmaWxlLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyZGY5MDIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9sem90ZXN0L01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNDQxIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK1ZQQVRIID0gQHNyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorbm9pbnN0X1BST0dSQU1TID0gbHpvdGVzdCQoRVhFRVhUKQorc3ViZGlyID0gbHpvdGVzdAorRElTVF9DT01NT04gPSAkKHNyY2RpcikvTWFrZWZpbGUuYW0gJChzcmNkaXIpL01ha2VmaWxlLmluCitBQ0xPQ0FMX000ID0gJCh0b3Bfc3JjZGlyKS9hY2xvY2FsLm00CithbV9fYWNsb2NhbF9tNF9kZXBzID0gJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUuYWMKK2FtX19jb25maWd1cmVfZGVwcyA9ICQoYW1fX2FjbG9jYWxfbTRfZGVwcykgJChDT05GSUdVUkVfREVQRU5ERU5DSUVTKSBcCisJJChBQ0xPQ0FMX000KQorbWtpbnN0YWxsZGlycyA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYXV0b2NvbmYvbWtpbnN0YWxsZGlycworQ09ORklHX0hFQURFUiA9ICQodG9wX2J1aWxkZGlyKS9jb25maWcuaAorQ09ORklHX0NMRUFOX0ZJTEVTID0KK1BST0dSQU1TID0gJChub2luc3RfUFJPR1JBTVMpCithbV9sem90ZXN0X09CSkVDVFMgPSBsem90ZXN0LiQoT0JKRVhUKQorbHpvdGVzdF9PQkpFQ1RTID0gJChhbV9sem90ZXN0X09CSkVDVFMpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJChsem90ZXN0X1NPVVJDRVMpCitESVNUX1NPVVJDRVMgPSAkKGx6b3Rlc3RfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xaT19BU01fVlBBVEggPSBATFpPX0FTTV9WUEFUSEAKK0xaT19DRkxBR1MgPSBATFpPX0NGTEFHU0AKK0xaT19DUFBGTEFHUyA9IEBMWk9fQ1BQRkxBR1NACitMWk9fRVhUUkFfQ0ZMQUdTID0gQExaT19FWFRSQV9DRkxBR1NACitMWk9fRVhUUkFfQ1BQRkxBR1MgPSBATFpPX0VYVFJBX0NQUEZMQUdTQAorTFpPX1VTRV9BU01fRkFMU0UgPSBATFpPX1VTRV9BU01fRkFMU0VACitMWk9fVVNFX0FTTV9UUlVFID0gQExaT19VU0VfQVNNX1RSVUVACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAorYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACithbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2NvbmZpZ3VyZV9DRkxBR1MgPSBAY29uZmlndXJlX0NGTEFHU0AKK2NvbmZpZ3VyZV9DUFBGTEFHUyA9IEBjb25maWd1cmVfQ1BQRkxBR1NACitkYXRhZGlyID0gQGRhdGFkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK0lOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9zcmNkaXIpCitsem90ZXN0X1NPVVJDRVMgPSBsem90ZXN0LmMKK2x6b3Rlc3RfTERBREQgPSAuLi9zcmMvbGlibHpvMi5sYQorbHpvdGVzdF9ERVBFTkRFTkNJRVMgPSAuLi9zcmMvbGlibHpvMi5sYQorRVhUUkFfRElTVCA9IGFzbS5oIGRiLmggd3JhcC5oIHdyYXBtaXNjLmggbXlnZXRvcHQuY2ggbXlnZXRvcHQuaAorYWxsOiBhbGwtYW0KKworLlNVRkZJWEVTOgorLlNVRkZJWEVTOiAuYyAubG8gLm8gLm9iagorJChzcmNkaXIpL01ha2VmaWxlLmluOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJQGZvciBkZXAgaW4gJD87IGRvIFwKKwkgIGNhc2UgJyQoYW1fX2NvbmZpZ3VyZV9kZXBzKScgaW4gXAorCSAgICAqJCRkZXAqKSBcCisJICAgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoIFwKKwkJJiYgZXhpdCAwOyBcCisJICAgICAgZXhpdCAxOzsgXAorCSAgZXNhYzsgXAorCWRvbmU7IFwKKwllY2hvICcgY2QgJCh0b3Bfc3JjZGlyKSAmJiAkKEFVVE9NQUtFKSAtLWdudSAgbHpvdGVzdC9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBsem90ZXN0L01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCitsem90ZXN0JChFWEVFWFQpOiAkKGx6b3Rlc3RfT0JKRUNUUykgJChsem90ZXN0X0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGx6b3Rlc3QkKEVYRUVYVCkKKwkkKExJTkspICQobHpvdGVzdF9MREZMQUdTKSAkKGx6b3Rlc3RfT0JKRUNUUykgJChsem90ZXN0X0xEQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem90ZXN0LlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUGxvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL2x6b3Rlc3QvYXNtLmggYi9sem8tMi4wMy9sem90ZXN0L2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MWYxZmMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9sem90ZXN0L2FzbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qIGFzbS5oIC0tIGxpYnJhcnkgYXNzZW1ibGVyIGZ1bmN0aW9uIHByb3RvdHlwZXMKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX1VTRV9BU00pCisjICBpbmNsdWRlICJsem8vbHpvX2FzbS5oIgorI2Vsc2UKKyMgIGRlZmluZSBsem8xY19kZWNvbXByZXNzX2FzbSAgICAgICAgICAgICAgMAorIyAgZGVmaW5lIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUgICAgICAgICAwCisjICBkZWZpbmUgbHpvMWZfZGVjb21wcmVzc19hc21fZmFzdCAgICAgICAgIDAKKyMgIGRlZmluZSBsem8xZl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUgICAgMAorIyAgZGVmaW5lIGx6bzF4X2RlY29tcHJlc3NfYXNtICAgICAgICAgICAgICAwCisjICBkZWZpbmUgbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSAgICAgICAgIDAKKyMgIGRlZmluZSBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0ICAgICAgICAgMAorIyAgZGVmaW5lIGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSAgICAwCisjICBkZWZpbmUgbHpvMXlfZGVjb21wcmVzc19hc20gICAgICAgICAgICAgIDAKKyMgIGRlZmluZSBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlICAgICAgICAgMAorIyAgZGVmaW5lIGx6bzF5X2RlY29tcHJlc3NfYXNtX2Zhc3QgICAgICAgICAwCisjICBkZWZpbmUgbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlICAgIDAKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB0aGVzZSBhcmUgbm90IHlldCBpbXBsZW1lbnRlZAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgbHpvMWJfZGVjb21wcmVzc19hc20gICAgICAgICAgICAgICAgMAorI2RlZmluZSBsem8xYl9kZWNvbXByZXNzX2FzbV9zYWZlICAgICAgICAgICAwCisjZGVmaW5lIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QgICAgICAgICAgIDAKKyNkZWZpbmUgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlICAgICAgMAorCisjZGVmaW5lIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3QgICAgICAgICAgIDAKKyNkZWZpbmUgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlICAgICAgMAorCisjZGVmaW5lIGx6bzFmX2RlY29tcHJlc3NfYXNtICAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgbHpvMWZfZGVjb21wcmVzc19hc21fc2FmZSAgICAgICAgICAgMAorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9sem90ZXN0L2RiLmggYi9sem8tMi4wMy9sem90ZXN0L2RiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU2MTUyZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2x6b3Rlc3QvZGIuaApAQCAtMCwwICsxLDQ5NyBAQAorLyogZGIuaCAtLSBjb21wcmVzc2lvbiBkYXRhYmFzZQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMV9IKQoreyAiTFpPMS0xIiwgTV9MWk8xLCBMWk8xX01FTV9DT01QUkVTUywgTFpPMV9NRU1fREVDT01QUkVTUywKKyAgbHpvMV9jb21wcmVzcywgICAgICAgICAgICAgICAgMCwKKyAgbHpvMV9kZWNvbXByZXNzLCAgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMS05OSIsIE1fTFpPMV85OSwgTFpPMV85OV9NRU1fQ09NUFJFU1MsIExaTzFfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFfOTlfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFfZGVjb21wcmVzcywgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xaTzFBX0gpCit7ICJMWk8xQS0xIiwgTV9MWk8xQSwgTFpPMUFfTUVNX0NPTVBSRVNTLCBMWk8xQV9NRU1fREVDT01QUkVTUywKKyAgbHpvMWFfY29tcHJlc3MsICAgICAgICAgICAgICAgMCwKKyAgbHpvMWFfZGVjb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUEtOTkiLCBNX0xaTzFBXzk5LCBMWk8xQV85OV9NRU1fQ09NUFJFU1MsIExaTzFBX01FTV9ERUNPTVBSRVNTLAorICBsem8xYV85OV9jb21wcmVzcywgICAgICAgICAgICAwLAorICBsem8xYV9kZWNvbXByZXNzLCAgICAgICAgICAgICAwLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MWk8xQl9IKQoreyAiTFpPMUItMSIsIE1fTFpPMUJfMSwgTFpPMUJfTUVNX0NPTVBSRVNTLCBMWk8xQl9NRU1fREVDT01QUkVTUywKKyAgbHpvMWJfMV9jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWJfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFCLTIiLCBNX0xaTzFCXzIsIExaTzFCX01FTV9DT01QUkVTUywgTFpPMUJfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFiXzJfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFiX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFiX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQi0zIiwgTV9MWk8xQl8zLCBMWk8xQl9NRU1fQ09NUFJFU1MsIExaTzFCX01FTV9ERUNPTVBSRVNTLAorICBsem8xYl8zX2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xYl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xYl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUItNCIsIE1fTFpPMUJfNCwgTFpPMUJfTUVNX0NPTVBSRVNTLCBMWk8xQl9NRU1fREVDT01QUkVTUywKKyAgbHpvMWJfNF9jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWJfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFCLTUiLCBNX0xaTzFCXzUsIExaTzFCX01FTV9DT01QUkVTUywgTFpPMUJfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFiXzVfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFiX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFiX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQi02IiwgTV9MWk8xQl82LCBMWk8xQl9NRU1fQ09NUFJFU1MsIExaTzFCX01FTV9ERUNPTVBSRVNTLAorICBsem8xYl82X2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xYl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xYl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUItNyIsIE1fTFpPMUJfNywgTFpPMUJfTUVNX0NPTVBSRVNTLCBMWk8xQl9NRU1fREVDT01QUkVTUywKKyAgbHpvMWJfN19jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWJfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xYl9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFCLTgiLCBNX0xaTzFCXzgsIExaTzFCX01FTV9DT01QUkVTUywgTFpPMUJfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFiXzhfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFiX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFiX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWJfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWJfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQi05IiwgTV9MWk8xQl85LCBMWk8xQl9NRU1fQ09NUFJFU1MsIExaTzFCX01FTV9ERUNPTVBSRVNTLAorICBsem8xYl85X2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xYl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xYl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUItOTkiLCBNX0xaTzFCXzk5LCBMWk8xQl85OV9NRU1fQ09NUFJFU1MsIExaTzFCX01FTV9ERUNPTVBSRVNTLAorICBsem8xYl85OV9jb21wcmVzcywgICAgICAgICAgICAwLAorICBsem8xYl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xYl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUItOTk5IiwgTV9MWk8xQl85OTksIExaTzFCXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFCX01FTV9ERUNPTVBSRVNTLAorICBsem8xYl85OTlfY29tcHJlc3MsICAgICAgICAgICAwLAorICBsem8xYl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xYl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFiX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMUNfSCkKK3sgIkxaTzFDLTEiLCBNX0xaTzFDXzEsIExaTzFDX01FTV9DT01QUkVTUywgTFpPMUNfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFjXzFfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFjX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFjX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQy0yIiwgTV9MWk8xQ18yLCBMWk8xQ19NRU1fQ09NUFJFU1MsIExaTzFDX01FTV9ERUNPTVBSRVNTLAorICBsem8xY18yX2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xY19kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xY19kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUMtMyIsIE1fTFpPMUNfMywgTFpPMUNfTUVNX0NPTVBSRVNTLCBMWk8xQ19NRU1fREVDT01QUkVTUywKKyAgbHpvMWNfM19jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWNfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFDLTQiLCBNX0xaTzFDXzQsIExaTzFDX01FTV9DT01QUkVTUywgTFpPMUNfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFjXzRfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFjX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFjX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQy01IiwgTV9MWk8xQ181LCBMWk8xQ19NRU1fQ09NUFJFU1MsIExaTzFDX01FTV9ERUNPTVBSRVNTLAorICBsem8xY181X2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xY19kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xY19kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUMtNiIsIE1fTFpPMUNfNiwgTFpPMUNfTUVNX0NPTVBSRVNTLCBMWk8xQ19NRU1fREVDT01QUkVTUywKKyAgbHpvMWNfNl9jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWNfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFDLTciLCBNX0xaTzFDXzcsIExaTzFDX01FTV9DT01QUkVTUywgTFpPMUNfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzFjXzdfY29tcHJlc3MsICAgICAgICAgICAgIDAsCisgIGx6bzFjX2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzFjX2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMWNfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xQy04IiwgTV9MWk8xQ184LCBMWk8xQ19NRU1fQ09NUFJFU1MsIExaTzFDX01FTV9ERUNPTVBSRVNTLAorICBsem8xY184X2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xY19kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xY19kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFjX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUMtOSIsIE1fTFpPMUNfOSwgTFpPMUNfTUVNX0NPTVBSRVNTLCBMWk8xQ19NRU1fREVDT01QUkVTUywKKyAgbHpvMWNfOV9jb21wcmVzcywgICAgICAgICAgICAgMCwKKyAgbHpvMWNfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFDLTk5IiwgTV9MWk8xQ185OSwgTFpPMUNfOTlfTUVNX0NPTVBSRVNTLCBMWk8xQ19NRU1fREVDT01QUkVTUywKKyAgbHpvMWNfOTlfY29tcHJlc3MsICAgICAgICAgICAgMCwKKyAgbHpvMWNfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFDLTk5OSIsIE1fTFpPMUNfOTk5LCBMWk8xQ185OTlfTUVNX0NPTVBSRVNTLCBMWk8xQ19NRU1fREVDT01QUkVTUywKKyAgbHpvMWNfOTk5X2NvbXByZXNzLCAgICAgICAgICAgMCwKKyAgbHpvMWNfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xY19kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xY19kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0xaTzFGX0gpCit7ICJMWk8xRi0xIiwgTV9MWk8xRl8xLCBMWk8xRl9NRU1fQ09NUFJFU1MsIExaTzFGX01FTV9ERUNPTVBSRVNTLAorICBsem8xZl8xX2NvbXByZXNzLCAgICAgICAgICAgICAwLAorICBsem8xZl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xZl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFmX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFmX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMUYtOTk5IiwgTV9MWk8xRl85OTksIExaTzFGXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFGX01FTV9ERUNPTVBSRVNTLAorICBsem8xZl85OTlfY29tcHJlc3MsICAgICAgICAgICAwLAorICBsem8xZl9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xZl9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzFmX2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzFmX2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzFmX2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMVhfSCkKK3sgIkxaTzFYLTEiLCBNX0xaTzFYXzEsIExaTzFYXzFfTUVNX0NPTVBSRVNTLCBMWk8xWF9NRU1fREVDT01QUkVTUywKKyAgbHpvMXhfMV9jb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfb3B0aW1pemUsCisgIGx6bzF4X2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMXhfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCisjaWYgMAoreyAiTFpPMVhULTEiLCBNX0xaTzFYVF8xLCBMWk8xWFRfMV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeHRfMV9jb21wcmVzcywgICAgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKKyNlbmRpZgoreyAiTFpPMVgtMSgxMSkiLCBNX0xaTzFYXzFfMTEsIExaTzFYXzFfMTFfTUVNX0NPTVBSRVNTLCBMWk8xWF9NRU1fREVDT01QUkVTUywKKyAgbHpvMXhfMV8xMV9jb21wcmVzcywgICAgICAgICAgbHpvMXhfb3B0aW1pemUsCisgIGx6bzF4X2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMXhfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMXhfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIH0sCit7ICJMWk8xWC0xKDEyKSIsIE1fTFpPMVhfMV8xMiwgTFpPMVhfMV8xMl9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF8xXzEyX2NvbXByZXNzLCAgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKK3sgIkxaTzFYLTEoMTUpIiwgTV9MWk8xWF8xXzE1LCBMWk8xWF8xXzE1X01FTV9DT01QUkVTUywgTFpPMVhfTUVNX0RFQ09NUFJFU1MsCisgIGx6bzF4XzFfMTVfY29tcHJlc3MsICAgICAgICAgIGx6bzF4X29wdGltaXplLAorICBsem8xeF9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xeF9kZWNvbXByZXNzX3NhZmUsCisgIGx6bzF4X2RlY29tcHJlc3NfYXNtLCAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfYXNtX3NhZmUsCisgIGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3QsICAgIGx6bzF4X2RlY29tcHJlc3NfYXNtX2Zhc3Rfc2FmZSwKKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCB9LAoreyAiTFpPMVgtOTk5IiwgTV9MWk8xWF85OTksIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfY29tcHJlc3MsICAgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIGx6bzF4Xzk5OV9jb21wcmVzc19kaWN0LCAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvMSIsIDk3MjEsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfMV9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvMiIsIDk3MjIsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfMl9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvMyIsIDk3MjMsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfM19jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvNCIsIDk3MjQsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfNF9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvNSIsIDk3MjUsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfNV9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvNiIsIDk3MjYsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfNl9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvNyIsIDk3MjcsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfN19jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvOCIsIDk3MjgsIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfOF9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWC05OTkvOSIsIDk3MjksIExaTzFYXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFYX01FTV9ERUNPTVBSRVNTLAorICBsem8xeF85OTlfOV9jb21wcmVzcywgICAgICAgICBsem8xeF9vcHRpbWl6ZSwKKyAgbHpvMXhfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeF9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MWk8xWV9IKQoreyAiTFpPMVktMSIsIE1fTFpPMVlfMSwgTFpPMVlfTUVNX0NPTVBSRVNTLCBMWk8xWV9NRU1fREVDT01QUkVTUywKKyAgbHpvMXlfMV9jb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfb3B0aW1pemUsCisgIGx6bzF5X2RlY29tcHJlc3MsICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3Nfc2FmZSwKKyAgbHpvMXlfZGVjb21wcmVzc19hc20sICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19hc21fc2FmZSwKKyAgbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdCwgICAgbHpvMXlfZGVjb21wcmVzc19hc21fZmFzdF9zYWZlLAorICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2RpY3Rfc2FmZSB9LAoreyAiTFpPMVktOTk5IiwgTV9MWk8xWV85OTksIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfY29tcHJlc3MsICAgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIGx6bzF5Xzk5OV9jb21wcmVzc19kaWN0LCAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvMSIsIDk4MjEsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfMV9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvMiIsIDk4MjIsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfMl9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvMyIsIDk4MjMsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfM19jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvNCIsIDk4MjQsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfNF9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvNSIsIDk4MjUsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfNV9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvNiIsIDk4MjYsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfNl9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvNyIsIDk4MjcsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfN19jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvOCIsIDk4MjgsIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfOF9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCit7ICJMWk8xWS05OTkvOSIsIDk4MjksIExaTzFZXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFZX01FTV9ERUNPTVBSRVNTLAorICBsem8xeV85OTlfOV9jb21wcmVzcywgICAgICAgICBsem8xeV9vcHRpbWl6ZSwKKyAgbHpvMXlfZGVjb21wcmVzcywgICAgICAgICAgICAgbHpvMXlfZGVjb21wcmVzc19zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbSwgICAgICAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9zYWZlLAorICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0LCAgICBsem8xeV9kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6bzF5X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MWk8xWl9IKQoreyAiTFpPMVotOTk5IiwgTV9MWk8xWl85OTksIExaTzFaXzk5OV9NRU1fQ09NUFJFU1MsIExaTzFaX01FTV9ERUNPTVBSRVNTLAorICBsem8xel85OTlfY29tcHJlc3MsICAgICAgICAgICAwLAorICBsem8xel9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8xel9kZWNvbXByZXNzX3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIGx6bzF6Xzk5OV9jb21wcmVzc19kaWN0LCAgICAgIGx6bzF6X2RlY29tcHJlc3NfZGljdF9zYWZlIH0sCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9MWk8yQV9IKQoreyAiTFpPMkEtOTk5IiwgTV9MWk8yQV85OTksIExaTzJBXzk5OV9NRU1fQ09NUFJFU1MsIExaTzJBX01FTV9ERUNPTVBSRVNTLAorICBsem8yYV85OTlfY29tcHJlc3MsICAgICAgICAgICAwLAorICBsem8yYV9kZWNvbXByZXNzLCAgICAgICAgICAgICBsem8yYV9kZWNvbXByZXNzX3NhZmUsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBTEdfWkxJQikKK3sgInpsaWItOC8xIiwgTV9aTElCXzhfMSwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF8xX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC8yIiwgTV9aTElCXzhfMiwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF8yX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC8zIiwgTV9aTElCXzhfMywgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF8zX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC80IiwgTV9aTElCXzhfNCwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF80X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC81IiwgTV9aTElCXzhfNSwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF81X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC82IiwgTV9aTElCXzhfNiwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF82X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC83IiwgTV9aTElCXzhfNywgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF83X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC84IiwgTV9aTElCXzhfOCwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF84X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKK3sgInpsaWItOC85IiwgTV9aTElCXzhfOSwgWkxJQl9NRU1fQ09NUFJFU1MsIFpMSUJfTUVNX0RFQ09NUFJFU1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfOF85X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2RlY29tcHJlc3MsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfSwKKyNlbmRpZgorCisjaWYgZGVmaW5lZChBTEdfQlpJUDIpCit7ICJiemlwMi8xIiwgTV9CWklQMl8xLCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl8xX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi8yIiwgTV9CWklQMl8yLCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl8yX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi8zIiwgTV9CWklQMl8zLCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl8zX2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi80IiwgTV9CWklQMl80LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl80X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi81IiwgTV9CWklQMl81LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl81X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi82IiwgTV9CWklQMl82LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl82X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi83IiwgTV9CWklQMl83LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl83X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi84IiwgTV9CWklQMl84LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl84X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJiemlwMi85IiwgTV9CWklQMl85LCBCWklQMl9NRU1fQ09NUFJFU1MsIEJaSVAyX01FTV9ERUNPTVBSRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl85X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiemlwMl9kZWNvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisjZW5kaWYKKworCisKK3sgIm1lbWNweSgpIiwgTV9NRU1DUFksIDAsIDAsICAgbWVtY3B5X3hfY29tcHJlc3MsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbWNweV94X2NvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCit7ICJtZW1zZXQoKSIsIE1fTUVNU0VULCAwLCAwLCAgIG1lbXNldF94X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXRfeF9jb21wcmVzcywgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAoreyAiYWRsZXIzMigpIiwgTV9BRExFUjMyLCAwLCAwLCBhZGxlcjMyX3hfY29tcHJlc3MsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkbGVyMzJfeF9jb21wcmVzcywgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAoreyAiY3JjMzIoKSIsIE1fQ1JDMzIsIDAsIDAsICAgICBjcmMzMl94X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmMzMl94X2NvbXByZXNzLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sCisjaWYgZGVmaW5lZChBTEdfWkxJQikKK3sgInpfYWRsZXIzMigpIiwgTV9aX0FETEVSMzIsIDAsIDAsIHpsaWJfYWRsZXIzMl94X2NvbXByZXNzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6bGliX2FkbGVyMzJfeF9jb21wcmVzcywgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAoreyAiel9jcmMzMigpIiwgTV9aX0NSQzMyLCAwLCAwLCB6bGliX2NyYzMyX3hfY29tcHJlc3MsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpsaWJfY3JjMzJfeF9jb21wcmVzcywgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTFpPX1BST0ZFU1NJT05BTF9fKQorIyAgaW5jbHVkZSAibHpvcHJvL3RfZGIuY2giCisjZW5kaWYKKworCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9sem90ZXN0L2x6b3Rlc3QuYyBiL2x6by0yLjAzL2x6b3Rlc3QvbHpvdGVzdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZjZlMDgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9sem90ZXN0L2x6b3Rlc3QuYwpAQCAtMCwwICsxLDIwOTEgQEAKKy8qIGx6b3Rlc3QuYyAtLSB2ZXJ5IGNvbXByZWhlbnNpdmUgdGVzdCBkcml2ZXIgZm9yIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvL2x6b2NvbmYuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gdXRpbAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHBvcnRhYmlsaXR5IGxheWVyICovCisjZGVmaW5lIFdBTlRfTFpPX01BTExPQyAxCisjZGVmaW5lIFdBTlRfTFpPX0ZSRUFEIDEKKyNkZWZpbmUgV0FOVF9MWk9fV0lMREFSR1YgMQorI2RlZmluZSBXQU5UX0xaT19VQ0xPQ0sgMQorI2luY2x1ZGUgImV4YW1wbGVzL3BvcnRhYi5oIgorCisjaWYgZGVmaW5lZChIQVZFX1NUUk5JQ01QKSAmJiAhZGVmaW5lZChIQVZFX1NUUk5DQVNFQ01QKQorIyAgZGVmaW5lIHN0cm5jYXNlY21wKGEsYixjKSBzdHJuaWNtcChhLGIsYykKKyMgIGRlZmluZSBIQVZFX1NUUk5DQVNFQ01QIDEKKyNlbmRpZgorCisjaWYgMAorIyAgZGVmaW5lIGlzX2RpZ2l0KHgpICAgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKHgpKSkKKyMgIGRlZmluZSBpc19zcGFjZSh4KSAgIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSh4KSkpCisjZWxzZQorIyAgZGVmaW5lIGlzX2RpZ2l0KHgpICAgKCh1bnNpZ25lZCkoeCkgLSAnMCcgPD0gOSkKKyMgIGRlZmluZSBpc19zcGFjZSh4KSAgICgoeCk9PScgJyB8fCAoeCk9PSdcdCcgfHwgKHgpPT0nXHInIHx8ICh4KT09J1xuJykKKyNlbmRpZgorCisjaW5jbHVkZSAibXlnZXRvcHQuaCIKKyNpbmNsdWRlICJteWdldG9wdC5jaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3Npb24gaW5jbHVkZSBzZWN0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBIQVZFX0xaTzFfSCAxCisjZGVmaW5lIEhBVkVfTFpPMUFfSCAxCisjZGVmaW5lIEhBVkVfTFpPMUJfSCAxCisjZGVmaW5lIEhBVkVfTFpPMUNfSCAxCisjZGVmaW5lIEhBVkVfTFpPMUZfSCAxCisjZGVmaW5lIEhBVkVfTFpPMVhfSCAxCisjZGVmaW5lIEhBVkVfTFpPMVlfSCAxCisjZGVmaW5lIEhBVkVfTFpPMVpfSCAxCisjZGVmaW5lIEhBVkVfTFpPMkFfSCAxCisKKyNpZiBkZWZpbmVkKE5PX1pMSUJfSCkgfHwgKFNJWkVPRl9JTlQgPCA0KQorI3VuZGVmIEhBVkVfWkxJQl9ICisjZW5kaWYKKyNpZiBkZWZpbmVkKE5PX0JaTElCX0gpIHx8IChTSVpFT0ZfSU5UICE9IDQpCisjdW5kZWYgSEFWRV9CWkxJQl9ICisjZW5kaWYKKworI2lmIDAgJiYgZGVmaW5lZChMWk9fT1NfRE9TMTYpCisvKiBkb24ndCBtYWtlIHRoaXMgdGVzdCBwcm9ncmFtIHRvbyBiaWcgKi8KKyN1bmRlZiBIQVZFX0xaTzFfSAorI3VuZGVmIEhBVkVfTFpPMUFfSAorI3VuZGVmIEhBVkVfTFpPMUNfSAorI3VuZGVmIEhBVkVfTFpPMVpfSAorI3VuZGVmIEhBVkVfTFpPMkFfSAorI3VuZGVmIEhBVkVfTFpPMkJfSAorI3VuZGVmIEhBVkVfWkxJQl9ICisjZW5kaWYKKworCisvKiBMWk8gYWxnb3JpdGhtcyAqLworI2lmIGRlZmluZWQoSEFWRV9MWk8xX0gpCisjICBpbmNsdWRlICJsem8vbHpvMS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xaTzFBX0gpCisjICBpbmNsdWRlICJsem8vbHpvMWEuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MWk8xQl9IKQorIyAgaW5jbHVkZSAibHpvL2x6bzFiLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMUNfSCkKKyMgIGluY2x1ZGUgImx6by9sem8xYy5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xaTzFGX0gpCisjICBpbmNsdWRlICJsem8vbHpvMWYuaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MWk8xWF9IKQorIyAgaW5jbHVkZSAibHpvL2x6bzF4LmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMVlfSCkKKyMgIGluY2x1ZGUgImx6by9sem8xeS5oIgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0xaTzFaX0gpCisjICBpbmNsdWRlICJsem8vbHpvMXouaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9MWk8yQV9IKQorIyAgaW5jbHVkZSAibHpvL2x6bzJhLmgiCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMkJfSCkKKyMgIGluY2x1ZGUgImx6by9sem8yYi5oIgorI2VuZGlmCisKKy8qIG90aGVyIGNvbXByZXNzb3JzICovCisjaWYgZGVmaW5lZChfX0xaT19QUk9GRVNTSU9OQUxfXykKKyMgIGluY2x1ZGUgImx6b3Byby90X2NvbmZpZy5jaCIKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9aTElCX0gpCisjICBpbmNsdWRlIDx6bGliLmg+CisjICBkZWZpbmUgQUxHX1pMSUIKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9CWkxJQl9IKQorIyAgaW5jbHVkZSA8YnpsaWIuaD4KKyMgIGRlZmluZSBBTEdfQlpJUDIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBlbnVtZXJhdGUgYWxsIG1ldGhvZHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHsKKy8qIGNvbXByZXNzaW9uIGFsZ29yaXRobXMgKi8KKyAgICBNX0xaTzFCXzEgICAgID0gICAgIDEsCisgICAgTV9MWk8xQl8yLCBNX0xaTzFCXzMsIE1fTFpPMUJfNCwgTV9MWk8xQl81LAorICAgIE1fTFpPMUJfNiwgTV9MWk8xQl83LCBNX0xaTzFCXzgsIE1fTFpPMUJfOSwKKworICAgIE1fTFpPMUNfMSAgICAgPSAgICAxMSwKKyAgICBNX0xaTzFDXzIsIE1fTFpPMUNfMywgTV9MWk8xQ180LCBNX0xaTzFDXzUsCisgICAgTV9MWk8xQ182LCBNX0xaTzFDXzcsIE1fTFpPMUNfOCwgTV9MWk8xQ185LAorCisgICAgTV9MWk8xICAgICAgICA9ICAgIDIxLAorICAgIE1fTFpPMUEgICAgICAgPSAgICAzMSwKKworICAgIE1fTFpPMUJfOTkgICAgPSAgIDkwMSwKKyAgICBNX0xaTzFCXzk5OSAgID0gICA5MDIsCisgICAgTV9MWk8xQ185OSAgICA9ICAgOTExLAorICAgIE1fTFpPMUNfOTk5ICAgPSAgIDkxMiwKKyAgICBNX0xaTzFfOTkgICAgID0gICA5MjEsCisgICAgTV9MWk8xQV85OSAgICA9ICAgOTMxLAorCisgICAgTV9MWk8xRl8xICAgICA9ICAgIDYxLAorICAgIE1fTFpPMUZfOTk5ICAgPSAgIDk2MiwKKyAgICBNX0xaTzFYXzEgICAgID0gICAgNzEsCisgICAgTV9MWk8xWF8xXzExICA9ICAgMTExLAorICAgIE1fTFpPMVhfMV8xMiAgPSAgIDExMiwKKyAgICBNX0xaTzFYXzFfMTUgID0gICAxMTUsCisgICAgTV9MWk8xWF85OTkgICA9ICAgOTcyLAorICAgIE1fTFpPMVlfMSAgICAgPSAgICA4MSwKKyAgICBNX0xaTzFZXzk5OSAgID0gICA5ODIsCisgICAgTV9MWk8xWl85OTkgICA9ICAgOTkyLAorCisgICAgTV9MWk8yQV85OTkgICA9ICAgOTQyLAorICAgIE1fTFpPMkJfOTk5ICAgPSAgIDk1MiwKKworICAgIE1fTEFTVF9MWk9fQ09NUFJFU1NPUiA9IDk5OCwKKworLyogb3RoZXIgY29tcHJlc3NvcnMgKi8KKyNpZiBkZWZpbmVkKEFMR19aTElCKQorICAgIE1fWkxJQl84XzEgPSAgMTEwMSwKKyAgICBNX1pMSUJfOF8yLCBNX1pMSUJfOF8zLCBNX1pMSUJfOF80LCBNX1pMSUJfOF81LAorICAgIE1fWkxJQl84XzYsIE1fWkxJQl84XzcsIE1fWkxJQl84XzgsIE1fWkxJQl84XzksCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFMR19CWklQMikKKyAgICBNX0JaSVAyXzEgID0gIDEyMDEsCisgICAgTV9CWklQMl8yLCBNX0JaSVAyXzMsIE1fQlpJUDJfNCwgTV9CWklQMl81LAorICAgIE1fQlpJUDJfNiwgTV9CWklQMl83LCBNX0JaSVAyXzgsIE1fQlpJUDJfOSwKKyNlbmRpZgorCisvKiBkdW1teSBjb21wcmVzc29yIC0gZm9yIGJlbmNobWFya2luZyAqLworICAgIE1fTUVNQ1BZICAgICAgPSAgIDk5OSwKKworICAgIE1fTEFTVF9DT01QUkVTU09SID0gNDk5OSwKKworLyogZHVtbXkgYWxnb3JpdGhtcyAtIGZvciBiZW5jaG1hcmtpbmcgKi8KKyAgICBNX01FTVNFVCAgICAgID0gIDUwMDEsCisKKy8qIGNoZWNrc3VtIGFsZ29yaXRobXMgLSBmb3IgYmVuY2htYXJraW5nICovCisgICAgTV9BRExFUjMyICAgICA9ICA2MDAxLAorICAgIE1fQ1JDMzIgICAgICAgPSAgNjAwMiwKKyNpZiBkZWZpbmVkKEFMR19aTElCKQorICAgIE1fWl9BRExFUjMyICAgPSAgNjAxMSwKKyAgICBNX1pfQ1JDMzIgICAgID0gIDYwMTIsCisjZW5kaWYKKworICAgIE1fVU5VU0VECit9OworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21tYW5kIGxpbmUgb3B0aW9ucworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0cnVjdCBjb3JwdXNfZW50cnlfdDsKKworaW50IG9wdF92ZXJib3NlID0gMjsKKworbG9uZyBvcHRfY19sb29wcyA9IDA7Citsb25nIG9wdF9kX2xvb3BzID0gMDsKK2NvbnN0IHN0cnVjdCBjb3JwdXNfZW50cnlfdCAqb3B0X2NvcnB1cyA9IE5VTEw7Citjb25zdCBjaGFyICpvcHRfY29ycHVzX3BhdGggPSBOVUxMOworY29uc3QgY2hhciAqb3B0X2R1bXBfY29tcHJlc3NlZF9kYXRhID0gTlVMTDsKKworbHpvX2Jvb2wgb3B0X3VzZV9zYWZlX2RlY29tcHJlc3NvciA9IDA7Citsem9fYm9vbCBvcHRfdXNlX2FzbV9kZWNvbXByZXNzb3IgPSAwOworbHpvX2Jvb2wgb3B0X3VzZV9hc21fZmFzdF9kZWNvbXByZXNzb3IgPSAwOworbHpvX2Jvb2wgb3B0X29wdGltaXplX2NvbXByZXNzZWRfZGF0YSA9IDA7CisKK2ludCBvcHRfZGljdCA9IDA7Citsem9fdWludCBvcHRfbWF4X2RpY3RfbGVuID0gTFpPX1VJTlRfTUFYOworY29uc3QgY2hhciAqb3B0X2RpY3Rpb25hcnlfZmlsZSA9IE5VTEw7CisKK2x6b19ib29sIG9wdF9yZWFkX2Zyb21fc3RkaW4gPSAwOworCisvKiBzZXQgdGhlc2UgdG8gMSB0byBtZWFzdXJlIHRoZSBzcGVlZCBpbXBhY3Qgb2YgYSBjaGVja3N1bSAqLworbHpvX2Jvb2wgb3B0X2NvbXB1dGVfYWRsZXIzMiA9IDA7Citsem9fYm9vbCBvcHRfY29tcHV0ZV9jcmMzMiA9IDA7CitzdGF0aWMgbHpvX3VpbnQzMiBhZGxlcl9pbiwgYWRsZXJfb3V0Oworc3RhdGljIGx6b191aW50MzIgY3JjX2luLCBjcmNfb3V0OworCitsem9fYm9vbCBvcHRfZXhlY3V0aW9uX3RpbWUgPSAwOworaW50IG9wdF91Y2xvY2sgPSAtMTsKK2x6b19ib29sIG9wdF9jbGVhcl93cmttZW0gPSAwOworCitzdGF0aWMgY29uc3QgbHpvX2Jvb2wgb3B0X3RyeV90b19jb21wcmVzc18wX2J5dGVzID0gMTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gbWlzYyBnbG9iYWxzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKnByb2duYW1lID0gIiI7CitzdGF0aWMgbHpvX3VjbG9ja19oYW5kbGVfdCB1Y2g7CisKKy8qIGZvciBzdGF0aXN0aWNzIGFuZCBiZW5jaG1hcmsgKi8KK2ludCBvcHRfdG90YWxzID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX24gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfY19sZW4gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfZF9sZW4gPSAwOworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG90YWxfYmxvY2tzID0gMDsKK3N0YXRpYyBkb3VibGUgdG90YWxfcGVyYyA9IDAuMDsKK3N0YXRpYyBjb25zdCBjaGFyICp0b3RhbF9tZXRob2RfbmFtZSA9IE5VTEw7CitzdGF0aWMgdW5zaWduZWQgdG90YWxfbWV0aG9kX25hbWVzID0gMDsKKy8qIE5vdGU6IHRoZSBhdmVyYWdlIHZhbHVlIG9mIGEgcmF0ZSAoZS5nLiBjb21wcmVzc2lvbiBzcGVlZCkgaXMgZGVmaW5lZAorICogYnkgdGhlIEhhcm1vbmljIE1lYW4gKGFuZCBfbm90XyBieSB0aGUgQXJpdGhtZXRoaWMgTWVhbiApICovCitzdGF0aWMgdW5zaWduZWQgbG9uZyB0b3RhbF9jX21ic19uID0gMDsKK3N0YXRpYyB1bnNpZ25lZCBsb25nIHRvdGFsX2RfbWJzX24gPSAwOworc3RhdGljIGRvdWJsZSB0b3RhbF9jX21ic19oYXJtb25pYyA9IDAuMDsKK3N0YXRpYyBkb3VibGUgdG90YWxfZF9tYnNfaGFybW9uaWMgPSAwLjA7CitzdGF0aWMgZG91YmxlIHRvdGFsX2NfbWJzX3N1bSA9IDAuMDsKK3N0YXRpYyBkb3VibGUgdG90YWxfZF9tYnNfc3VtID0gMC4wOworCisKKyNpZiBkZWZpbmVkKEhBVkVfTFpPMVhfSCkKK2ludCBkZWZhdWx0X21ldGhvZCA9IE1fTFpPMVhfMTsKKyNlbGlmIGRlZmluZWQoSEFWRV9MWk8xQl9IKQoraW50IGRlZmF1bHRfbWV0aG9kID0gTV9MWk8xQl8xOworI2VsaWYgZGVmaW5lZChIQVZFX0xaTzFDX0gpCitpbnQgZGVmYXVsdF9tZXRob2QgPSBNX0xaTzFDXzE7CisjZWxpZiBkZWZpbmVkKEhBVkVfTFpPMUZfSCkKK2ludCBkZWZhdWx0X21ldGhvZCA9IE1fTFpPMUZfMTsKKyNlbGlmIGRlZmluZWQoSEFWRV9MWk8xWV9IKQoraW50IGRlZmF1bHRfbWV0aG9kID0gTV9MWk8xWV8xOworI2Vsc2UKK2ludCBkZWZhdWx0X21ldGhvZCA9IE1fTUVNQ1BZOworI2VuZGlmCisKKworc3RhdGljIGNvbnN0IGludCBiZW5jaG1hcmtfbWV0aG9kc1tdID0geworICAgIE1fTFpPMUJfMSwgTV9MWk8xQl85LAorICAgIE1fTFpPMUNfMSwgTV9MWk8xQ185LAorICAgIE1fTFpPMUZfMSwKKyAgICBNX0xaTzFYXzEsCisgICAgMAorfTsKKworc3RhdGljIGNvbnN0IGludCB4MV9tZXRob2RzW10gPSB7CisgICAgTV9MWk8xLCBNX0xaTzFBLCBNX0xaTzFCXzEsIE1fTFpPMUNfMSwgTV9MWk8xRl8xLCBNX0xaTzFYXzEsIE1fTFpPMVlfMSwKKyAgICAwCit9OworCitzdGF0aWMgY29uc3QgaW50IHg5OV9tZXRob2RzW10gPSB7CisgICAgTV9MWk8xXzk5LCBNX0xaTzFBXzk5LCBNX0xaTzFCXzk5LCBNX0xaTzFDXzk5LAorICAgIDAKK307CisKK3N0YXRpYyBjb25zdCBpbnQgeDk5OV9tZXRob2RzW10gPSB7CisgICAgTV9MWk8xQl85OTksIE1fTFpPMUNfOTk5LCBNX0xaTzFGXzk5OSwgTV9MWk8xWF85OTksIE1fTFpPMVlfOTk5LAorICAgIE1fTFpPMVpfOTk5LAorICAgIE1fTFpPMkFfOTk5LAorICAgIDAKK307CisKKworLyogZXhpdCBjb2RlcyBvZiB0aGlzIHRlc3QgcHJvZ3JhbSAqLworI2RlZmluZSBFWElUX09LICAgICAgICAgMAorI2RlZmluZSBFWElUX1VTQUdFICAgICAgMQorI2RlZmluZSBFWElUX0ZJTEUgICAgICAgMgorI2RlZmluZSBFWElUX01FTSAgICAgICAgMworI2RlZmluZSBFWElUX0FETEVSICAgICAgNAorI2RlZmluZSBFWElUX0xaT19FUlJPUiAgNQorI2RlZmluZSBFWElUX0xaT19JTklUICAgNgorI2RlZmluZSBFWElUX0lOVEVSTkFMICAgNworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBtZW1vcnkgc2V0dXAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgbHpvX3VpbnQgb3B0X2Jsb2NrX3NpemU7CitzdGF0aWMgbHpvX3VpbnQgb3B0X21heF9kYXRhX2xlbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGx6b19ieXRlcCAgIHB0cjsKKyAgICBsem9fdWludCAgICBsZW47CisgICAgbHpvX3VpbnQzMiAgYWRsZXI7CisgICAgbHpvX3VpbnQzMiAgY3JjOworICAgIGx6b19ieXRlcCAgIGFsbG9jX3B0cjsKKyAgICBsem9fdWludCAgICBhbGxvY19sZW47CisgICAgbHpvX3VpbnQgICAgc2F2ZWRfbGVuOworfSBtYmxvY2tfdDsKKworc3RhdGljIG1ibG9ja190IGZpbGVfZGF0YTsKK3N0YXRpYyBtYmxvY2tfdCBibG9jazE7CitzdGF0aWMgbWJsb2NrX3QgYmxvY2syOworc3RhdGljIG1ibG9ja190IHdya21lbTsKK3N0YXRpYyBtYmxvY2tfdCBkaWN0OworCisKK3N0YXRpYyB2b2lkIG1iX2FsbG9jX2V4dHJhKG1ibG9ja190ICptYiwgbHpvX3VpbnQgbGVuLCBsem9fdWludCBleHRyYV9ib3R0b20sIGx6b191aW50IGV4dHJhX3RvcCkKK3sKKyAgICBtYi0+YWxsb2NfcHRyID0gbWItPnB0ciA9IE5VTEw7CisgICAgbWItPmFsbG9jX2xlbiA9IG1iLT5sZW4gPSAwOworCisgICAgbWItPmFsbG9jX2xlbiA9IGV4dHJhX2JvdHRvbSArIGxlbiArIGV4dHJhX3RvcDsKKyAgICBpZiAobWItPmFsbG9jX2xlbiA9PSAwKSBtYi0+YWxsb2NfbGVuID0gMTsKKyAgICBtYi0+YWxsb2NfcHRyID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhtYi0+YWxsb2NfbGVuKTsKKworICAgIGlmIChtYi0+YWxsb2NfcHRyID09IE5VTEwpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICIlczogb3V0IG9mIG1lbW9yeSAod2FudGVkICVsdSBieXRlcylcbiIsIHByb2duYW1lLCAodW5zaWduZWQgbG9uZyltYi0+YWxsb2NfbGVuKTsKKyAgICAgICAgZXhpdChFWElUX01FTSk7CisgICAgfQorCisgICAgbWItPnB0ciA9IG1iLT5hbGxvY19wdHIgKyBleHRyYV9ib3R0b207CisgICAgbWItPmxlbiA9IG1iLT5zYXZlZF9sZW4gPSBsZW47CisgICAgbWItPmFkbGVyID0gMTsKKyAgICBtYi0+Y3JjID0gMDsKK30KKworCitzdGF0aWMgdm9pZCBtYl9hbGxvYyhtYmxvY2tfdCAqbWIsIGx6b191aW50IGxlbikKK3sKKyAgICBtYl9hbGxvY19leHRyYShtYiwgbGVuLCAwLCAwKTsKK30KKworCitzdGF0aWMgdm9pZCBtYl9mcmVlKG1ibG9ja190ICptYikKK3sKKyAgICBpZiAoIW1iKSByZXR1cm47CisgICAgaWYgKG1iLT5hbGxvY19wdHIpIGx6b19mcmVlKG1iLT5hbGxvY19wdHIpOworICAgIG1iLT5hbGxvY19wdHIgPSBtYi0+cHRyID0gTlVMTDsKKyAgICBtYi0+YWxsb2NfbGVuID0gbWItPmxlbiA9IDA7Cit9CisKKworc3RhdGljIGx6b191aW50IGdldF9tYXhfY29tcHJlc3Npb25fZXhwYW5zaW9uKGludCBtLCBsem9fdWludCBibCkKK3sKKyAgICBpZiAobSA9PSBNX01FTUNQWSB8fCBtID49IE1fTEFTVF9DT01QUkVTU09SKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobSA9PSBNX0xaTzJBXzk5OSB8fCBtID09IE1fTFpPMkJfOTk5KQorICAgICAgICByZXR1cm4gYmwgLyA4ICsgMjU2OworICAgIGlmIChtID4gMCAgJiYgbSA8IE1fTEFTVF9MWk9fQ09NUFJFU1NPUikKKyAgICAgICAgcmV0dXJuIGJsIC8gMTYgKyAgNjQgKyAzOworICAgIHJldHVybiBibCAvIDggKyAyNTY7Cit9CisKK3N0YXRpYyBsem9fdWludCBnZXRfbWF4X2RlY29tcHJlc3Npb25fb3ZlcnJ1bihpbnQgbSwgbHpvX3VpbnQgYmwpCit7CisgICAgTFpPX1VOVVNFRChtKTsKKyAgICBMWk9fVU5VU0VEKGJsKTsKKyAgICAvKiBtYXkgb3ZlcndyaXRlIDMgYnl0ZXMgcGFzdCB0aGUgZW5kIG9mIHRoZSBkZWNvbXByZXNzZWQgYmxvY2sgKi8KKyAgICBpZiAob3B0X3VzZV9hc21fZmFzdF9kZWNvbXByZXNzb3IpCisgICAgICAgIHJldHVybiAgKGx6b191aW50KSBzaXplb2YobHpvX3ZvaWRwKSAtIDE7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGRpY3Rpb25hcnkgc3VwcG9ydAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkIGRpY3RfYWxsb2MobHpvX3VpbnQgbWF4X2RpY3RfbGVuKQoreworICAgIGx6b191aW50IGwgPSAweGJmZmY7ICAgIC8qIE1BWF9ESUNUX0xFTiAqLworICAgIGlmIChtYXhfZGljdF9sZW4gPiAwICYmIGwgPiBtYXhfZGljdF9sZW4pCisgICAgICAgIGwgPSBtYXhfZGljdF9sZW47CisgICAgbWJfYWxsb2MoJmRpY3QsIGwpOworfQorCisKKy8qIHRoaXMgZGVmYXVsdCBkaWN0aW9uYXJ5IGRvZXMgbm90IHByb3ZpZGUgZ29vZCBjb250ZXh0cy4uLiAqLworc3RhdGljIHZvaWQgZGljdF9zZXRfZGVmYXVsdCh2b2lkKQoreworICAgIGx6b191aW50IGQgPSAwOworICAgIHVuc2lnbmVkIGksIGo7CisKKyAgICBkaWN0LmxlbiA9IDE2ICogMjU2OworICAgIGlmIChkaWN0LmxlbiA+IGRpY3QuYWxsb2NfbGVuKQorICAgICAgICBkaWN0LmxlbiA9IGRpY3QuYWxsb2NfbGVuOworCisgICAgbHpvX21lbXNldChkaWN0LnB0ciwgMCwgZGljdC5sZW4pOworCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgICAgICBmb3IgKGogPSAwOyBqIDwgMTY7IGorKykgeworICAgICAgICAgICAgaWYgKGQgPj0gZGljdC5sZW4pCisgICAgICAgICAgICAgICAgZ290byBkb25lOworICAgICAgICAgICAgZGljdC5wdHJbZCsrXSA9ICh1bnNpZ25lZCBjaGFyKSBpOworICAgICAgICB9CisKK2RvbmU6CisgICAgZGljdC5hZGxlciA9IGx6b19hZGxlcjMyKDEsIGRpY3QucHRyLCBkaWN0Lmxlbik7Cit9CisKKworc3RhdGljIHZvaWQgZGljdF9sb2FkKGNvbnN0IGNoYXIgKmZpbGVfbmFtZSkKK3sKKyAgICBGSUxFICpmcDsKKworICAgIGRpY3QubGVuID0gMDsKKyAgICBmcCA9IGZvcGVuKGZpbGVfbmFtZSwicmIiKTsKKyAgICBpZiAoZnApCisgICAgeworICAgICAgICBkaWN0LmxlbiA9IChsem9fdWludCkgbHpvX2ZyZWFkKGZwLCBkaWN0LnB0ciwgZGljdC5hbGxvY19sZW4pOworICAgICAgICBmY2xvc2UoZnApOworICAgICAgICBkaWN0LmFkbGVyID0gbHpvX2FkbGVyMzIoMSwgZGljdC5wdHIsIGRpY3QubGVuKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXByZXNzaW9uIGRhdGFiYXNlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBjb25zdCBjaGFyICogICAgICAgICAgICBuYW1lOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIGlkOworICAgIGx6b191aW50MzIgICAgICAgICAgICAgIG1lbV9jb21wcmVzczsKKyAgICBsem9fdWludDMyICAgICAgICAgICAgICBtZW1fZGVjb21wcmVzczsKKyAgICBsem9fY29tcHJlc3NfdCAgICAgICAgICBjb21wcmVzczsKKyAgICBsem9fb3B0aW1pemVfdCAgICAgICAgICBvcHRpbWl6ZTsKKyAgICBsem9fZGVjb21wcmVzc190ICAgICAgICBkZWNvbXByZXNzOworICAgIGx6b19kZWNvbXByZXNzX3QgICAgICAgIGRlY29tcHJlc3Nfc2FmZTsKKyAgICBsem9fZGVjb21wcmVzc190ICAgICAgICBkZWNvbXByZXNzX2FzbTsKKyAgICBsem9fZGVjb21wcmVzc190ICAgICAgICBkZWNvbXByZXNzX2FzbV9zYWZlOworICAgIGx6b19kZWNvbXByZXNzX3QgICAgICAgIGRlY29tcHJlc3NfYXNtX2Zhc3Q7CisgICAgbHpvX2RlY29tcHJlc3NfdCAgICAgICAgZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOworICAgIGx6b19jb21wcmVzc19kaWN0X3QgICAgIGNvbXByZXNzX2RpY3Q7CisgICAgbHpvX2RlY29tcHJlc3NfZGljdF90ICAgZGVjb21wcmVzc19kaWN0X3NhZmU7Cit9Citjb21wcmVzc190OworCisjaW5jbHVkZSAiYXNtLmgiCisKKyNpbmNsdWRlICJ3cmFwLmgiCisjZGVmaW5lIE1fUFJJVkFURSAgICAgICBMWk9fUFJJVkFURQorI2RlZmluZSBtX3VpbnQgICAgICAgICAgbHpvX3VpbnQKKyNkZWZpbmUgbV91aW50MzIgICAgICAgIGx6b191aW50MzIKKyNkZWZpbmUgbV92b2lkcCAgICAgICAgIGx6b192b2lkcAorI2RlZmluZSBtX2J5dGVwICAgICAgICAgbHpvX2J5dGVwCisjZGVmaW5lIG1fdWludHAgICAgICAgICBsem9fdWludHAKKyNpbmNsdWRlICJ3cmFwbWlzYy5oIgorCitzdGF0aWMgY29uc3QgY29tcHJlc3NfdCBjb21wcmVzc19kYXRhYmFzZVtdID0geworI2luY2x1ZGUgImRiLmgiCit7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAgfQorfTsKKworCisjaWYgZGVmaW5lZChMWk9URVNUX1VTRV9EWU5MT0FEKQorIyAgaW5jbHVkZSAiZHlubG9hZC9kYi5jaCIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBtZXRob2QgaW5mbworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYworbHpvX2RlY29tcHJlc3NfdCBnZXRfZGVjb21wX2luZm8gKCBjb25zdCBjb21wcmVzc190ICpjLCBjb25zdCBjaGFyICoqbm4gKQoreworICAgIGx6b19kZWNvbXByZXNzX3QgZCA9IDA7CisgICAgY29uc3QgY2hhciAqbiA9IE5VTEw7CisKKyAgICAvKiBzYWZlIGhhcyBwcmlvcml0eSBvdmVyIGFzbS9mYXN0ICovCisgICAgaWYgKCFkICYmIG9wdF91c2Vfc2FmZV9kZWNvbXByZXNzb3IgJiYgb3B0X3VzZV9hc21fZmFzdF9kZWNvbXByZXNzb3IpCisgICAgeworICAgICAgICBkID0gYy0+ZGVjb21wcmVzc19hc21fZmFzdF9zYWZlOworICAgICAgICBuID0gIiBbZnNdIjsKKyAgICB9CisgICAgaWYgKCFkICYmIG9wdF91c2Vfc2FmZV9kZWNvbXByZXNzb3IgJiYgb3B0X3VzZV9hc21fZGVjb21wcmVzc29yKQorICAgIHsKKyAgICAgICAgZCA9IGMtPmRlY29tcHJlc3NfYXNtX3NhZmU7CisgICAgICAgIG4gPSAiIFthc10iOworICAgIH0KKyAgICBpZiAoIWQgJiYgb3B0X3VzZV9zYWZlX2RlY29tcHJlc3NvcikKKyAgICB7CisgICAgICAgIGQgPSBjLT5kZWNvbXByZXNzX3NhZmU7CisgICAgICAgIG4gPSAiIFtzXSI7CisgICAgfQorICAgIGlmICghZCAmJiBvcHRfdXNlX2FzbV9mYXN0X2RlY29tcHJlc3NvcikKKyAgICB7CisgICAgICAgIGQgPSBjLT5kZWNvbXByZXNzX2FzbV9mYXN0OworICAgICAgICBuID0gIiBbZl0iOworICAgIH0KKyAgICBpZiAoIWQgJiYgb3B0X3VzZV9hc21fZGVjb21wcmVzc29yKQorICAgIHsKKyAgICAgICAgZCA9IGMtPmRlY29tcHJlc3NfYXNtOworICAgICAgICBuID0gIiBbYV0iOworICAgIH0KKyAgICBpZiAoIWQpCisgICAgeworICAgICAgICBkID0gYy0+ZGVjb21wcmVzczsKKyAgICAgICAgbiA9ICIiOworICAgIH0KKyAgICBpZiAoIWQpCisgICAgICAgIG4gPSAiKG51bGwpIjsKKworICAgIGlmIChvcHRfZGljdCAmJiBjLT5kZWNvbXByZXNzX2RpY3Rfc2FmZSkKKyAgICAgICAgbiA9ICIiOworCisgICAgaWYgKG5uKQorICAgICAgICAqbm4gPSBuOworICAgIHJldHVybiBkOworfQorCisKK3N0YXRpYworY29uc3QgY29tcHJlc3NfdCAqZmluZF9tZXRob2RfYnlfaWQgKCBpbnQgbWV0aG9kICkKK3sKKyAgICBjb25zdCBjb21wcmVzc190ICpkYjsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihjb21wcmVzc19kYXRhYmFzZSkgLyBzaXplb2YoKihjb21wcmVzc19kYXRhYmFzZSkpOworICAgIHNpemVfdCBpOworCisjaWYgZGVmaW5lZChMWk9URVNUX1VTRV9EWU5MT0FEKQorIyAgaW5jbHVkZSAiZHlubG9hZC9maW5kX2lkLmNoIgorI2VuZGlmCisKKyAgICBkYiA9IGNvbXByZXNzX2RhdGFiYXNlOworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplICYmIGRiLT5uYW1lICE9IE5VTEw7IGkrKywgZGIrKykKKyAgICB7CisgICAgICAgIGlmIChtZXRob2QgPT0gZGItPmlkKQorICAgICAgICAgICAgcmV0dXJuIGRiOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMKK2NvbnN0IGNvbXByZXNzX3QgKmZpbmRfbWV0aG9kX2J5X25hbWUgKCBjb25zdCBjaGFyICpuYW1lICkKK3sKKyAgICBjb25zdCBjb21wcmVzc190ICpkYjsKKyAgICBzaXplX3Qgc2l6ZSA9IHNpemVvZihjb21wcmVzc19kYXRhYmFzZSkgLyBzaXplb2YoKihjb21wcmVzc19kYXRhYmFzZSkpOworICAgIHNpemVfdCBpOworCisjaWYgZGVmaW5lZChMWk9URVNUX1VTRV9EWU5MT0FEKQorIyAgaW5jbHVkZSAiZHlubG9hZC9maW5kX25hbWUuY2giCisjZW5kaWYKKworICAgIGRiID0gY29tcHJlc3NfZGF0YWJhc2U7CisgICAgZm9yIChpID0gMDsgaSA8IHNpemUgJiYgZGItPm5hbWUgIT0gTlVMTDsgaSsrLCBkYisrKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG4gPSBzdHJsZW4oZGItPm5hbWUpOworCisjaWYgZGVmaW5lZChIQVZFX1NUUk5DQVNFQ01QKQorICAgICAgICBpZiAoc3RybmNhc2VjbXAobmFtZSxkYi0+bmFtZSxuKSA9PSAwICYmICghbmFtZVtuXSB8fCBuYW1lW25dID09ICcsJykpCisgICAgICAgICAgICByZXR1cm4gZGI7CisjZWxzZQorICAgICAgICBpZiAoc3RybmNtcChuYW1lLGRiLT5uYW1lLG4pID09IDAgJiYgKCFuYW1lW25dIHx8IG5hbWVbbl0gPT0gJywnKSkKKyAgICAgICAgICAgIHJldHVybiBkYjsKKyNlbmRpZgorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMKK2x6b19ib29sIGlzX2NvbXByZXNzb3IgKCBjb25zdCBjb21wcmVzc190ICpjICkKK3sKKyAgICByZXR1cm4gKGMtPmlkIDw9IE1fTEFTVF9DT01QUkVTU09SIHx8IGMtPmlkID49IDk3MjEpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjaGVjayB0aGF0IG1lbW9yeSBnZXRzIGFjY2Vzc2VkIHdpdGhpbiBib3VuZHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIG1lbWNoZWNrZXJfaW5pdCAoIG1ibG9ja190ICptYiwgbHpvX3hpbnQgbCwgdW5zaWduZWQgY2hhciByYW5kb21fYnl0ZSApCit7CisgICAgbHpvX3VpbnQgaTsKKyAgICBsem9fdWludCBsZW4gPSAobHpvX3VpbnQpIGw7CisgICAgbHpvX2J5dGVwIHA7CisKKyAgICBhc3NlcnQobGVuIDw9IG1iLT5sZW4pOworCisgICAgLyogYm90dG9tICovCisgICAgcCA9IG1iLT5wdHI7CisgICAgZm9yIChpID0gMDsgaSA8IDE2ICYmIHAgPiBtYi0+YWxsb2NfcHRyOyBpKyspCisgICAgICAgICotLXAgPSByYW5kb21fYnl0ZSsrOworICAgIC8qIHRvcCAqLworICAgIHAgPSBtYi0+cHRyICsgbGVuOworICAgIGZvciAoaSA9IDA7IGkgPCAxNiAmJiBwIDwgbWItPmFsbG9jX3B0ciArIG1iLT5hbGxvY19sZW47IGkrKykKKyAgICAgICAgKnArKyA9IHJhbmRvbV9ieXRlKys7CisjaWYgMCB8fCBkZWZpbmVkKExaT19ERUJVRykKKyAgICAvKiBmaWxsIGluIGdhcmJhZ2UgKi8KKyAgICBwID0gbWItPnB0cjsKKyAgICByYW5kb21fYnl0ZSB8PSAxOworICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKywgcmFuZG9tX2J5dGUgKz0gMikKKyAgICAgICAgKnArKyA9IHJhbmRvbV9ieXRlOworI2VuZGlmCit9CisKKworaW50IG1lbWNoZWNrZXJfY2hlY2sgKCBtYmxvY2tfdCAqbWIsIGx6b194aW50IGwsIHVuc2lnbmVkIGNoYXIgcmFuZG9tX2J5dGUgKQoreworICAgIGx6b191aW50IGk7CisgICAgbHpvX3VpbnQgbGVuID0gKGx6b191aW50KSBsOworICAgIGx6b19ieXRlcCBwOworCisgICAgYXNzZXJ0KGxlbiA8PSBtYi0+bGVuKTsKKworICAgIC8qIGJvdHRvbSAqLworICAgIHAgPSBtYi0+cHRyOworICAgIGZvciAoaSA9IDA7IGkgPCAxNiAmJiBwID4gbWItPmFsbG9jX3B0cjsgaSsrKQorICAgICAgICBpZiAoKi0tcCAhPSByYW5kb21fYnl0ZSsrKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIC8qIHRvcCAqLworICAgIHAgPSBtYi0+cHRyICsgbGVuOworICAgIGZvciAoaSA9IDA7IGkgPCAxNiAmJiBwIDwgbWItPmFsbG9jX3B0ciArIG1iLT5hbGxvY19sZW47IGkrKykKKyAgICAgICAgaWYgKCpwKysgIT0gcmFuZG9tX2J5dGUrKykKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3MgYSBibG9jaworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYworaW50IGNhbGxfY29tcHJlc3NvciAgICggY29uc3QgY29tcHJlc3NfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4gKQoreworICAgIGludCByID0gLTEwMDsKKworICAgIGlmIChjICYmIGMtPmNvbXByZXNzICYmIHdya21lbS5sZW4gPj0gYy0+bWVtX2NvbXByZXNzKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciByYW5kb21fYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKSBzcmNfbGVuOworICAgICAgICBtZW1jaGVja2VyX2luaXQoJndya21lbSwgYy0+bWVtX2NvbXByZXNzLCByYW5kb21fYnl0ZSk7CisgICAgICAgIGlmIChvcHRfY2xlYXJfd3JrbWVtKQorICAgICAgICAgICAgbHpvX21lbXNldCh3cmttZW0ucHRyLCAwLCBjLT5tZW1fY29tcHJlc3MpOworCisgICAgICAgIGlmIChvcHRfZGljdCAmJiBjLT5jb21wcmVzc19kaWN0KQorICAgICAgICAgICAgciA9IGMtPmNvbXByZXNzX2RpY3Qoc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLnB0cixkaWN0LnB0cixkaWN0Lmxlbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHIgPSBjLT5jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0ucHRyKTsKKworICAgICAgICBpZiAobWVtY2hlY2tlcl9jaGVjaygmd3JrbWVtLCBjLT5tZW1fY29tcHJlc3MsIHJhbmRvbV9ieXRlKSAhPSAwKQorICAgICAgICAgICAgcHJpbnRmKCJXQVJOSU5HOiB3cmttZW0gb3ZlcndyaXRlIGVycm9yIChjb21wcmVzcykgISEhXG4iKTsKKyAgICB9CisKKyAgICBpZiAociA9PSAwICYmIG9wdF9jb21wdXRlX2FkbGVyMzIpCisgICAgeworICAgICAgICBsem9fdWludDMyIGFkbGVyOworICAgICAgICBhZGxlciA9IGx6b19hZGxlcjMyKDAsIE5VTEwsIDApOworICAgICAgICBhZGxlciA9IGx6b19hZGxlcjMyKGFkbGVyLCBzcmMsIHNyY19sZW4pOworICAgICAgICBhZGxlcl9pbiA9IGFkbGVyOworICAgIH0KKyAgICBpZiAociA9PSAwICYmIG9wdF9jb21wdXRlX2NyYzMyKQorICAgIHsKKyAgICAgICAgbHpvX3VpbnQzMiBjcmM7CisgICAgICAgIGNyYyA9IGx6b19jcmMzMigwLCBOVUxMLCAwKTsKKyAgICAgICAgY3JjID0gbHpvX2NyYzMyKGNyYywgc3JjLCBzcmNfbGVuKTsKKyAgICAgICAgY3JjX2luID0gY3JjOworICAgIH0KKworICAgIHJldHVybiByOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkZWNvbXByZXNzIGEgYmxvY2sKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMKK2ludCBjYWxsX2RlY29tcHJlc3NvciAoIGNvbnN0IGNvbXByZXNzX3QgKmMsIGx6b19kZWNvbXByZXNzX3QgZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4gKQoreworICAgIGludCByID0gLTEwMDsKKworICAgIGlmIChjICYmIGQgJiYgd3JrbWVtLmxlbiA+PSBjLT5tZW1fZGVjb21wcmVzcykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmFuZG9tX2J5dGUgPSAodW5zaWduZWQgY2hhcikgc3JjX2xlbjsKKyAgICAgICAgbWVtY2hlY2tlcl9pbml0KCZ3cmttZW0sIGMtPm1lbV9kZWNvbXByZXNzLCByYW5kb21fYnl0ZSk7CisgICAgICAgIGlmIChvcHRfY2xlYXJfd3JrbWVtKQorICAgICAgICAgICAgbHpvX21lbXNldCh3cmttZW0ucHRyLCAwLCBjLT5tZW1fZGVjb21wcmVzcyk7CisKKyAgICAgICAgaWYgKG9wdF9kaWN0ICYmIGMtPmRlY29tcHJlc3NfZGljdF9zYWZlKQorICAgICAgICAgICAgciA9IGMtPmRlY29tcHJlc3NfZGljdF9zYWZlKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbS5wdHIsZGljdC5wdHIsZGljdC5sZW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICByID0gZChzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0ucHRyKTsKKworICAgICAgICBpZiAobWVtY2hlY2tlcl9jaGVjaygmd3JrbWVtLCBjLT5tZW1fZGVjb21wcmVzcywgcmFuZG9tX2J5dGUpICE9IDApCisgICAgICAgICAgICBwcmludGYoIldBUk5JTkc6IHdya21lbSBvdmVyd3JpdGUgZXJyb3IgKGRlY29tcHJlc3MpICEhIVxuIik7CisgICAgfQorCisgICAgaWYgKHIgPT0gMCAmJiBvcHRfY29tcHV0ZV9hZGxlcjMyKQorICAgICAgICBhZGxlcl9vdXQgPSBsem9fYWRsZXIzMigxLCBkc3QsICpkc3RfbGVuKTsKKyAgICBpZiAociA9PSAwICYmIG9wdF9jb21wdXRlX2NyYzMyKQorICAgICAgICBjcmNfb3V0ID0gbHpvX2NyYzMyKDAsIGRzdCwgKmRzdF9sZW4pOworCisgICAgcmV0dXJuIHI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG9wdGltaXplIGEgYmxvY2sKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMKK2ludCBjYWxsX29wdGltaXplciAgICggY29uc3QgY29tcHJlc3NfdCAqYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuICkKK3sKKyAgICBpZiAoYyAmJiBjLT5vcHRpbWl6ZSAmJiB3cmttZW0ubGVuID49IGMtPm1lbV9kZWNvbXByZXNzKQorICAgICAgICByZXR1cm4gYy0+b3B0aW1pemUoc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLnB0cik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyByZWFkIGEgZmlsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IGxvYWRfZmlsZShjb25zdCBjaGFyICpmaWxlX25hbWUsIGx6b191aW50IG1heF9sZW4pCit7CisgICAgRklMRSAqZnA7CisgICAgbG9uZyBsbCA9IC0xOworICAgIGx6b191aW50IGw7CisgICAgaW50IHI7CisgICAgbWJsb2NrX3QgKm1iID0gJmZpbGVfZGF0YTsKKworICAgIG1iX2ZyZWUobWIpOworCisgICAgZnAgPSBmb3BlbihmaWxlX25hbWUsInJiIik7CisgICAgaWYgKGZwID09IE5VTEwpCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXM6ICIsZmlsZV9uYW1lKTsKKyAgICAgICAgcGVycm9yKCJmb3BlbiIpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRklMRTsKKyAgICB9CisgICAgciA9IGZzZWVrKGZwLChsb25nKW1heF9sZW4sU0VFS19TRVQpOworICAgIGlmIChyICE9IDApCisgICAgICAgIHIgPSBmc2VlayhmcCwwLFNFRUtfRU5EKTsKKyAgICBpZiAociA9PSAwKQorICAgIHsKKyAgICAgICAgbGwgPSBmdGVsbChmcCk7CisgICAgICAgIHIgPSBmc2VlayhmcCwwLFNFRUtfU0VUKTsKKyAgICB9CisgICAgaWYgKHIgIT0gMCB8fCBsbCA8IDApCisgICAgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwiJXM6ICIsZmlsZV9uYW1lKTsKKyAgICAgICAgcGVycm9yKCJmc2VlayIpOworICAgICAgICBmZmx1c2goc3RkZXJyKTsKKyAgICAgICAgcmV0dXJuIEVYSVRfRklMRTsKKyAgICB9CisKKyAgICBsID0gKGx6b191aW50KSBsbDsKKyAgICBpZiAobWF4X2xlbiA+IDAgJiYgbCA+IG1heF9sZW4pCisgICAgICAgIGwgPSBtYXhfbGVuOworICAgIG1iX2FsbG9jKG1iLCBsKTsKKyAgICBtYi0+bGVuID0gKGx6b191aW50KSBsem9fZnJlYWQoZnAsIG1iLT5wdHIsIG1iLT5sZW4pOworICAgIGlmIChmY2xvc2UoZnApICE9IDApCisgICAgeworICAgICAgICBtYl9mcmVlKG1iKTsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzOiAiLGZpbGVfbmFtZSk7CisgICAgICAgIHBlcnJvcigiZmNsb3NlIik7CisgICAgICAgIGZmbHVzaChzdGRlcnIpOworICAgICAgICByZXR1cm4gRVhJVF9GSUxFOworICAgIH0KKworICAgIHJldHVybiBFWElUX09LOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gcHJpbnQgc29tZSBjb21wcmVzc2lvbiBzdGF0aXN0aWNzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBkb3VibGUgdF9kaXYoZG91YmxlIGEsIGRvdWJsZSBiKQoreworICAgIHJldHVybiBiID4gMC4wMDAwMSA/IGEgLyBiIDogMDsKK30KKworc3RhdGljIGRvdWJsZSBzZXRfcGVyY19kKGRvdWJsZSBwZXJjLCBjaGFyICpzKQoreworICAgIGlmIChwZXJjIDw9IDApIHsKKyAgICAgICAgc3RyY3B5KHMsICIwLjAiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChwZXJjIDw9IDEwMCAtIDEuMCAvIDE2KSB7CisgICAgICAgIHNwcmludGYocywgIiU0LjFmIiwgcGVyYyk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBsb25nIHAgPSAobG9uZykgKHBlcmMgKyAwLjUpOworICAgICAgICBpZiAocCA8IDEwMCkKKyAgICAgICAgICAgIHN0cmNweShzLCAiPz8/Iik7CisgICAgICAgIGVsc2UgaWYgKHAgPj0gOTk5OSkKKyAgICAgICAgICAgIHN0cmNweShzLCAiOTk5OSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcHJpbnRmKHMsICIlbGQiLCBwKTsKKyAgICB9CisgICAgcmV0dXJuIHBlcmM7Cit9CisKK3N0YXRpYyBkb3VibGUgc2V0X3BlcmModW5zaWduZWQgbG9uZyBjX2xlbiwgdW5zaWduZWQgbG9uZyBkX2xlbiwgY2hhciAqcykKK3sKKyAgICBkb3VibGUgcGVyYyA9IDAuMDsKKyAgICBpZiAoZF9sZW4gPiAwKQorICAgICAgICBwZXJjID0gY19sZW4gKiAxMDAuMCAvIGRfbGVuOworICAgIHJldHVybiBzZXRfcGVyY19kKHBlcmMsIHMpOworfQorCisKK3N0YXRpYwordm9pZCBwcmludF9zdGF0cyAoIGNvbnN0IGNoYXIgKm1ldGhvZF9uYW1lLCBjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgbG9uZyB0X2xvb3BzLCBsb25nIGNfbG9vcHMsIGxvbmcgZF9sb29wcywKKyAgICAgICAgICAgICAgICAgICBkb3VibGUgdF9zZWNzLCBkb3VibGUgY19zZWNzLCBkb3VibGUgZF9zZWNzLAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY19sZW4sIHVuc2lnbmVkIGxvbmcgZF9sZW4sCisgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBibG9ja3MgKQoreworICAgIHVuc2lnbmVkIGxvbmcgeF9sZW4gPSBkX2xlbjsKKyAgICB1bnNpZ25lZCBsb25nIHRfYnl0ZXMsIGNfYnl0ZXMsIGRfYnl0ZXM7CisgICAgZG91YmxlIGNfbWJzLCBkX21icywgdF9tYnM7CisgICAgZG91YmxlIHBlcmM7CisgICAgY2hhciBwZXJjX3N0cls0KzFdOworCisgICAgcGVyYyA9IHNldF9wZXJjKGNfbGVuLCBkX2xlbiwgcGVyY19zdHIpOworCisgICAgY19ieXRlcyA9IHhfbGVuICogY19sb29wcyAqIHRfbG9vcHM7CisgICAgZF9ieXRlcyA9IHhfbGVuICogZF9sb29wcyAqIHRfbG9vcHM7CisgICAgdF9ieXRlcyA9IGNfYnl0ZXMgKyBkX2J5dGVzOworCisgICAgaWYgKG9wdF91Y2xvY2sgPT0gMCkKKyAgICAgICAgY19zZWNzID0gZF9zZWNzID0gdF9zZWNzID0gMC4wOworCisgICAgLyogc3BlZWQgaW4gdW5jb21wcmVzc2VkIG1lZ2FieXRlcyBwZXIgc2Vjb25kICgxIG1lZ2FieXRlID0gMS4wMDAuMDAwIGJ5dGVzKSAqLworICAgIGNfbWJzID0gKGNfc2VjcyA+IDAuMDAxKSA/IChjX2J5dGVzIC8gY19zZWNzKSAvIDEwMDAwMDAuMCA6IDA7CisgICAgZF9tYnMgPSAoZF9zZWNzID4gMC4wMDEpID8gKGRfYnl0ZXMgLyBkX3NlY3MpIC8gMTAwMDAwMC4wIDogMDsKKyAgICB0X21icyA9ICh0X3NlY3MgPiAwLjAwMSkgPyAodF9ieXRlcyAvIHRfc2VjcykgLyAxMDAwMDAwLjAgOiAwOworCisgICAgdG90YWxfbisrOworICAgIHRvdGFsX2NfbGVuICs9IGNfbGVuOworICAgIHRvdGFsX2RfbGVuICs9IGRfbGVuOworICAgIHRvdGFsX2Jsb2NrcyArPSBibG9ja3M7CisgICAgdG90YWxfcGVyYyArPSBwZXJjOworICAgIGlmIChjX21icyA+IDApIHsKKyAgICAgICAgdG90YWxfY19tYnNfbiArPSAxOworICAgICAgICB0b3RhbF9jX21ic19oYXJtb25pYyArPSAxLjAgLyBjX21iczsKKyAgICAgICAgdG90YWxfY19tYnNfc3VtICs9IGNfbWJzOworICAgIH0KKyAgICBpZiAoZF9tYnMgPiAwKSB7CisgICAgICAgIHRvdGFsX2RfbWJzX24gKz0gMTsKKyAgICAgICAgdG90YWxfZF9tYnNfaGFybW9uaWMgKz0gMS4wIC8gZF9tYnM7CisgICAgICAgIHRvdGFsX2RfbWJzX3N1bSArPSBkX21iczsKKyAgICB9CisKKyAgICBpZiAob3B0X3ZlcmJvc2UgPj0gMikKKyAgICB7CisgICAgICAgIHByaW50ZigiICBjb21wcmVzc2VkIGludG8gJWx1IGJ5dGVzLCAgJXMlJSAgKCVzJS4zZiBiaXRzL2J5dGUpXG4iLAorICAgICAgICAgICAgICAgY19sZW4sIHBlcmNfc3RyLCAiIiwgcGVyYyAqIDAuMDgpOworCisjaWYgMAorICAgICAgICBwcmludGYoIiUtMTVzICU1bGQ6ICIsIm92ZXJhbGwiLCB0X2xvb3BzKTsKKyAgICAgICAgcHJpbnRmKCIlMTBsdSBieXRlcywgJTguMmYgc2VjcywgJTguM2YgTUIvc2VjXG4iLAorICAgICAgICAgICAgICAgdF9ieXRlcywgdF9zZWNzLCB0X21icyk7CisjZWxzZQorICAgICAgICBMWk9fVU5VU0VEKHRfbWJzKTsKKyNlbmRpZgorICAgICAgICBwcmludGYoIiUtMTVzICU1bGQ6ICIsImNvbXByZXNzIiwgY19sb29wcyk7CisgICAgICAgIHByaW50ZigiJTEwbHUgYnl0ZXMsICU4LjJmIHNlY3MsICU4LjNmIE1CL3NlY1xuIiwKKyAgICAgICAgICAgICAgIGNfYnl0ZXMsIGNfc2VjcywgY19tYnMpOworICAgICAgICBwcmludGYoIiUtMTVzICU1bGQ6ICIsImRlY29tcHJlc3MiLCBkX2xvb3BzKTsKKyAgICAgICAgcHJpbnRmKCIlMTBsdSBieXRlcywgJTguMmYgc2VjcywgJTguM2YgTUIvc2VjXG4iLAorICAgICAgICAgICAgICAgZF9ieXRlcywgZF9zZWNzLCBkX21icyk7CisgICAgICAgIHByaW50ZigiXG4iKTsKKyAgICB9CisKKyAgICAvKiBjcmVhdGUgYSBsaW5lIGZvciB1dGlsL3RhYmxlLnBsICovCisgICAgaWYgKG9wdF92ZXJib3NlID49IDEpCisgICAgeworICAgICAgICAvKiBnZXQgYmFzZW5hbWUgKi8KKyAgICAgICAgY29uc3QgY2hhciAqbiwgKm5uLCAqYjsKKyAgICAgICAgZm9yIChubiA9IG4gPSBiID0gZmlsZV9uYW1lOyAqbm47IG5uKyspCisgICAgICAgICAgICBpZiAoKm5uID09ICcvJyB8fCAqbm4gPT0gJ1xcJyB8fCAqbm4gPT0gJzonKQorICAgICAgICAgICAgICAgIGIgPSBubiArIDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbiA9IGI7CisKKyAgICAgICAgcHJpbnRmKCIlLTEzc3wgJS0xNHMgJThsdSAlNGx1ICU5bHUgJTRzICVzJTguM2YgJTguM2YgfFxuIiwKKyAgICAgICAgICAgICAgIG1ldGhvZF9uYW1lLCBuLCBkX2xlbiwgYmxvY2tzLCBjX2xlbiwgcGVyY19zdHIsICIiLCBjX21icywgZF9tYnMpOworICAgIH0KKworICAgIGlmIChvcHRfdmVyYm9zZSA+PSAyKQorICAgICAgICBwcmludGYoIlxuIik7Cit9CisKKworc3RhdGljCit2b2lkIHByaW50X3RvdGFscyAoIHZvaWQgKQoreworICAgIGNoYXIgcGVyY19zdHJbNCsxXTsKKworICAgIGlmICgob3B0X3ZlcmJvc2UgPj0gMSAmJiB0b3RhbF9uID4gMSkgfHwgKG9wdF90b3RhbHMgPj0gMikpCisgICAgeworICAgICAgICB1bnNpZ25lZCBsb25nIG4gPSB0b3RhbF9uID4gMCA/IHRvdGFsX24gOiAxOworICAgICAgICBjb25zdCBjaGFyICp0MSA9ICItLS0tLS0tIjsKKyAgICAgICAgY29uc3QgY2hhciAqdDIgPSB0b3RhbF9tZXRob2RfbmFtZXMgPT0gMSA/IHRvdGFsX21ldGhvZF9uYW1lIDogIiI7CisjaWYgMSAmJiBkZWZpbmVkKF9fQUNDTElCX1BDTE9DS19DSF9JTkNMVURFRCkKKyAgICAgICAgY2hhciB1Y2xvY2tfbW9kZVszMisxXTsKKyAgICAgICAgc3ByaW50Zih1Y2xvY2tfbW9kZSwgIltjbG9jaz0lZF0iLCB1Y2gubW9kZSk7CisgICAgICAgIHQxID0gdWNsb2NrX21vZGU7CisgICAgICAgIGlmIChvcHRfdWNsb2NrID09IDApIHQxID0gdDI7CisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPVEVTVF9VU0VfRFlOTE9BRCkKKyMgIGluY2x1ZGUgImR5bmxvYWQvcHJpbnRfdG90YWxzLmNoIgorI2VuZGlmCisKKyNpZiAxCisgICAgICAgIHNldF9wZXJjX2QodG90YWxfcGVyYyAvIG4sIHBlcmNfc3RyKTsKKyAgICAgICAgcHJpbnRmKCIlLTEzcyAgJS0xMnMgJTEwbHUgJTQuMWYgJTlsdSAlNHMgJTguM2YgJTguM2ZcbiIsCisgICAgICAgICAgICB0MSwgIioqKkFWRyoqKiIsCisgICAgICAgICAgICB0b3RhbF9kX2xlbiAvIG4sIHRvdGFsX2Jsb2NrcyAqIDEuMCAvIG4sIHRvdGFsX2NfbGVuIC8gbiwgcGVyY19zdHIsCisgICAgICAgICAgICB0X2Rpdih0b3RhbF9jX21ic19uLCB0b3RhbF9jX21ic19oYXJtb25pYyksCisgICAgICAgICAgICB0X2Rpdih0b3RhbF9kX21ic19uLCB0b3RhbF9kX21ic19oYXJtb25pYykpOworI2VuZGlmCisgICAgICAgIHNldF9wZXJjKHRvdGFsX2NfbGVuLCB0b3RhbF9kX2xlbiwgcGVyY19zdHIpOworICAgICAgICBwcmludGYoIiUtMTNzICAlLTEycyAlMTBsdSAlNGx1ICU5bHUgJTRzICVzJTguM2YgJTguM2ZcbiIsCisgICAgICAgICAgICB0MiwgIioqKlRPVEFMUyoqKiIsCisgICAgICAgICAgICB0b3RhbF9kX2xlbiwgdG90YWxfYmxvY2tzLCB0b3RhbF9jX2xlbiwgcGVyY19zdHIsICIiLAorICAgICAgICAgICAgdF9kaXYodG90YWxfY19tYnNfbiwgdG90YWxfY19tYnNfaGFybW9uaWMpLAorICAgICAgICAgICAgdF9kaXYodG90YWxfZF9tYnNfbiwgdG90YWxfZF9tYnNfaGFybW9uaWMpKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXByZXNzIGFuZCBkZWNvbXByZXNzIGEgZmlsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYworaW50IHByb2Nlc3NfZmlsZSAoIGNvbnN0IGNvbXByZXNzX3QgKmMsIGx6b19kZWNvbXByZXNzX3QgZGVjb21wcmVzcywKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICptZXRob2RfbmFtZSwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgbG9uZyB0X2xvb3BzLCBsb25nIGNfbG9vcHMsIGxvbmcgZF9sb29wcyApCit7CisgICAgbG9uZyB0X2k7CisgICAgdW5zaWduZWQgbG9uZyBibG9ja3MgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgY29tcHJlc3NlZF9sZW4gPSAwOworICAgIGRvdWJsZSB0X3RpbWUgPSAwLCBjX3RpbWUgPSAwLCBkX3RpbWUgPSAwOworICAgIGx6b191Y2xvY2tfdCB0X3N0YXJ0LCB0X3N0b3AsIHhfc3RhcnQsIHhfc3RvcDsKKyAgICBGSUxFICpmcF9kdW1wID0gTlVMTDsKKworICAgIGlmIChvcHRfZHVtcF9jb21wcmVzc2VkX2RhdGEpCisgICAgICAgIGZwX2R1bXAgPSBmb3BlbihvcHRfZHVtcF9jb21wcmVzc2VkX2RhdGEsIndiIik7CisKKy8qIHByb2Nlc3MgdGhlIGZpbGUgKi8KKworICAgIGx6b191Y2xvY2tfZmx1c2hfY3B1X2NhY2hlKCZ1Y2gsIDApOworICAgIGx6b191Y2xvY2tfcmVhZCgmdWNoLCAmdF9zdGFydCk7CisgICAgZm9yICh0X2kgPSAwOyB0X2kgPCB0X2xvb3BzOyB0X2krKykKKyAgICB7CisgICAgICAgIGx6b191aW50IGxlbiwgY19sZW4sIGNfbGVuX21heCwgZF9sZW4gPSAwOworICAgICAgICBjb25zdCBsem9fYnl0ZXAgZCA9IGZpbGVfZGF0YS5wdHI7CisKKyAgICAgICAgbGVuID0gZmlsZV9kYXRhLmxlbjsKKyAgICAgICAgY19sZW4gPSAwOworICAgICAgICBibG9ja3MgPSAwOworCisgICAgICAgIC8qIHByb2Nlc3MgYmxvY2tzICovCisgICAgICAgIGlmIChsZW4gPiAwIHx8IG9wdF90cnlfdG9fY29tcHJlc3NfMF9ieXRlcykgZG8KKyAgICAgICAgeworICAgICAgICAgICAgbHpvX3VpbnQgYmw7CisgICAgICAgICAgICBsb25nIGNfaTsKKyAgICAgICAgICAgIGludCByOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciByYW5kb21fYnl0ZSA9ICh1bnNpZ25lZCBjaGFyKSBmaWxlX2RhdGEubGVuOworI2lmIDEgJiYgZGVmaW5lZChDTE9DS1NfUEVSX1NFQykKKyAgICAgICAgICAgIHJhbmRvbV9ieXRlIF49ICh1bnNpZ25lZCBjaGFyKSBjbG9jaygpOworI2VuZGlmCisgICAgICAgICAgICBibG9ja3MrKzsKKworICAgICAgICAgICAgYmwgPSBsZW4gPiBvcHRfYmxvY2tfc2l6ZSA/IG9wdF9ibG9ja19zaXplIDogbGVuOworICAgICAgICAgICAgLyogdXBkYXRlIGxlbmd0aHMgZm9yIG1lbWNoZWNrZXJfeHh4KCkgKi8KKyAgICAgICAgICAgIGJsb2NrMS5sZW4gPSBibCArIGdldF9tYXhfY29tcHJlc3Npb25fZXhwYW5zaW9uKGMtPmlkLCBibCk7CisgICAgICAgICAgICBibG9jazIubGVuID0gYmwgKyBnZXRfbWF4X2RlY29tcHJlc3Npb25fb3ZlcnJ1bihjLT5pZCwgYmwpOworI2lmIGRlZmluZWQoX19MWk9fQ0hFQ0tFUikKKyAgICAgICAgICAgIC8qIG1hbGxvYyBhIGJsb2NrIG9mIHRoZSBleGFjdCBzaXplIHRvIGRldGVjdCBhbnkgb3ZlcnJ1biAqLworICAgICAgICAgICAgYXNzZXJ0KGJsb2NrMS5hbGxvY19wdHIgPT0gTlVMTCk7CisgICAgICAgICAgICBhc3NlcnQoYmxvY2syLmFsbG9jX3B0ciA9PSBOVUxMKTsKKyAgICAgICAgICAgIG1iX2FsbG9jKCZibG9jazEsIGJsb2NrMS5sZW4pOworICAgICAgICAgICAgbWJfYWxsb2MoJmJsb2NrMiwgYmxvY2syLmxlbik7CisjZW5kaWYKKyAgICAgICAgICAgIGFzc2VydChibG9jazEubGVuIDw9IGJsb2NrMS5zYXZlZF9sZW4pOworICAgICAgICAgICAgYXNzZXJ0KGJsb2NrMi5sZW4gPD0gYmxvY2syLnNhdmVkX2xlbik7CisKKyAgICAgICAgICAgIG1lbWNoZWNrZXJfaW5pdCgmYmxvY2sxLCBibG9jazEubGVuLCByYW5kb21fYnl0ZSk7CisgICAgICAgICAgICBtZW1jaGVja2VyX2luaXQoJmJsb2NrMiwgYmxvY2syLmxlbiwgcmFuZG9tX2J5dGUpOworCisgICAgICAgIC8qIGNvbXByZXNzIHRoZSBibG9jayAqLworICAgICAgICAgICAgY19sZW4gPSBjX2xlbl9tYXggPSAwOworICAgICAgICAgICAgbHpvX3VjbG9ja19mbHVzaF9jcHVfY2FjaGUoJnVjaCwgMCk7CisgICAgICAgICAgICBsem9fdWNsb2NrX3JlYWQoJnVjaCwgJnhfc3RhcnQpOworICAgICAgICAgICAgZm9yIChyID0gMCwgY19pID0gMDsgciA9PSAwICYmIGNfaSA8IGNfbG9vcHM7IGNfaSsrKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNfbGVuID0gYmxvY2sxLmxlbjsKKyAgICAgICAgICAgICAgICByID0gY2FsbF9jb21wcmVzc29yKGMsIGQsIGJsLCBibG9jazEucHRyLCAmY19sZW4pOworICAgICAgICAgICAgICAgIGlmIChyID09IDAgJiYgY19sZW4gPiBjX2xlbl9tYXgpCisgICAgICAgICAgICAgICAgICAgIGNfbGVuX21heCA9IGNfbGVuOworICAgICAgICAgICAgICAgIGlmIChyID09IDAgJiYgY19sZW4gPiBibG9jazEubGVuKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGNvbXByZXNzX292ZXJydW47CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsem9fdWNsb2NrX3JlYWQoJnVjaCwgJnhfc3RvcCk7CisgICAgICAgICAgICBjX3RpbWUgKz0gbHpvX3VjbG9ja19nZXRfZWxhcHNlZCgmdWNoLCAmeF9zdGFydCwgJnhfc3RvcCk7CisgICAgICAgICAgICBpZiAociAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiICBjb21wcmVzc2lvbiBmYWlsZWQgaW4gYmxvY2sgJWxkICglZCkgKCVsdSAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICBibG9ja3MsIHIsIChsb25nKWNfbGVuLCAobG9uZylibCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfTFpPX0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG1lbWNoZWNrZXJfY2hlY2soJmJsb2NrMSwgYmxvY2sxLmxlbiwgcmFuZG9tX2J5dGUpICE9IDApCisgICAgICAgICAgICB7Citjb21wcmVzc19vdmVycnVuOgorICAgICAgICAgICAgICAgIHByaW50ZigiICBjb21wcmVzc2lvbiBvdmVyd3JpdGUgZXJyb3IgaW4gYmxvY2sgJWx1ICIKKyAgICAgICAgICAgICAgICAgICAgIiglbHUgJWx1ICVsdSAlbHUpXG4iLAorICAgICAgICAgICAgICAgICAgICBibG9ja3MsIChsb25nKWNfbGVuLCAobG9uZylkX2xlbiwgKGxvbmcpYmwsIChsb25nKWJsb2NrMS5sZW4pOworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0xaT19FUlJPUjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAvKiBvcHRpbWl6ZSB0aGUgY29tcHJlc3NlZCBibG9jayAqLworICAgICAgICAgICAgaWYgKGNfbGVuIDwgYmwgJiYgb3B0X29wdGltaXplX2NvbXByZXNzZWRfZGF0YSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkX2xlbiA9IGJsOworICAgICAgICAgICAgICAgIHIgPSBjYWxsX29wdGltaXplcihjLCBibG9jazEucHRyLCBjX2xlbiwgYmxvY2syLnB0ciwgJmRfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAociAhPSAwIHx8IGRfbGVuICE9IGJsKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIG9wdGltaXphdGlvbiBmYWlsZWQgaW4gYmxvY2sgJWx1ICglZCkgIgorICAgICAgICAgICAgICAgICAgICAgICAgIiglbHUgJWx1ICVsdSlcbiIsIGJsb2NrcywgciwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWNfbGVuLCAobG9uZylkX2xlbiwgKGxvbmcpYmwpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9MWk9fRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChtZW1jaGVja2VyX2NoZWNrKCZibG9jazEsIGJsb2NrMS5sZW4sIHJhbmRvbV9ieXRlKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgICAgIG1lbWNoZWNrZXJfY2hlY2soJmJsb2NrMiwgYmxvY2syLmxlbiwgcmFuZG9tX2J5dGUpICE9IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAgb3B0aW1pemUgb3ZlcndyaXRlIGVycm9yIGluIGJsb2NrICVsdSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiKCVsdSAlbHUgJWx1ICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MsIChsb25nKWNfbGVuLCAobG9uZylkX2xlbiwgKGxvbmcpYmwsIChsb25nKWJsb2NrMS5sZW4pOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9MWk9fRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBkdW1wIGNvbXByZXNzZWQgZGF0YSB0byBkaXNrICovCisgICAgICAgICAgICBpZiAoZnBfZHVtcCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAodm9pZCkgbHpvX2Z3cml0ZShmcF9kdW1wLCBibG9jazEucHRyLCBjX2xlbik7CisgICAgICAgICAgICAgICAgZmZsdXNoKGZwX2R1bXApOworICAgICAgICAgICAgfQorCisgICAgICAgIC8qIGRlY29tcHJlc3MgdGhlIGJsb2NrIGFuZCB2ZXJpZnkgKi8KKyAgICAgICAgICAgIGx6b191Y2xvY2tfZmx1c2hfY3B1X2NhY2hlKCZ1Y2gsIDApOworICAgICAgICAgICAgbHpvX3VjbG9ja19yZWFkKCZ1Y2gsICZ4X3N0YXJ0KTsKKyAgICAgICAgICAgIGZvciAociA9IDAsIGNfaSA9IDA7IHIgPT0gMCAmJiBjX2kgPCBkX2xvb3BzOyBjX2krKykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkX2xlbiA9IGJsOworICAgICAgICAgICAgICAgIHIgPSBjYWxsX2RlY29tcHJlc3NvcihjLCBkZWNvbXByZXNzLCBibG9jazEucHRyLCBjX2xlbiwgYmxvY2syLnB0ciwgJmRfbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoZF9sZW4gIT0gYmwpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbHpvX3VjbG9ja19yZWFkKCZ1Y2gsICZ4X3N0b3ApOworICAgICAgICAgICAgZF90aW1lICs9IGx6b191Y2xvY2tfZ2V0X2VsYXBzZWQoJnVjaCwgJnhfc3RhcnQsICZ4X3N0b3ApOworICAgICAgICAgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiAgZGVjb21wcmVzc2lvbiBmYWlsZWQgaW4gYmxvY2sgJWx1ICglZCkgIgorICAgICAgICAgICAgICAgICAgICAiKCVsdSAlbHUgJWx1KVxuIiwgYmxvY2tzLCByLAorICAgICAgICAgICAgICAgICAgICAobG9uZyljX2xlbiwgKGxvbmcpZF9sZW4sIChsb25nKWJsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9MWk9fRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZF9sZW4gIT0gYmwpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCIgIGRlY29tcHJlc3Npb24gc2l6ZSBlcnJvciBpbiBibG9jayAlbHUgKCVsdSAlbHUgJWx1KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tzLCAobG9uZyljX2xlbiwgKGxvbmcpZF9sZW4sIChsb25nKWJsKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9MWk9fRVJST1I7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaXNfY29tcHJlc3NvcihjKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAobHpvX21lbWNtcChkLCBibG9jazIucHRyLCBibCkgIT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IHggPSAwOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoeCA8IGJsICYmIGJsb2NrMi5wdHJbeF0gPT0gZFt4XSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHgrKzsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIGRlY29tcHJlc3Npb24gZGF0YSBlcnJvciBpbiBibG9jayAlbHUgYXQgb2Zmc2V0ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICIlbHUgKCVsdSAlbHUpXG4iLCBibG9ja3MsIChsb25nKXgsCisgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyljX2xlbiwgKGxvbmcpZF9sZW4pOworICAgICAgICAgICAgICAgICAgICBpZiAob3B0X2NvbXB1dGVfYWRsZXIzMikKKyAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgY2hlY2tzdW06IDB4JTA4bHggMHglMDhseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZylhZGxlcl9pbiwgKGxvbmcpYWRsZXJfb3V0KTsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiT3JpZzogICIpOworICAgICAgICAgICAgICAgICAgICByID0gKHggPj0gMTApID8gLTEwIDogMCAtIChpbnQpIHg7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaiA9IHI7IGogPD0gMTAgJiYgeCArIGogPCBibDsgaisrKQorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJTAyeCIsIChpbnQpZFt4K2pdKTsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbkRlY29tcDoiKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gcjsgaiA8PSAxMCAmJiB4ICsgaiA8IGJsOyBqKyspCisgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIiAlMDJ4IiwgKGludClibG9jazIucHRyW3gral0pOworICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfTFpPX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoKG9wdF9jb21wdXRlX2FkbGVyMzIgJiYgYWRsZXJfaW4gIT0gYWRsZXJfb3V0KSB8fAorICAgICAgICAgICAgICAgICAgICAob3B0X2NvbXB1dGVfY3JjMzIgJiYgY3JjX2luICE9IGNyY19vdXQpKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgIGNoZWNrc3VtIGVycm9yIGluIGJsb2NrICVsdSAoJWx1ICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBibG9ja3MsIChsb25nKWNfbGVuLCAobG9uZylkX2xlbik7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgYWRsZXIzMjogMHglMDhseCAweCUwOGx4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpYWRsZXJfaW4sIChsb25nKWFkbGVyX291dCk7CisgICAgICAgICAgICAgICAgICAgIHByaW50ZigiICAgICAgY3JjMzI6IDB4JTA4bHggMHglMDhseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKWNyY19pbiwgKGxvbmcpY3JjX291dCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0xaT19FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChtZW1jaGVja2VyX2NoZWNrKCZibG9jazIsIGJsb2NrMi5sZW4sIHJhbmRvbV9ieXRlKSAhPSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHByaW50ZigiICBkZWNvbXByZXNzaW9uIG92ZXJ3cml0ZSBlcnJvciBpbiBibG9jayAlbHUgIgorICAgICAgICAgICAgICAgICAgICAiKCVsdSAlbHUgJWx1ICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGJsb2NrcywgKGxvbmcpY19sZW4sIChsb25nKWRfbGVuLCAobG9uZylibCwgKGxvbmcpYmxvY2syLmxlbik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfTFpPX0VSUk9SOworICAgICAgICAgICAgfQorCisjaWYgZGVmaW5lZChfX0xaT19DSEVDS0VSKQorICAgICAgICAgICAgLyogZnJlZSBpbiByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zICovCisgICAgICAgICAgICBtYl9mcmVlKCZibG9jazIpOworICAgICAgICAgICAgbWJfZnJlZSgmYmxvY2sxKTsKKyNlbmRpZgorCisgICAgICAgICAgICBkICs9IGJsOworICAgICAgICAgICAgbGVuIC09IGJsOworICAgICAgICAgICAgY29tcHJlc3NlZF9sZW4gKz0gKHVuc2lnbmVkIGxvbmcpIGNfbGVuX21heDsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAobGVuID4gMCk7CisgICAgfQorICAgIGx6b191Y2xvY2tfcmVhZCgmdWNoLCAmdF9zdG9wKTsKKyAgICB0X3RpbWUgKz0gbHpvX3VjbG9ja19nZXRfZWxhcHNlZCgmdWNoLCAmdF9zdGFydCwgJnRfc3RvcCk7CisKKyAgICBpZiAoZnBfZHVtcCkKKyAgICAgICAgZmNsb3NlKGZwX2R1bXApOworICAgIG9wdF9kdW1wX2NvbXByZXNzZWRfZGF0YSA9IE5VTEw7ICAgIC8qIG9ubHkgZHVtcCB0aGUgZmlyc3QgZmlsZSAqLworCisgICAgcHJpbnRfc3RhdHMobWV0aG9kX25hbWUsIGZpbGVfbmFtZSwKKyAgICAgICAgICAgICAgICB0X2xvb3BzLCBjX2xvb3BzLCBkX2xvb3BzLAorICAgICAgICAgICAgICAgIHRfdGltZSwgY190aW1lLCBkX3RpbWUsCisgICAgICAgICAgICAgICAgY29tcHJlc3NlZF9sZW4sICh1bnNpZ25lZCBsb25nKSBmaWxlX2RhdGEubGVuLCBibG9ja3MpOworICAgIGlmICh0b3RhbF9tZXRob2RfbmFtZSAhPSBjLT5uYW1lKSB7CisgICAgICAgIHRvdGFsX21ldGhvZF9uYW1lID0gYy0+bmFtZTsKKyAgICAgICAgdG90YWxfbWV0aG9kX25hbWVzICs9IDE7CisgICAgfQorCisgICAgcmV0dXJuIEVYSVRfT0s7Cit9CisKKworCitzdGF0aWMKK2ludCBkb19maWxlICggaW50IG1ldGhvZCwgY29uc3QgY2hhciAqZmlsZV9uYW1lLAorICAgICAgICAgICAgICBsb25nIGNfbG9vcHMsIGxvbmcgZF9sb29wcywKKyAgICAgICAgICAgICAgbHpvX3VpbnQzMnAgcF9hZGxlciwgbHpvX3VpbnQzMnAgcF9jcmMgKQoreworICAgIGludCByOworICAgIGNvbnN0IGNvbXByZXNzX3QgKmM7CisgICAgbHpvX2RlY29tcHJlc3NfdCBkZWNvbXByZXNzOworICAgIGx6b191aW50MzIgYWRsZXIsIGNyYzsKKyAgICBjaGFyIG1ldGhvZF9uYW1lWzI1NisxXTsKKyAgICBjb25zdCBjaGFyICpuOworICAgIGNvbnN0IGxvbmcgdF9sb29wcyA9IDE7CisKKyAgICBhZGxlcl9pbiA9IGFkbGVyX291dCA9IDA7CisgICAgY3JjX2luID0gY3JjX291dCA9IDA7CisgICAgaWYgKHBfYWRsZXIpCisgICAgICAgICpwX2FkbGVyID0gMDsKKyAgICBpZiAocF9jcmMpCisgICAgICAgICpwX2NyYyA9IDA7CisKKyAgICBjID0gZmluZF9tZXRob2RfYnlfaWQobWV0aG9kKTsKKyAgICBpZiAoYyA9PSBOVUxMIHx8IGMtPm5hbWUgPT0gTlVMTCB8fCBjLT5jb21wcmVzcyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gRVhJVF9JTlRFUk5BTDsKKyAgICBkZWNvbXByZXNzID0gZ2V0X2RlY29tcF9pbmZvKGMsJm4pOworICAgIGlmICghZGVjb21wcmVzcyB8fCBuID09IE5VTEwgfHwgd3JrbWVtLmxlbiA8IGMtPm1lbV9kZWNvbXByZXNzKQorICAgICAgICByZXR1cm4gRVhJVF9JTlRFUk5BTDsKKyAgICBzdHJjcHkobWV0aG9kX25hbWUsYy0+bmFtZSk7CisgICAgc3RyY2F0KG1ldGhvZF9uYW1lLG4pOworCisgICAgaWYgKGNfbG9vcHMgPCAxKSAgY19sb29wcyA9IDE7CisgICAgaWYgKGRfbG9vcHMgPCAxKSAgZF9sb29wcyA9IDE7CisKKyAgICBmZmx1c2goc3Rkb3V0KTsgZmZsdXNoKHN0ZGVycik7CisKKyAgICAvKiByZWFkIHRoZSB3aG9sZSBmaWxlICovCisgICAgciA9IGxvYWRfZmlsZShmaWxlX25hbWUsIG9wdF9tYXhfZGF0YV9sZW4pOworICAgIGlmIChyICE9IDApCisgICAgICAgIHJldHVybiByOworCisgICAgLyogY29tcHV0ZSBzb21lIGNoZWNrc3VtcyAqLworICAgIGFkbGVyID0gbHpvX2FkbGVyMzIoMCwgTlVMTCwgMCk7CisgICAgYWRsZXIgPSBsem9fYWRsZXIzMihhZGxlciwgZmlsZV9kYXRhLnB0ciwgZmlsZV9kYXRhLmxlbik7CisgICAgaWYgKHBfYWRsZXIpCisgICAgICAgICpwX2FkbGVyID0gYWRsZXI7CisgICAgY3JjID0gbHpvX2NyYzMyKDAsIE5VTEwsIDApOworICAgIGNyYyA9IGx6b19jcmMzMihjcmMsIGZpbGVfZGF0YS5wdHIsIGZpbGVfZGF0YS5sZW4pOworICAgIGlmIChwX2NyYykKKyAgICAgICAgKnBfY3JjID0gY3JjOworCisgICAgaWYgKG9wdF92ZXJib3NlID49IDIpCisgICAgeworICAgICAgICBwcmludGYoIkZpbGUgJXM6ICVsdSBieXRlcyAgICgweCUwOGx4LCAweCUwOGx4KVxuIiwKKyAgICAgICAgICAgICAgICBmaWxlX25hbWUsIChsb25nKSBmaWxlX2RhdGEubGVuLCAobG9uZykgYWRsZXIsIChsb25nKSBjcmMpOworICAgICAgICBwcmludGYoIiAgY29tcHJlc3NpbmcgJWx1IGJ5dGVzICglbGQvJWxkLyVsZCBsb29wcywgJWx1IGJsb2NrLXNpemUpXG4iLAorICAgICAgICAgICAgICAgIChsb25nKSBmaWxlX2RhdGEubGVuLCB0X2xvb3BzLCBjX2xvb3BzLCBkX2xvb3BzLCAobG9uZykgb3B0X2Jsb2NrX3NpemUpOworICAgICAgICBwcmludGYoIiAgJXNcbiIsIG1ldGhvZF9uYW1lKTsKKyAgICB9CisKKyAgICByID0gcHJvY2Vzc19maWxlKGMsIGRlY29tcHJlc3MsIG1ldGhvZF9uYW1lLCBmaWxlX25hbWUsCisgICAgICAgICAgICAgICAgICAgICB0X2xvb3BzLCBjX2xvb3BzLCBkX2xvb3BzKTsKKworICAgIHJldHVybiByOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDYWxnYXJ5IENvcnB1cyBhbmQgU2lsZXNpYSBDb3JwdXMgdGVzdCBzdWl0ZSBkcml2ZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdHJ1Y3QgY29ycHVzX2VudHJ5X3QKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGxvbmcgbG9vcHM7CisgICAgbHpvX3VpbnQzMiBhZGxlcjsKKyAgICBsem9fdWludDMyIGNyYzsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29ycHVzX2VudHJ5X3QgY2FsZ2FyeV9jb3JwdXNbXSA9Cit7CisgICAgeyAiYmliIiwgICAgICAgOCwgIDB4NGJkMDllOThMLCAweGI4NTZlYmU4TCB9LAorICAgIHsgImJvb2sxIiwgICAgIDEsICAweGQ0ZDM2MTNlTCwgMHgyNGUxOTk3MkwgfSwKKyAgICB7ICJib29rMiIsICAgICAxLCAgMHg2ZmUxNGNjM0wsIDB4YmEwZjNmMjZMIH0sCisgICAgeyAiZ2VvIiwgICAgICAgNiwgIDB4ZjNjYzViZTBMLCAweDRkM2E2ZWQwTCB9LAorICAgIHsgIm5ld3MiLCAgICAgIDIsICAweDJlZDQwNWI4TCwgMHhjYWZhYzg1M0wgfSwKKyAgICB7ICJvYmoxIiwgICAgIDM1LCAgMHgzODg3ZGQyY0wsIDB4YzdiMGNkMjZMIH0sCisgICAgeyAib2JqMiIsICAgICAgNCwgIDB4Zjg5NDA3YzRMLCAweDNhZTMzMDA3TCB9LAorICAgIHsgInBhcGVyMSIsICAgMTcsICAweGZlNjVjZTYyTCwgMHgyYjZiYWNhMEwgfSwKKyAgICB7ICJwYXBlcjIiLCAgIDExLCAgMHgxMjM4YjdjMkwsIDB4Zjc2Y2JhNzJMIH0sCisgICAgeyAicGljIiwgICAgICAgNCwgIDB4ZjYxYTU3MDJMLCAweDRiMTdlNTljTCB9LAorICAgIHsgInByb2djIiwgICAgMjUsICAweDRjMDBiYTQ1TCwgMHg2ZmIxNjA5NEwgfSwKKyAgICB7ICJwcm9nbCIsICAgIDIwLCAgMHg0Y2JhNzM4ZUwsIDB4ZGRiZjZiYWFMIH0sCisgICAgeyAicHJvZ3AiLCAgICAyOCwgIDB4NzQ5NWI5MmJMLCAweDQ5M2ExODA5TCB9LAorICAgIHsgInRyYW5zIiwgICAgMTUsICAweDUyYTJjZWM4TCwgMHhjZGVjMDZhNkwgfSwKKyAgICB7IE5VTEwsICAgICAgICAwLCAgMHgwMDAwMDAwMEwsIDB4MDAwMDAwMDBMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY29ycHVzX2VudHJ5X3Qgc2lsZXNpYV9jb3JwdXNbXSA9Cit7CisgICAgeyAiZGlja2VucyIsICAgMSwgIDB4MTcwZjYwNmZMLCAweGFmM2E2Yjc2TCB9LAorICAgIHsgIm1vemlsbGEiLCAgIDEsICAweDExODhkZDRlTCwgMHg3ZmIwYWI3ZEwgfSwKKyAgICB7ICJtciIsICAgICAgICAxLCAgMHhhZWExNGI5N0wsIDB4YTM0MTg4M2ZMIH0sCisgICAgeyAibmNpIiwgICAgICAgMSwgIDB4MGFmMTZmMWZMLCAweDYwZmY2M2QzTCB9LAorICAgIHsgIm9vZmZpY2UiLCAgIDEsICAweDgzYzhmNjg5TCwgMHhhMDIzZTFmYUwgfSwKKyAgICB7ICJvc2RiIiwgICAgICAxLCAgMHhiODI1Yjc5MEwsIDB4YTBjYTM4OGNMIH0sCisgICAgeyAicmV5bW9udCIsICAgMSwgIDB4Y2U1YzgyY2FMLCAweDUwZDM1ZjAzTCB9LAorICAgIHsgInNhbWJhIiwgICAgIDEsICAweDE5ZGJiOWY1TCwgMHgyYmVhYzVmM0wgfSwKKyAgICB7ICJzYW8iLCAgICAgICAxLCAgMHg3ZWRmYzRhOUwsIDB4ZmRhMTI1YmZMIH0sCisgICAgeyAid2Vic3RlciIsICAgMSwgIDB4ZjI5NjJmYzZMLCAweDAxZjVhMmU5TCB9LAorICAgIHsgInhtbCIsICAgICAgIDEsICAweGVjY2QwM2Q2TCwgMHhmZjhmMzA1MUwgfSwKKyAgICB7ICJ4LXJheSIsICAgICAxLCAgMHhjOTU0MzVhMEwsIDB4Yzg2YTM1YzZMIH0sCisgICAgeyBOVUxMLCAgICAgICAgMCwgIDB4MDAwMDAwMDBMLCAweDAwMDAwMDAwTCB9Cit9OworCisKK3N0YXRpYworaW50IGRvX2NvcnB1cyAoIGNvbnN0IHN0cnVjdCBjb3JwdXNfZW50cnlfdCAqY29ycHVzLCBpbnQgbWV0aG9kLCBjb25zdCBjaGFyICpwYXRoLAorICAgICAgICAgICAgICAgIGxvbmcgY19sb29wcywgbG9uZyBkX2xvb3BzICkKK3sKKyAgICBzaXplX3QgaSwgbjsKKyAgICBjaGFyIG5hbWVbMjU2XTsKKworICAgIGlmIChwYXRoID09IE5VTEwgfHwgc3RybGVuKHBhdGgpID49IHNpemVvZihuYW1lKSAtIDEyKQorICAgICAgICByZXR1cm4gRVhJVF9VU0FHRTsKKworICAgIHN0cmNweShuYW1lLHBhdGgpOworICAgIG4gPSBzdHJsZW4obmFtZSk7CisgICAgaWYgKG4gPiAwICYmIG5hbWVbbi0xXSAhPSAnLycgJiYgbmFtZVtuLTFdICE9ICdcXCcgJiYgbmFtZVtuLTFdICE9ICc6JykKKyAgICB7CisgICAgICAgIHN0cmNhdChuYW1lLCIvIik7CisgICAgICAgIG4rKzsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBjb3JwdXNbaV0ubmFtZSAhPSBOVUxMOyBpKyspCisgICAgeworICAgICAgICBsem9fdWludDMyIGFkbGVyLCBjcmM7CisgICAgICAgIGxvbmcgYyA9IGNfbG9vcHMgKiBjb3JwdXNbaV0ubG9vcHM7CisgICAgICAgIGxvbmcgZCA9IGRfbG9vcHMgKiBjb3JwdXNbaV0ubG9vcHM7CisgICAgICAgIGludCByOworCisgICAgICAgIHN0cmNweShuYW1lK24sY29ycHVzW2ldLm5hbWUpOworICAgICAgICByID0gZG9fZmlsZShtZXRob2QsIG5hbWUsIGMsIGQsICZhZGxlciwgJmNyYyk7CisgICAgICAgIGlmIChyICE9IDApCisgICAgICAgICAgICByZXR1cm4gcjsKKyAgICAgICAgaWYgKGFkbGVyICE9IGNvcnB1c1tpXS5hZGxlcikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIGludmFsaWQgdGVzdCBzdWl0ZVxuIik7CisgICAgICAgICAgICByZXR1cm4gRVhJVF9BRExFUjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY29ycHVzW2ldLmNyYyAmJiBjcmMgIT0gY29ycHVzW2ldLmNyYykKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCIgIGludGVybmFsIGNoZWNrc3VtIGVycm9yICEhICAoMHglMDhseCAweCUwOGx4KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGNyYywgKGxvbmcpIGNvcnB1c1tpXS5jcmMpOworICAgICAgICAgICAgcmV0dXJuIEVYSVRfSU5URVJOQUw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEVYSVRfT0s7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHVzYWdlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljCit2b2lkIHVzYWdlICggY29uc3QgY2hhciAqbmFtZSwgaW50IGV4aXRfY29kZSwgbHpvX2Jvb2wgc2hvd19tZXRob2RzICkKK3sKKyAgICBGSUxFICpmOworICAgIGludCBpOworCisgICAgZiA9IHN0ZG91dDsKKworICAgIGZmbHVzaChzdGRvdXQpOyBmZmx1c2goc3RkZXJyKTsKKworICAgIGZwcmludGYoZiwiVXNhZ2U6ICVzIFtvcHRpb24uLl0gZmlsZS4uLlxuIiwgbmFtZSk7CisgICAgZnByaW50ZihmLCJcbiIpOworICAgIGZwcmludGYoZiwiT3B0aW9uczpcbiIpOworICAgIGZwcmludGYoZiwiICAtbSMgICAgIGNvbXByZXNzaW9uIG1ldGhvZFxuIik7CisgICAgZnByaW50ZihmLCIgIC1iIyAgICAgc2V0IGlucHV0IGJsb2NrIHNpemUgKGRlZmF1bHQgJWxkLCBtYXggJWxkKVxuIiwKKyAgICAgICAgKGxvbmcpIG9wdF9ibG9ja19zaXplLCAobG9uZykgb3B0X21heF9kYXRhX2xlbik7CisgICAgZnByaW50ZihmLCIgIC1uIyAgICAgbnVtYmVyIG9mIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gcnVuc1xuIik7CisgICAgZnByaW50ZihmLCIgIC1jIyAgICAgbnVtYmVyIG9mIGNvbXByZXNzaW9uIHJ1bnNcbiIpOworICAgIGZwcmludGYoZiwiICAtZCMgICAgIG51bWJlciBvZiBkZWNvbXByZXNzaW9uIHJ1bnNcbiIpOworICAgIGZwcmludGYoZiwiICAtUyAgICAgIHVzZSBzYWZlIGRlY29tcHJlc3NvciAoaWYgYXZhaWxhYmxlKVxuIik7CisgICAgZnByaW50ZihmLCIgIC1BICAgICAgdXNlIGFzc2VtYmxlciBkZWNvbXByZXNzb3IgKGlmIGF2YWlsYWJsZSlcbiIpOworICAgIGZwcmludGYoZiwiICAtRiAgICAgIHVzZSBmYXN0IGFzc2VtYmxlciBkZWNvbXByZXNzb3IgKGlmIGF2YWlsYWJsZSlcbiIpOworICAgIGZwcmludGYoZiwiICAtTyAgICAgIG9wdGltaXplIGNvbXByZXNzZWQgZGF0YSAoaWYgYXZhaWxhYmxlKVxuIik7CisgICAgZnByaW50ZihmLCIgIC1zIERJUiAgcHJvY2VzcyBDYWxnYXJ5IENvcnB1cyB0ZXN0IHN1aXRlIGluIGRpcmVjdG9yeSBgRElSJ1xuIik7CisgICAgZnByaW50ZihmLCIgIC1AICAgICAgcmVhZCBsaXN0IG9mIGZpbGVzIHRvIGNvbXByZXNzIGZyb20gc3RkaW5cbiIpOworICAgIGZwcmludGYoZiwiICAtcSAgICAgIGJlIHF1aWV0XG4iKTsKKyAgICBmcHJpbnRmKGYsIiAgLVEgICAgICBiZSB2ZXJ5IHF1aWV0XG4iKTsKKyAgICBmcHJpbnRmKGYsIiAgLXYgICAgICBiZSB2ZXJib3NlXG4iKTsKKyAgICBmcHJpbnRmKGYsIiAgLUwgICAgICBkaXNwbGF5IHNvZnR3YXJlIGxpY2Vuc2VcbiIpOworCisgICAgaWYgKHNob3dfbWV0aG9kcykKKyAgICB7CisjaWYgZGVmaW5lZChfX0FDQ0xJQl9QQ0xPQ0tfQ0hfSU5DTFVERUQpCisgICAgICAgIGx6b191Y2xvY2tfdCB0X2R1bW15OworICAgICAgICBsem9fdWNsb2NrX3JlYWQoJnVjaCwgJnRfZHVtbXkpOworICAgICAgICAodm9pZCkgbHpvX3VjbG9ja19nZXRfZWxhcHNlZCgmdWNoLCAmdF9kdW1teSwgJnRfZHVtbXkpOworICAgICAgICBmcHJpbnRmKGYsIlxuQWxsIHRpbWluZ3MgYXJlIHJlY29yZGVkIHVzaW5nIHVjbG9jayBtb2RlICVkICVzLlxuIiwgdWNoLm1vZGUsIHVjaC5uYW1lKTsKKyNlbmRpZgorICAgICAgICBmcHJpbnRmKGYsIlxuXG4iKTsKKyAgICAgICAgZnByaW50ZihmLCJUaGUgZm9sbG93aW5nIGNvbXByZXNzaW9uIG1ldGhvZHMgYXJlIGF2YWlsYWJsZTpcbiIpOworICAgICAgICBmcHJpbnRmKGYsIlxuIik7CisgICAgICAgIGZwcmludGYoZiwiICB1c2FnZSAgIG5hbWUgICAgICAgICAgIG1lbW9yeSAgICAgICAgICBhdmFpbGFibGUgZXh0cmFzXG4iKTsKKyAgICAgICAgZnByaW50ZihmLCIgIC0tLS0tICAgLS0tLSAgICAgICAgICAgLS0tLS0tICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLS1cbiIpOworCisgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gTV9MQVNUX0NPTVBSRVNTT1I7IGkrKykKKyAgICAgICAgeworICAgICAgICAgICAgY29uc3QgY29tcHJlc3NfdCAqYzsKKyAgICAgICAgICAgIGMgPSBmaW5kX21ldGhvZF9ieV9pZChpKTsKKyAgICAgICAgICAgIGlmIChjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNoYXIgblsxNl07CisgICAgICAgICAgICAgICAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBzWzNdID0geyIgICAgICAgICAgIiwgIiwgIiwgIiJ9OworICAgICAgICAgICAgICAgIGludCBqID0gMDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG0gPSBjLT5tZW1fY29tcHJlc3M7CisKKyAgICAgICAgICAgICAgICBzcHJpbnRmKG4sIi1tJWQiLGkpOworICAgICAgICAgICAgICAgIGZwcmludGYoZiwiICAlLTZzICAlLTEzcyIsbixjLT5uYW1lKTsKKyNpZiAxCisgICAgICAgICAgICAgICAgZnByaW50ZihmLCIlOWxkIiwgbSk7CisjZWxzZQorICAgICAgICAgICAgICAgIG0gPSAobSArIDEwMjMpIC8gMTAyNDsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKGYsIiU2bGQga0IiLCBtKTsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgaWYgKGMtPmRlY29tcHJlc3Nfc2FmZSkKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihmLCAiJXMlcyIsIGorKyA9PSAwID8gc1swXSA6IHNbMV0sICJzYWZlIik7CisgICAgICAgICAgICAgICAgaWYgKGMtPmRlY29tcHJlc3NfYXNtKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzIiwgaisrID09IDAgPyBzWzBdIDogc1sxXSwgImFzbSIpOworICAgICAgICAgICAgICAgIGlmIChjLT5kZWNvbXByZXNzX2FzbV9zYWZlKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzIiwgaisrID09IDAgPyBzWzBdIDogc1sxXSwgImFzbStzYWZlIik7CisgICAgICAgICAgICAgICAgaWYgKGMtPmRlY29tcHJlc3NfYXNtX2Zhc3QpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzJXMiLCBqKysgPT0gMCA/IHNbMF0gOiBzWzFdLCAiZmFzdGFzbSIpOworICAgICAgICAgICAgICAgIGlmIChjLT5kZWNvbXByZXNzX2FzbV9mYXN0X3NhZmUpCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoZiwgIiVzJXMiLCBqKysgPT0gMCA/IHNbMF0gOiBzWzFdLCAiZmFzdGFzbStzYWZlIik7CisgICAgICAgICAgICAgICAgaWYgKGMtPm9wdGltaXplKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsICIlcyVzIiwgaisrID09IDAgPyBzWzBdIDogc1sxXSwgIm9wdGltaXplIik7CisgICAgICAgICAgICAgICAgaWYgKGogPiAwKQorICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKGYsIHNbMl0pOworICAgICAgICAgICAgICAgIGZwcmludGYoZiwiXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBmcHJpbnRmKGYsIlxuIik7CisgICAgICAgIGZwcmludGYoZiwiVHlwZSAnJXMgLW0nIHRvIGxpc3QgYWxsIGF2YWlsYWJsZSBtZXRob2RzLlxuIiwgbmFtZSk7CisgICAgfQorCisgICAgZmZsdXNoKGYpOworICAgIGlmIChleGl0X2NvZGUgPCAwKQorICAgICAgICBleGl0X2NvZGUgPSBFWElUX1VTQUdFOworICAgIGV4aXQoZXhpdF9jb2RlKTsKK30KKworCitzdGF0aWMKK3ZvaWQgbGljZW5zZSh2b2lkKQoreworICAgIEZJTEUgKmY7CisKKyAgICBmID0gc3Rkb3V0OworCisgICAgZmZsdXNoKHN0ZG91dCk7IGZmbHVzaChzdGRlcnIpOworCisjaWYgZGVmaW5lZChfX0xaT19QUk9GRVNTSU9OQUxfXykKKyMgIGluY2x1ZGUgImx6b3Byby9saWNlbnNlLmNoIgorI2Vsc2UKK2ZwcmludGYoZiwKKyIgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yXG4iCisiICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXNcbiIKKyIgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZlxuIgorIiAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLlxuIgorIlxuIgorIiAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLFxuIgorIiAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mXG4iCisiICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZVxuIgorIiAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuXG4iCisgICAgKTsKK2ZwcmludGYoZiwKKyJcbiIKKyIgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZVxuIgorIiAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5cbiIKKyIgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sXG4iCisiICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuXG4iCisiXG4iCisiICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXJcbiIKKyIgICA8bWFya3VzQG9iZXJodW1lci5jb20+XG4iCisiICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvL1xuIgorIlxuIgorICAgICk7CisjZW5kaWYKKworICAgIGZmbHVzaChmKTsKKyAgICBleGl0KEVYSVRfT0spOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBwYXJzZSBtZXRob2Qgb3B0aW9uICctbScKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50IG1ldGhvZHNbMjU2KzFdOworc3RhdGljIGludCBtZXRob2RzX24gPSAwOworCitzdGF0aWMgdm9pZCBhZGRfbWV0aG9kKGludCBtKQoreworICAgIGludCBpOworCisgICAgaWYgKG0gPiAwKQorICAgIHsKKyAgICAgICAgaWYgKCFmaW5kX21ldGhvZF9ieV9pZChtKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsIiVzOiBpbnZhbGlkIG1ldGhvZCAlZFxuIixwcm9nbmFtZSxtKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9VU0FHRSk7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbWV0aG9kc19uOyBpKyspCisgICAgICAgICAgICBpZiAobWV0aG9kc1tpXSA9PSBtKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAobWV0aG9kc19uID49IDI1NikKKyAgICAgICAgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsIiVzOiB0b28gbWFueSBtZXRob2RzXG4iLHByb2duYW1lKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9VU0FHRSk7CisgICAgICAgIH0KKworICAgICAgICBtZXRob2RzW21ldGhvZHNfbisrXSA9IG07CisgICAgICAgIG1ldGhvZHNbbWV0aG9kc19uXSA9IDA7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIGFkZF9tZXRob2RzKGNvbnN0IGludCAqbWwpCit7CisgICAgd2hpbGUgKCptbCAhPSAwKQorICAgICAgICBhZGRfbWV0aG9kKCptbCsrKTsKK30KKworCitzdGF0aWMgdm9pZCBhZGRfYWxsX21ldGhvZHMoaW50IGZpcnN0LCBpbnQgbGFzdCkKK3sKKyAgICBpbnQgbTsKKworICAgIGZvciAobSA9IGZpcnN0OyBtIDw9IGxhc3Q7IG0rKykKKyAgICAgICAgaWYgKGZpbmRfbWV0aG9kX2J5X2lkKG0pICE9IE5VTEwpCisgICAgICAgICAgICBhZGRfbWV0aG9kKG0pOworfQorCisKK3N0YXRpYyBpbnQgbV9zdHJjbXAoY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikKK3sKKyAgICBzaXplX3QgbjsKKworICAgIGlmIChhWzBdID09IDAgfHwgYlswXSA9PSAwKQorICAgICAgICByZXR1cm4gMTsKKyAgICBuID0gc3RybGVuKGIpOworICAgIGlmIChzdHJuY21wKGEsYixuKSA9PSAwICYmIChhW25dID09IDAgfHwgYVtuXSA9PSAnLCcpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMTsKK30KKworCitzdGF0aWMgbHpvX2Jvb2wgbV9zdHJpc2RpZ2l0KGNvbnN0IGNoYXIgKnMpCit7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGlmICghaXNfZGlnaXQoKnMpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHMrKzsKKyAgICAgICAgaWYgKCpzID09IDAgfHwgKnMgPT0gJywnKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorfQorCisKK3N0YXRpYyB2b2lkIHBhcnNlX21ldGhvZHMoY29uc3QgY2hhciAqcCkKK3sKKyAgICBjb25zdCBjb21wcmVzc190ICpjOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGlmIChwID09IE5VTEwgfHwgcFswXSA9PSAwKQorICAgICAgICAgICAgdXNhZ2UocHJvZ25hbWUsLTEsMSk7CisgICAgICAgIGVsc2UgaWYgKChjID0gZmluZF9tZXRob2RfYnlfbmFtZShwKSkgIT0gTlVMTCkKKyAgICAgICAgICAgIGFkZF9tZXRob2QoYy0+aWQpOworICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJhbGwiKSA9PSAwIHx8IG1fc3RyY21wKHAsImF2YWlsIikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9hbGxfbWV0aG9kcygxLE1fTEFTVF9DT01QUkVTU09SKTsKKyAgICAgICAgZWxzZSBpZiAobV9zdHJjbXAocCwiQUxMIikgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgYWRkX2FsbF9tZXRob2RzKDEsTV9MQVNUX0NPTVBSRVNTT1IpOworICAgICAgICAgICAgYWRkX2FsbF9tZXRob2RzKDk3MjEsOTcyOSk7CisgICAgICAgICAgICBhZGRfYWxsX21ldGhvZHMoOTc4MSw5Nzg5KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJsem8iKSA9PSAwKQorICAgICAgICAgICAgYWRkX2FsbF9tZXRob2RzKDEsTV9NRU1DUFkpOworICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJiZW5jaCIpID09IDApCisgICAgICAgICAgICBhZGRfbWV0aG9kcyhiZW5jaG1hcmtfbWV0aG9kcyk7CisgICAgICAgIGVsc2UgaWYgKG1fc3RyY21wKHAsIm0xIikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9tZXRob2RzKHgxX21ldGhvZHMpOworICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJtOTkiKSA9PSAwKQorICAgICAgICAgICAgYWRkX21ldGhvZHMoeDk5X21ldGhvZHMpOworICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJtOTk5IikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9tZXRob2RzKHg5OTlfbWV0aG9kcyk7CisgICAgICAgIGVsc2UgaWYgKG1fc3RyY21wKHAsIjF4OTk5IikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9hbGxfbWV0aG9kcyg5NzIxLDk3MjkpOworICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCIxeTk5OSIpID09IDApCisgICAgICAgICAgICBhZGRfYWxsX21ldGhvZHMoOTgyMSw5ODI5KTsKKyNpZiBkZWZpbmVkKEFMR19aTElCKQorICAgICAgICBlbHNlIGlmIChtX3N0cmNtcChwLCJ6bGliIikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9hbGxfbWV0aG9kcyhNX1pMSUJfOF8xLE1fWkxJQl84XzkpOworI2VuZGlmCisjaWYgZGVmaW5lZChBTEdfQlpJUDIpCisgICAgICAgIGVsc2UgaWYgKG1fc3RyY21wKHAsImJ6aXAyIikgPT0gMCkKKyAgICAgICAgICAgIGFkZF9hbGxfbWV0aG9kcyhNX0JaSVAyXzEsTV9CWklQMl85KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9fUFJPRkVTU0lPTkFMX18pCisjICBpbmNsdWRlICJsem9wcm8vdF9vcHRfbS5jaCIKKyNlbmRpZgorICAgICAgICBlbHNlIGlmIChtX3N0cmlzZGlnaXQocCkpCisgICAgICAgICAgICBhZGRfbWV0aG9kKGF0b2kocCkpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHByaW50ZigiJXM6IGludmFsaWQgbWV0aG9kICclcydcblxuIixwcm9nbmFtZSxwKTsKKyAgICAgICAgICAgIGV4aXQoRVhJVF9VU0FHRSk7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAoKnAgJiYgKnAgIT0gJywnKQorICAgICAgICAgICAgcCsrOworICAgICAgICB3aGlsZSAoKnAgPT0gJywnKQorICAgICAgICAgICAgcCsrOworICAgICAgICBpZiAoKnAgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG9wdGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitlbnVtIHsKKyAgICBPUFRfTE9OR09QVF9PTkxZID0gNTEyLAorICAgIE9QVF9BRExFUjMyLAorICAgIE9QVF9DQUxHQVJZX0NPUlBVUywKKyAgICBPUFRfQ0xFQVJfV1JLTUVNLAorICAgIE9QVF9DUkMzMiwKKyAgICBPUFRfRElDVCwKKyAgICBPUFRfRFVNUCwKKyAgICBPUFRfRVhFQ1VUSU9OX1RJTUUsCisgICAgT1BUX01BWF9EQVRBX0xFTiwKKyAgICBPUFRfTUFYX0RJQ1RfTEVOLAorICAgIE9QVF9TSUxFU0lBX0NPUlBVUywKKyAgICBPUFRfVUNMT0NLLAorI2lmIGRlZmluZWQoTFpPVEVTVF9VU0VfRFlOTE9BRCkKKyMgIGluY2x1ZGUgImR5bmxvYWQvb19lbnVtLmNoIgorI2VuZGlmCisgICAgT1BUX1VOVVNFRAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCBtZnhfb3B0aW9uIGxvbmdvcHRzW10gPQoreworIC8qIHsgbmFtZSAgaGFzX2FyZyAgKmZsYWcgIHZhbCB9ICovCisgICAgeyJoZWxwIiwgICAgICAgICAgICAgMCwgMCwgJ2gnKzI1Nn0sIC8qIGdpdmUgaGVscCAqLworICAgIHsibGljZW5zZSIsICAgICAgICAgIDAsIDAsICdMJ30sICAgICAvKiBkaXNwbGF5IHNvZnR3YXJlIGxpY2Vuc2UgKi8KKyAgICB7InF1aWV0IiwgICAgICAgICAgICAwLCAwLCAncSd9LCAgICAgLyogcXVpZXQgbW9kZSAqLworICAgIHsidmVyYm9zZSIsICAgICAgICAgIDAsIDAsICd2J30sICAgICAvKiB2ZXJib3NlIG1vZGUgKi8KKyAgICB7InZlcnNpb24iLCAgICAgICAgICAwLCAwLCAnVicrMjU2fSwgLyogZGlzcGxheSB2ZXJzaW9uIG51bWJlciAqLworCisgICAgeyJhZGxlcjMyIiwgICAgICAgICAgMCwgMCwgT1BUX0FETEVSMzJ9LAorICAgIHsiY2FsZ2FyeS1jb3JwdXMiLCAgIDEsIDAsIE9QVF9DQUxHQVJZX0NPUlBVU30sCisgICAgeyJjbGVhci13cmttZW0iLCAgICAgMCwgMCwgT1BUX0NMRUFSX1dSS01FTX0sCisgICAgeyJjbG9jayIsICAgICAgICAgICAgMSwgMCwgT1BUX1VDTE9DS30sCisgICAgeyJjb3JwdXMiLCAgICAgICAgICAgMSwgMCwgT1BUX0NBTEdBUllfQ09SUFVTfSwKKyAgICB7ImNyYzMyIiwgICAgICAgICAgICAwLCAwLCBPUFRfQ1JDMzJ9LAorICAgIHsiZGljdCIsICAgICAgICAgICAgIDEsIDAsIE9QVF9ESUNUfSwKKyAgICB7ImR1bXAtY29tcHJlc3NlZCIsICAxLCAwLCBPUFRfRFVNUH0sCisgICAgeyJleGVjdXRpb24tdGltZSIsICAgMCwgMCwgT1BUX0VYRUNVVElPTl9USU1FfSwKKyAgICB7Im1heC1kYXRhLWxlbmd0aCIsICAxLCAwLCBPUFRfTUFYX0RBVEFfTEVOfSwKKyAgICB7Im1heC1kaWN0LWxlbmd0aCIsICAxLCAwLCBPUFRfTUFYX0RJQ1RfTEVOfSwKKyAgICB7InNpbGVzaWEtY29ycHVzIiwgICAxLCAwLCBPUFRfU0lMRVNJQV9DT1JQVVN9LAorICAgIHsidWNsb2NrIiwgICAgICAgICAgIDEsIDAsIE9QVF9VQ0xPQ0t9LAorICAgIHsibWV0aG9kcyIsICAgICAgICAgIDEsIDAsICdtJ30sCisgICAgeyJ0b3RhbHMiLCAgICAgICAgICAgMCwgMCwgJ1QnfSwKKyNpZiBkZWZpbmVkKExaT1RFU1RfVVNFX0RZTkxPQUQpCisjICBpbmNsdWRlICJkeW5sb2FkL29fbG9uZ29wdHMuY2giCisjZW5kaWYKKworICAgIHsgMCwgMCwgMCwgMCB9Cit9OworCisKK3N0YXRpYyBpbnQgZG9fb3B0aW9uKGludCBvcHRjKQoreworICAgIHN3aXRjaCAob3B0YykKKyAgICB7CisgICAgY2FzZSAnQSc6CisgICAgICAgIG9wdF91c2VfYXNtX2RlY29tcHJlc3NvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2InOgorICAgICAgICBvcHRfYmxvY2tfc2l6ZSA9IDA7IC8qIHNldCB0byBvcHRfbWF4X2RhdGFfbGVuIGxhdGVyICovCisgICAgICAgIGlmIChtZnhfb3B0YXJnKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW1meF9vcHRhcmcgfHwgIWlzX2RpZ2l0KG1meF9vcHRhcmdbMF0pKQorICAgICAgICAgICAgICAgIHJldHVybiBvcHRjOworICAgICAgICAgICAgb3B0X2Jsb2NrX3NpemUgPSBhdG9sKG1meF9vcHRhcmcpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ2MnOgorICAgIGNhc2UgJ0MnOgorICAgICAgICBpZiAoIW1meF9vcHRhcmcgfHwgIWlzX2RpZ2l0KG1meF9vcHRhcmdbMF0pKQorICAgICAgICAgICAgcmV0dXJuIG9wdGM7CisgICAgICAgIG9wdF9jX2xvb3BzID0gYXRvbChtZnhfb3B0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnZCc6CisgICAgY2FzZSAnRCc6CisgICAgICAgIGlmICghbWZ4X29wdGFyZyB8fCAhaXNfZGlnaXQobWZ4X29wdGFyZ1swXSkpCisgICAgICAgICAgICByZXR1cm4gb3B0YzsKKyAgICAgICAgb3B0X2RfbG9vcHMgPSBhdG9sKG1meF9vcHRhcmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdGJzoKKyAgICAgICAgb3B0X3VzZV9hc21fZmFzdF9kZWNvbXByZXNzb3IgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdoJzoKKyAgICBjYXNlICdIJzoKKyAgICBjYXNlICc/JzoKKyAgICBjYXNlICdoJysyNTY6CisgICAgICAgIHVzYWdlKHByb2duYW1lLEVYSVRfT0ssMCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0wnOgorICAgICAgICBsaWNlbnNlKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ20nOgorICAgICAgICBwYXJzZV9tZXRob2RzKG1meF9vcHRhcmcpOworICAgICAgICBicmVhazsKKyAgICBjYXNlICduJzoKKyAgICAgICAgaWYgKCFtZnhfb3B0YXJnIHx8ICFpc19kaWdpdChtZnhfb3B0YXJnWzBdKSkKKyAgICAgICAgICAgIHJldHVybiBvcHRjOworICAgICAgICBvcHRfY19sb29wcyA9IG9wdF9kX2xvb3BzID0gYXRvbChtZnhfb3B0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnTyc6CisgICAgICAgIG9wdF9vcHRpbWl6ZV9jb21wcmVzc2VkX2RhdGEgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdxJzoKKyAgICAgICAgb3B0X3ZlcmJvc2UgLT0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAnUSc6CisgICAgICAgIG9wdF92ZXJib3NlID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAncyc6CisgICAgY2FzZSBPUFRfQ0FMR0FSWV9DT1JQVVM6CisgICAgICAgIGlmICghbWZ4X29wdGFyZyB8fCAhbWZ4X29wdGFyZ1swXSkKKyAgICAgICAgICAgIHJldHVybiBvcHRjOworICAgICAgICBvcHRfY29ycHVzX3BhdGggPSBtZnhfb3B0YXJnOworICAgICAgICBvcHRfY29ycHVzID0gY2FsZ2FyeV9jb3JwdXM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX1NJTEVTSUFfQ09SUFVTOgorICAgICAgICBpZiAoIW1meF9vcHRhcmcgfHwgIW1meF9vcHRhcmdbMF0pCisgICAgICAgICAgICByZXR1cm4gb3B0YzsKKyAgICAgICAgb3B0X2NvcnB1c19wYXRoID0gbWZ4X29wdGFyZzsKKyAgICAgICAgb3B0X2NvcnB1cyA9IHNpbGVzaWFfY29ycHVzOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdTJzoKKyAgICAgICAgb3B0X3VzZV9zYWZlX2RlY29tcHJlc3NvciA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ1QnOgorICAgICAgICBvcHRfdG90YWxzICs9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ3YnOgorICAgICAgICBvcHRfdmVyYm9zZSArPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlICdWJzoKKyAgICBjYXNlICdWJysyNTY6CisgICAgICAgIGV4aXQoRVhJVF9PSyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgJ0AnOgorICAgICAgICBvcHRfcmVhZF9mcm9tX3N0ZGluID0gMTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOiBjYXNlICc0JzogY2FzZSAnNSc6CisgICAgY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgICAgICAgIC8qIHRoaXMgaXMgYSBkaXJ0eSBoYWNrLi4uICovCisgICAgICAgIHBhcnNlX21ldGhvZHMobmV4dGNoYXItMSk7CisgICAgICAgIGlmIChuZXh0Y2hhclswXSkKKyAgICAgICAgeworICAgICAgICAgICAgbmV4dGNoYXIgPSBOVUxMOworICAgICAgICAgICAgbWZ4X29wdGluZCsrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBPUFRfQURMRVIzMjoKKyAgICAgICAgb3B0X2NvbXB1dGVfYWRsZXIzMiA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX0NMRUFSX1dSS01FTToKKyAgICAgICAgb3B0X2NsZWFyX3dya21lbSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX0NSQzMyOgorICAgICAgICBvcHRfY29tcHV0ZV9jcmMzMiA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX0RJQ1Q6CisgICAgICAgIG9wdF9kaWN0ID0gMTsKKyAgICAgICAgb3B0X2RpY3Rpb25hcnlfZmlsZSA9IG1meF9vcHRhcmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX0VYRUNVVElPTl9USU1FOgorICAgICAgICBvcHRfZXhlY3V0aW9uX3RpbWUgPSAxOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9QVF9EVU1QOgorICAgICAgICBvcHRfZHVtcF9jb21wcmVzc2VkX2RhdGEgPSBtZnhfb3B0YXJnOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE9QVF9NQVhfREFUQV9MRU46CisgICAgICAgIGlmICghbWZ4X29wdGFyZyB8fCAhaXNfZGlnaXQobWZ4X29wdGFyZ1swXSkpCisgICAgICAgICAgICByZXR1cm4gb3B0YzsKKyAgICAgICAgb3B0X21heF9kYXRhX2xlbiA9IGF0b2wobWZ4X29wdGFyZyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgT1BUX01BWF9ESUNUX0xFTjoKKyAgICAgICAgaWYgKCFtZnhfb3B0YXJnIHx8ICFpc19kaWdpdChtZnhfb3B0YXJnWzBdKSkKKyAgICAgICAgICAgIHJldHVybiBvcHRjOworICAgICAgICBvcHRfbWF4X2RpY3RfbGVuID0gYXRvbChtZnhfb3B0YXJnKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBPUFRfVUNMT0NLOgorICAgICAgICBpZiAoIW1meF9vcHRhcmcgfHwgIWlzX2RpZ2l0KG1meF9vcHRhcmdbMF0pKQorICAgICAgICAgICAgcmV0dXJuIG9wdGM7CisgICAgICAgIG9wdF91Y2xvY2sgPSBhdG9pKG1meF9vcHRhcmcpOworI2lmIGRlZmluZWQoX19BQ0NMSUJfUENMT0NLX0NIX0lOQ0xVREVEKQorICAgICAgICBpZiAob3B0X3VjbG9jayA+IDApCisgICAgICAgICAgICB1Y2gubW9kZSA9IG9wdF91Y2xvY2s7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisKKyNpZiBkZWZpbmVkKExaT1RFU1RfVVNFX0RZTkxPQUQpCisjICBpbmNsdWRlICJkeW5sb2FkL29fZG9fb3B0aW9uLmNoIgorI2VuZGlmCisKKyAgICBjYXNlICdcMCc6CisgICAgICAgIHJldHVybiAtMTsKKyAgICBjYXNlICc6JzoKKyAgICAgICAgcmV0dXJuIC0yOworICAgIGRlZmF1bHQ6CisgICAgICAgIGZwcmludGYoc3RkZXJyLCIlczogaW50ZXJuYWwgZXJyb3IgaW4gZ2V0b3B0ICglZClcbiIscHJvZ25hbWUsb3B0Yyk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBnZXRfb3B0aW9ucyhpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9wdGM7CisKKyAgICBtZnhfb3B0aW5kID0gMDsKKyAgICBtZnhfb3B0ZXJyID0gMTsKKyAgICB3aGlsZSAoKG9wdGMgPSBtZnhfZ2V0b3B0X2xvbmcgKGFyZ2MsIGFyZ3YsCisgICAgICAgICAgICAgICAgICAgICAgIkFiOjpjOkM6ZDpEOkZoSExtOjpuOk9xUXM6U1R2VkAxMjM0NTY3ODkiCisjaWYgZGVmaW5lZChMWk9URVNUX1VTRV9EWU5MT0FEKQorIyAgaW5jbHVkZSAiZHlubG9hZC9vX3Nob3J0b3B0cy5jaCIKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICwgbG9uZ29wdHMsIChpbnQgKikwKSkgPj0gMCkKKyAgICB7CisgICAgICAgIGlmIChkb19vcHRpb24ob3B0YykgIT0gMCkKKyAgICAgICAgICAgIGV4aXQoRVhJVF9VU0FHRSk7CisgICAgfQorCisgICAgcmV0dXJuIG1meF9vcHRpbmQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG1haW4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgX19sem9fY2RlY2xfbWFpbiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IHIgPSBFWElUX09LOworICAgIGludCBpLCBpaTsKKyAgICBpbnQgbTsKKyAgICB0aW1lX3QgdF90b3RhbDsKKyAgICBjb25zdCBjaGFyICpzOworCisgICAgbHpvX3dpbGRhcmd2KCZhcmdjLCAmYXJndik7CisgICAgbHpvX3VjbG9ja19vcGVuKCZ1Y2gpOworCisgICAgcHJvZ25hbWUgPSBhcmd2WzBdOworICAgIGZvciAocyA9IHByb2duYW1lOyAqczsgcysrKQorICAgICAgICBpZiAoKCpzID09ICcvJyB8fCAqcyA9PSAnXFwnKSAmJiBzWzFdKQorICAgICAgICAgICAgcHJvZ25hbWUgPSBzICsgMTsKKworI2lmIGRlZmluZWQoX19MWk9fUFJPRkVTU0lPTkFMX18pCisgICAgcHJpbnRmKCJcbkxaTyBQcm9mZXNzaW9uYWwgcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSAodiVzLCAlcykuXG4iLAorICAgICAgICAgICBsem9fdmVyc2lvbl9zdHJpbmcoKSwgbHpvX3ZlcnNpb25fZGF0ZSgpKTsKKyAgICBwcmludGYoIkNvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXJcbkFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiIpOworI2VsaWYgZGVmaW5lZChMWk9URVNUX1VTRV9EWU5MT0FEKQorIyAgaW5jbHVkZSAiZHlubG9hZC9pbml0LmNoIgorI2Vsc2UKKyAgICBwcmludGYoIlxuTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkgKHYlcywgJXMpLlxuIiwKKyAgICAgICAgICAgbHpvX3ZlcnNpb25fc3RyaW5nKCksIGx6b192ZXJzaW9uX2RhdGUoKSk7CisgICAgcHJpbnRmKCJDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyXG5BbGwgUmlnaHRzIFJlc2VydmVkLlxuXG4iKTsKKyNlbmRpZgorCisKKy8qCisgKiBTdGVwIDE6IGluaXRpYWxpemUgdGhlIExaTyBsaWJyYXJ5CisgKi8KKworICAgIGlmIChsem9faW5pdCgpICE9IExaT19FX09LKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJpbnRlcm5hbCBlcnJvciAtIGx6b19pbml0KCkgZmFpbGVkICEhIVxuIik7CisgICAgICAgIHByaW50ZigiKHRoaXMgdXN1YWxseSBpbmRpY2F0ZXMgYSBjb21waWxlciBidWcgLSB0cnkgcmVjb21waWxpbmdcbndpdGhvdXQgb3B0aW1pemF0aW9ucywgYW5kIGVuYWJsZSBgLURMWk9fREVCVUcnIGZvciBkaWFnbm9zdGljcylcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworCisvKgorICogU3RlcCAyOiBzZXR1cCBkZWZhdWx0IG9wdGlvbnMKKyAqLworCisgICAgb3B0X21heF9kYXRhX2xlbiA9IDY0ICogMTAyNEwgKiAxMDI0TDsKKyAgICBvcHRfYmxvY2tfc2l6ZSA9IDI1NiAqIDEwMjRMOworCisjaWYgZGVmaW5lZChMWk9fQVJDSF9JMDg2KSAmJiBkZWZpbmVkKEFDQ19NTV9BSFNISUZUKQorIyAgaWYgMSAmJiBkZWZpbmVkKExaT19BUkNIX0kwODZQTSkgJiYgZGVmaW5lZChCTFgyODYpCisgICAgb3B0X21heF9kYXRhX2xlbiA9IDMyICogMTAyNEwgKiAxMDI0TDsKKyMgIGVsc2UKKyAgICBvcHRfbWF4X2RhdGFfbGVuID0gMTQgKiAxMDI0TCAqIDEwMjRMOworIyAgZW5kaWYKKyAgICAvKiByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgYW5jaWVudCAxNi1iaXQgRE9TIDY0MGtCIHJlYWwtbW9kZSAqLworICAgIGlmIChBQ0NfTU1fQUhTSElGVCAhPSAzKSB7CisgICAgICAgIG9wdF9tYXhfZGF0YV9sZW4gPSAxNiAqIDEwMjRMOworICAgIH0KKyNlbGlmIGRlZmluZWQoTFpPX09TX1RPUykKKyAgICAvKiByZWR1Y2UgbWVtb3J5IHJlcXVpcmVtZW50cyBmb3IgMTQgTUIgbWFjaGluZXMgKi8KKyAgICBvcHRfbWF4X2RhdGFfbGVuID0gOCAqIDEwMjRMICogMTAyNEw7CisjZW5kaWYKKworCisKKy8qCisgKiBTdGVwIDM6IHBhcnNlIG9wdGlvbnMKKyAqLworCisgICAgaWYgKGFyZ2MgPCAyKQorICAgICAgICB1c2FnZShwcm9nbmFtZSwtMSwwKTsKKyAgICBpID0gZ2V0X29wdGlvbnMoYXJnYyxhcmd2KTsKKworICAgIGlmIChtZXRob2RzX24gPT0gMCkKKyAgICAgICAgYWRkX21ldGhvZChkZWZhdWx0X21ldGhvZCk7CisgICAgaWYgKG1ldGhvZHNfbiA+IDEgJiYgb3B0X3JlYWRfZnJvbV9zdGRpbikKKyAgICB7CisgICAgICAgIHByaW50ZigiJXM6IGNhbm5vdCB1c2UgbXVsdGlwbGUgbWV0aG9kcyBhbmQgJy1AJ1xuIiwgcHJvZ25hbWUpOworICAgICAgICBleGl0KEVYSVRfVVNBR0UpOworICAgIH0KKworICAgIGlmIChvcHRfYmxvY2tfc2l6ZSA9PSAwKQorICAgICAgICBvcHRfYmxvY2tfc2l6ZSA9IG9wdF9tYXhfZGF0YV9sZW47CisgICAgaWYgKG9wdF9ibG9ja19zaXplID4gb3B0X21heF9kYXRhX2xlbikKKyAgICAgICAgb3B0X2Jsb2NrX3NpemUgPSBvcHRfbWF4X2RhdGFfbGVuOworCisgICAgaWYgKG9wdF9jX2xvb3BzIDwgMSkKKyAgICAgICAgb3B0X2NfbG9vcHMgPSAxOworICAgIGlmIChvcHRfZF9sb29wcyA8IDEpCisgICAgICAgIG9wdF9kX2xvb3BzID0gMTsKKworCisvKgorICogU3RlcCA0OiBzdGFydCB3b3JrCisgKi8KKworICAgIHdya21lbS5sZW4gPSAwOworICAgIGZvciAoaWkgPSAwOyBpaSA8IG1ldGhvZHNfbjsgaWkrKykgeworICAgICAgICBjb25zdCBjb21wcmVzc190ICpjID0gZmluZF9tZXRob2RfYnlfaWQobWV0aG9kc1tpaV0pOworICAgICAgICBhc3NlcnQoYyAhPSBOVUxMKTsKKyAgICAgICAgaWYgKGMtPm1lbV9jb21wcmVzcyA+IHdya21lbS5sZW4pCisgICAgICAgICAgICB3cmttZW0ubGVuID0gYy0+bWVtX2NvbXByZXNzOworICAgICAgICBpZiAoYy0+bWVtX2RlY29tcHJlc3MgPiB3cmttZW0ubGVuKQorICAgICAgICAgICAgd3JrbWVtLmxlbiA9IGMtPm1lbV9kZWNvbXByZXNzOworICAgIH0KKworICAgIG1iX2FsbG9jKCZ3cmttZW0sIHdya21lbS5sZW4pOworCisjaWYgIWRlZmluZWQoX19MWk9fQ0hFQ0tFUikKKyAgICBtYl9hbGxvY19leHRyYSgmYmxvY2sxLCBvcHRfYmxvY2tfc2l6ZSArIGdldF9tYXhfY29tcHJlc3Npb25fZXhwYW5zaW9uKC0xLCBvcHRfYmxvY2tfc2l6ZSksIDE2LCAxNik7CisgICAgbWJfYWxsb2NfZXh0cmEoJmJsb2NrMiwgb3B0X2Jsb2NrX3NpemUgKyBnZXRfbWF4X2RlY29tcHJlc3Npb25fb3ZlcnJ1bigtMSwgb3B0X2Jsb2NrX3NpemUpLCAxNiwgMTYpOworI2VuZGlmCisKKyAgICBpZiAob3B0X2RpY3QpCisgICAgeworICAgICAgICBvcHRfb3B0aW1pemVfY29tcHJlc3NlZF9kYXRhID0gMDsKKyAgICAgICAgZGljdF9hbGxvYyhvcHRfbWF4X2RpY3RfbGVuKTsKKyAgICAgICAgaWYgKG9wdF9kaWN0aW9uYXJ5X2ZpbGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpY3RfbG9hZChvcHRfZGljdGlvbmFyeV9maWxlKTsKKyAgICAgICAgICAgIGlmIChkaWN0LmxlbiA+IDApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJVc2luZyBkaWN0aW9uYXJ5ICclcycsICVsZCBieXRlcywgSUQgMHglMDhseC5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBvcHRfZGljdGlvbmFyeV9maWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGRpY3QubGVuLCAobG9uZykgZGljdC5hZGxlcik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGRpY3QubGVuID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpY3Rfc2V0X2RlZmF1bHQoKTsKKyAgICAgICAgICAgIHByaW50ZigiVXNpbmcgZGVmYXVsdCBkaWN0aW9uYXJ5LCAlbGQgYnl0ZXMsIElEIDB4JTA4bHguXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZykgZGljdC5sZW4sIChsb25nKSBkaWN0LmFkbGVyKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHRfdG90YWwgPSB0aW1lKE5VTEwpOworICAgIGlpID0gaTsKKyAgICBmb3IgKG0gPSAwOyBtIDwgbWV0aG9kc19uICYmIHIgPT0gRVhJVF9PSzsgbSsrKQorICAgIHsKKyAgICAgICAgaW50IG1ldGhvZCA9IG1ldGhvZHNbbV07CisKKyAgICAgICAgaSA9IGlpOworICAgICAgICBpZiAoaSA+PSBhcmdjICYmIG9wdF9jb3JwdXNfcGF0aCA9PSBOVUxMICYmICFvcHRfcmVhZF9mcm9tX3N0ZGluKQorICAgICAgICAgICAgdXNhZ2UocHJvZ25hbWUsLTEsMCk7CisgICAgICAgIGlmIChtID09IDAgJiYgb3B0X3ZlcmJvc2UgPj0gMSkKKyAgICAgICAgICAgIHByaW50ZigiJWx1IGJsb2NrLXNpemVcblxuIiwgKGxvbmcpIG9wdF9ibG9ja19zaXplKTsKKworICAgICAgICBhc3NlcnQoZmluZF9tZXRob2RfYnlfaWQobWV0aG9kKSAhPSBOVUxMKTsKKworICAgICAgICBpZiAob3B0X2NvcnB1c19wYXRoICE9IE5VTEwpCisgICAgICAgICAgICByID0gZG9fY29ycHVzKG9wdF9jb3JwdXMsIG1ldGhvZCwgb3B0X2NvcnB1c19wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRfY19sb29wcywgb3B0X2RfbG9vcHMpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGZvciAoIDsgaSA8IGFyZ2MgJiYgciA9PSBFWElUX09LOyBpKyspCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgciA9IGRvX2ZpbGUobWV0aG9kLGFyZ3ZbaV0sb3B0X2NfbG9vcHMsb3B0X2RfbG9vcHMsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAociA9PSBFWElUX0ZJTEUpICAgICAvKiBpZ25vcmUgZmlsZSBlcnJvcnMgKi8KKyAgICAgICAgICAgICAgICAgICAgciA9IEVYSVRfT0s7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAob3B0X3JlYWRfZnJvbV9zdGRpbikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls1MTJdLCAqcDsKKworICAgICAgICAgICAgICAgIHdoaWxlIChyID09IEVYSVRfT0sgJiYgZmdldHMoYnVmLHNpemVvZihidWYpLTEsc3RkaW4pICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBidWZbc2l6ZW9mKGJ1ZiktMV0gPSAwOworICAgICAgICAgICAgICAgICAgICBwID0gYnVmICsgc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChwID4gYnVmICYmIGlzX3NwYWNlKHBbLTFdKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLS1wID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcCA9IGJ1ZjsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCpwICYmIGlzX3NwYWNlKCpwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHArKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCpwKQorICAgICAgICAgICAgICAgICAgICAgICAgciA9IGRvX2ZpbGUobWV0aG9kLHAsb3B0X2NfbG9vcHMsb3B0X2RfbG9vcHMsTlVMTCxOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHIgPT0gRVhJVF9GSUxFKSAgICAgLyogaWdub3JlIGZpbGUgZXJyb3JzICovCisgICAgICAgICAgICAgICAgICAgICAgICByID0gRVhJVF9PSzsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgb3B0X3JlYWRfZnJvbV9zdGRpbiA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyNpZiBkZWZpbmVkKExaT1RFU1RfVVNFX0RZTkxPQUQpCisjICBpbmNsdWRlICJkeW5sb2FkL2V4aXQuY2giCisjZW5kaWYKKyAgICB0X3RvdGFsID0gdGltZShOVUxMKSAtIHRfdG90YWw7CisKKyAgICBpZiAob3B0X3RvdGFscykKKyAgICAgICAgcHJpbnRfdG90YWxzKCk7CisgICAgaWYgKG9wdF9leGVjdXRpb25fdGltZSB8fCAobWV0aG9kc19uID4gMSAmJiBvcHRfdmVyYm9zZSA+PSAxKSkKKyAgICAgICAgcHJpbnRmKCJcbiVzOiBleGVjdXRpb24gdGltZTogJWx1IHNlY29uZHNcbiIsIHByb2duYW1lLCAobG9uZykgdF90b3RhbCk7CisgICAgaWYgKHIgIT0gRVhJVF9PSykKKyAgICAgICAgcHJpbnRmKCJcbiVzOiBleGl0IGNvZGU6ICVkXG4iLCBwcm9nbmFtZSwgcik7CisKKyAgICBsem9fdWNsb2NrX2Nsb3NlKCZ1Y2gpOworICAgIHJldHVybiByOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9sem90ZXN0L215Z2V0b3B0LmNoIGIvbHpvLTIuMDMvbHpvdGVzdC9teWdldG9wdC5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjRkMjgyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbHpvdGVzdC9teWdldG9wdC5jaApAQCAtMCwwICsxLDY5OCBAQAorLyogR2V0b3B0IGZvciBHTlUuCisgICBOT1RFOiBnZXRvcHQgaXMgbm93IHBhcnQgb2YgdGhlIEMgbGlicmFyeSwgc28gaWYgeW91IGRvbid0IGtub3cgd2hhdAorICAgIktlZXAgdGhpcyBmaWxlIG5hbWUtc3BhY2UgY2xlYW4iIG1lYW5zLCB0YWxrIHRvIHJvbGFuZEBnbnUuYWkubWl0LmVkdQorICAgYmVmb3JlIGNoYW5naW5nIGl0IQorCisgICBDb3B5cmlnaHQgKEMpIDE5ODcsIDg4LCA4OSwgOTAsIDkxLCA5MiwgMTk5MworICAgICAgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKworICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pIGFueQorICAgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICBGb3VuZGF0aW9uLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4gICovCisKKworI2lmbmRlZiBFT0YKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKworI3VuZGVmIFBST0dOQU1FCisjZGVmaW5lIFBST0dOQU1FKHgpICAgICAoeCkKKworCisvKiBJZiBHRVRPUFRfQ09NUEFUIGlzIGRlZmluZWQsIGArJyBhcyB3ZWxsIGFzIGAtLScgY2FuIGludHJvZHVjZSBhCisgICBsb25nLW5hbWVkIG9wdGlvbi4gIEJlY2F1c2UgdGhpcyBpcyBub3QgUE9TSVguMiBjb21wbGlhbnQsIGl0IGlzCisgICBiZWluZyBwaGFzZWQgb3V0LiAgKi8KKy8qICNkZWZpbmUgR0VUT1BUX0NPTVBBVCAqLworI3VuZGVmIEdFVE9QVF9DT01QQVQKKworLyogVGhpcyB2ZXJzaW9uIG9mIGBnZXRvcHQnIGFwcGVhcnMgdG8gdGhlIGNhbGxlciBsaWtlIHN0YW5kYXJkIFVuaXggYGdldG9wdCcKKyAgIGJ1dCBpdCBiZWhhdmVzIGRpZmZlcmVudGx5IGZvciB0aGUgdXNlciwgc2luY2UgaXQgYWxsb3dzIHRoZSB1c2VyCisgICB0byBpbnRlcnNwZXJzZSB0aGUgb3B0aW9ucyB3aXRoIHRoZSBvdGhlciBhcmd1bWVudHMuCisKKyAgIEFzIGBnZXRvcHQnIHdvcmtzLCBpdCBwZXJtdXRlcyB0aGUgZWxlbWVudHMgb2YgQVJHViBzbyB0aGF0LAorICAgd2hlbiBpdCBpcyBkb25lLCBhbGwgdGhlIG9wdGlvbnMgcHJlY2VkZSBldmVyeXRoaW5nIGVsc2UuICBUaHVzCisgICBhbGwgYXBwbGljYXRpb24gcHJvZ3JhbXMgYXJlIGV4dGVuZGVkIHRvIGhhbmRsZSBmbGV4aWJsZSBhcmd1bWVudCBvcmRlci4KKworICAgU2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNUIGRpc2FibGVzIHBlcm11dGF0aW9uLgorICAgVGhlbiB0aGUgYmVoYXZpb3IgaXMgY29tcGxldGVseSBzdGFuZGFyZC4KKworICAgR05VIGFwcGxpY2F0aW9uIHByb2dyYW1zIGNhbiB1c2UgYSB0aGlyZCBhbHRlcm5hdGl2ZSBtb2RlIGluIHdoaWNoCisgICB0aGV5IGNhbiBkaXN0aW5ndWlzaCB0aGUgcmVsYXRpdmUgb3JkZXIgb2Ygb3B0aW9ucyBhbmQgb3RoZXIgYXJndW1lbnRzLiAgKi8KKworI2luY2x1ZGUgIm15Z2V0b3B0LmgiCisjZGVmaW5lIG9wdGlvbiAgICAgICAgICAgICAgICAgIG1meF9vcHRpb24KKyNkZWZpbmUgb3B0YXJnICAgICAgICAgICAgICAgICAgbWZ4X29wdGFyZworI2RlZmluZSBvcHRpbmQgICAgICAgICAgICAgICAgICBtZnhfb3B0aW5kCisjZGVmaW5lIG9wdGVyciAgICAgICAgICAgICAgICAgIG1meF9vcHRlcnIKKyNkZWZpbmUgb3B0b3B0ICAgICAgICAgICAgICAgICAgbWZ4X29wdG9wdAorI3VuZGVmIEJBRF9PUFRJT04KKworLyogRm9yIGNvbW11bmljYXRpb24gZnJvbSBgZ2V0b3B0JyB0byB0aGUgY2FsbGVyLgorICAgV2hlbiBgZ2V0b3B0JyBmaW5kcyBhbiBvcHRpb24gdGhhdCB0YWtlcyBhbiBhcmd1bWVudCwKKyAgIHRoZSBhcmd1bWVudCB2YWx1ZSBpcyByZXR1cm5lZCBoZXJlLgorICAgQWxzbywgd2hlbiBgb3JkZXJpbmcnIGlzIFJFVFVSTl9JTl9PUkRFUiwKKyAgIGVhY2ggbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnQgaXMgcmV0dXJuZWQgaGVyZS4gICovCisKK2NoYXIgKm9wdGFyZyA9IE5VTEw7CisKKy8qIEluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgZWxlbWVudCB0byBiZSBzY2FubmVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHRvIGFuZCBmcm9tIHRoZSBjYWxsZXIKKyAgIGFuZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYGdldG9wdCcuCisKKyAgIE9uIGVudHJ5IHRvIGBnZXRvcHQnLCB6ZXJvIG1lYW5zIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGw7IGluaXRpYWxpemUuCisKKyAgIFdoZW4gYGdldG9wdCcgcmV0dXJucyBFT0YsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKKy8qIFhYWCAxMDAzLjIgc2F5cyB0aGlzIG11c3QgYmUgMSBiZWZvcmUgYW55IGNhbGwuICAqLworaW50IG9wdGluZCA9IDA7CisKKy8qIFRoZSBuZXh0IGNoYXIgdG8gYmUgc2Nhbm5lZCBpbiB0aGUgb3B0aW9uLWVsZW1lbnQKKyAgIGluIHdoaWNoIHRoZSBsYXN0IG9wdGlvbiBjaGFyYWN0ZXIgd2UgcmV0dXJuZWQgd2FzIGZvdW5kLgorICAgVGhpcyBhbGxvd3MgdXMgdG8gcGljayB1cCB0aGUgc2NhbiB3aGVyZSB3ZSBsZWZ0IG9mZi4KKworICAgSWYgdGhpcyBpcyB6ZXJvLCBvciBhIG51bGwgc3RyaW5nLCBpdCBtZWFucyByZXN1bWUgdGhlIHNjYW4KKyAgIGJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBBUkdWLWVsZW1lbnQuICAqLworCitzdGF0aWMgY2hhciAqbmV4dGNoYXI7CisKKy8qIENhbGxlcnMgc3RvcmUgemVybyBoZXJlIHRvIGluaGliaXQgdGhlIGVycm9yIG1lc3NhZ2UKKyAgIGZvciB1bnJlY29nbml6ZWQgb3B0aW9ucy4gICovCisKK2ludCBvcHRlcnIgPSAxOworCisvKiBTZXQgdG8gYW4gb3B0aW9uIGNoYXJhY3RlciB3aGljaCB3YXMgdW5yZWNvZ25pemVkLgorICAgVGhpcyBtdXN0IGJlIGluaXRpYWxpemVkIG9uIHNvbWUgc3lzdGVtcyB0byBhdm9pZCBsaW5raW5nIGluIHRoZQorICAgc3lzdGVtJ3Mgb3duIGdldG9wdCBpbXBsZW1lbnRhdGlvbi4gICovCisKKyNkZWZpbmUgQkFEX09QVElPTiAnXDAnCitpbnQgb3B0b3B0ID0gQkFEX09QVElPTjsKKworLyogRGVzY3JpYmUgaG93IHRvIGRlYWwgd2l0aCBvcHRpb25zIHRoYXQgZm9sbG93IG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cy4KKworICAgSWYgdGhlIGNhbGxlciBkaWQgbm90IHNwZWNpZnkgYW55dGhpbmcsCisgICB0aGUgZGVmYXVsdCBpcyBSRVFVSVJFX09SREVSIGlmIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQorICAgUE9TSVhMWV9DT1JSRUNUIGlzIGRlZmluZWQsIFBFUk1VVEUgb3RoZXJ3aXNlLgorCisgICBSRVFVSVJFX09SREVSIG1lYW5zIGRvbid0IHJlY29nbml6ZSB0aGVtIGFzIG9wdGlvbnM7CisgICBzdG9wIG9wdGlvbiBwcm9jZXNzaW5nIHdoZW4gdGhlIGZpcnN0IG5vbi1vcHRpb24gaXMgc2Vlbi4KKyAgIFRoaXMgaXMgd2hhdCBVbml4IGRvZXMuCisgICBUaGlzIG1vZGUgb2Ygb3BlcmF0aW9uIGlzIHNlbGVjdGVkIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudAorICAgdmFyaWFibGUgUE9TSVhMWV9DT1JSRUNULCBvciB1c2luZyBgKycgYXMgdGhlIGZpcnN0IGNoYXJhY3RlcgorICAgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMuCisKKyAgIFBFUk1VVEUgaXMgdGhlIGRlZmF1bHQuICBXZSBwZXJtdXRlIHRoZSBjb250ZW50cyBvZiBBUkdWIGFzIHdlIHNjYW4sCisgICBzbyB0aGF0IGV2ZW50dWFsbHkgYWxsIHRoZSBub24tb3B0aW9ucyBhcmUgYXQgdGhlIGVuZC4gIFRoaXMgYWxsb3dzIG9wdGlvbnMKKyAgIHRvIGJlIGdpdmVuIGluIGFueSBvcmRlciwgZXZlbiB3aXRoIHByb2dyYW1zIHRoYXQgd2VyZSBub3Qgd3JpdHRlbiB0bworICAgZXhwZWN0IHRoaXMuCisKKyAgIFJFVFVSTl9JTl9PUkRFUiBpcyBhbiBvcHRpb24gYXZhaWxhYmxlIHRvIHByb2dyYW1zIHRoYXQgd2VyZSB3cml0dGVuCisgICB0byBleHBlY3Qgb3B0aW9ucyBhbmQgb3RoZXIgQVJHVi1lbGVtZW50cyBpbiBhbnkgb3JkZXIgYW5kIHRoYXQgY2FyZSBhYm91dAorICAgdGhlIG9yZGVyaW5nIG9mIHRoZSB0d28uICBXZSBkZXNjcmliZSBlYWNoIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50CisgICBhcyBpZiBpdCB3ZXJlIHRoZSBhcmd1bWVudCBvZiBhbiBvcHRpb24gd2l0aCBjaGFyYWN0ZXIgY29kZSAxLgorICAgVXNpbmcgYC0nIGFzIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIGxpc3Qgb2Ygb3B0aW9uIGNoYXJhY3RlcnMKKyAgIHNlbGVjdHMgdGhpcyBtb2RlIG9mIG9wZXJhdGlvbi4KKworICAgVGhlIHNwZWNpYWwgYXJndW1lbnQgYC0tJyBmb3JjZXMgYW4gZW5kIG9mIG9wdGlvbi1zY2FubmluZyByZWdhcmRsZXNzCisgICBvZiB0aGUgdmFsdWUgb2YgYG9yZGVyaW5nJy4gIEluIHRoZSBjYXNlIG9mIFJFVFVSTl9JTl9PUkRFUiwgb25seQorICAgYC0tJyBjYW4gY2F1c2UgYGdldG9wdCcgdG8gcmV0dXJuIEVPRiB3aXRoIGBvcHRpbmQnICE9IEFSR0MuICAqLworCitzdGF0aWMgZW51bQoreworICBSRVFVSVJFX09SREVSLCBQRVJNVVRFLCBSRVRVUk5fSU5fT1JERVIKK30gb3JkZXJpbmc7CisKKy8qIEhhbmRsZSBwZXJtdXRhdGlvbiBvZiBhcmd1bWVudHMuICAqLworCisvKiBEZXNjcmliZSB0aGUgcGFydCBvZiBBUkdWIHRoYXQgY29udGFpbnMgbm9uLW9wdGlvbnMgdGhhdCBoYXZlCisgICBiZWVuIHNraXBwZWQuICBgZmlyc3Rfbm9ub3B0JyBpcyB0aGUgaW5kZXggaW4gQVJHViBvZiB0aGUgZmlyc3Qgb2YgdGhlbTsKKyAgIGBsYXN0X25vbm9wdCcgaXMgdGhlIGluZGV4IGFmdGVyIHRoZSBsYXN0IG9mIHRoZW0uICAqLworCitzdGF0aWMgaW50IGZpcnN0X25vbm9wdDsKK3N0YXRpYyBpbnQgbGFzdF9ub25vcHQ7CisKKy8qIEV4Y2hhbmdlIHR3byBhZGphY2VudCBzdWJzZXF1ZW5jZXMgb2YgQVJHVi4KKyAgIE9uZSBzdWJzZXF1ZW5jZSBpcyBlbGVtZW50cyBbZmlyc3Rfbm9ub3B0LGxhc3Rfbm9ub3B0KQorICAgd2hpY2ggY29udGFpbnMgYWxsIHRoZSBub24tb3B0aW9ucyB0aGF0IGhhdmUgYmVlbiBza2lwcGVkIHNvIGZhci4KKyAgIFRoZSBvdGhlciBpcyBlbGVtZW50cyBbbGFzdF9ub25vcHQsb3B0aW5kKSwgd2hpY2ggY29udGFpbnMgYWxsCisgICB0aGUgb3B0aW9ucyBwcm9jZXNzZWQgc2luY2UgdGhvc2Ugbm9uLW9wdGlvbnMgd2VyZSBza2lwcGVkLgorCisgICBgZmlyc3Rfbm9ub3B0JyBhbmQgYGxhc3Rfbm9ub3B0JyBhcmUgcmVsb2NhdGVkIHNvIHRoYXQgdGhleSBkZXNjcmliZQorICAgdGhlIG5ldyBpbmRpY2VzIG9mIHRoZSBub24tb3B0aW9ucyBpbiBBUkdWIGFmdGVyIHRoZXkgYXJlIG1vdmVkLgorCisgICBUbyBwZXJmb3JtIHRoZSBzd2FwLCB3ZSBmaXJzdCByZXZlcnNlIHRoZSBvcmRlciBvZiBhbGwgZWxlbWVudHMuIFNvCisgICBhbGwgb3B0aW9ucyBub3cgY29tZSBiZWZvcmUgYWxsIG5vbiBvcHRpb25zLCBidXQgdGhleSBhcmUgaW4gdGhlCisgICB3cm9uZyBvcmRlci4gU28gd2UgcHV0IGJhY2sgdGhlIG9wdGlvbnMgYW5kIG5vbiBvcHRpb25zIGluIG9yaWdpbmFsCisgICBvcmRlciBieSByZXZlcnNpbmcgdGhlbSBhZ2Fpbi4gRm9yIGV4YW1wbGU6CisgICAgICAgb3JpZ2luYWwgaW5wdXQ6ICAgICAgYSBiIGMgLXggLXkKKyAgICAgICByZXZlcnNlIGFsbDogICAgICAgICAteSAteCBjIGIgYQorICAgICAgIHJldmVyc2Ugb3B0aW9uczogICAgIC14IC15IGMgYiBhCisgICAgICAgcmV2ZXJzZSBub24gb3B0aW9uczogLXggLXkgYSBiIGMKKyovCisKKworc3RhdGljIHZvaWQgZXhjaGFuZ2UgKGNoYXIgKiphcmd2KQoreworICBjaGFyICp0ZW1wOyBjaGFyICoqZmlyc3QsICoqbGFzdDsKKworICAvKiBSZXZlcnNlIGFsbCB0aGUgZWxlbWVudHMgW2ZpcnN0X25vbm9wdCwgb3B0aW5kKSAqLworICBmaXJzdCA9ICZhcmd2W2ZpcnN0X25vbm9wdF07CisgIGxhc3QgID0gJmFyZ3Zbb3B0aW5kLTFdOworICB3aGlsZSAoZmlyc3QgPCBsYXN0KSB7CisgICAgdGVtcCA9ICpmaXJzdDsgKmZpcnN0ID0gKmxhc3Q7ICpsYXN0ID0gdGVtcDsgZmlyc3QrKzsgbGFzdC0tOworICB9CisgIC8qIFB1dCBiYWNrIHRoZSBvcHRpb25zIGluIG9yZGVyICovCisgIGZpcnN0ID0gJmFyZ3ZbZmlyc3Rfbm9ub3B0XTsKKyAgZmlyc3Rfbm9ub3B0ICs9IChvcHRpbmQgLSBsYXN0X25vbm9wdCk7CisgIGxhc3QgID0gJmFyZ3ZbZmlyc3Rfbm9ub3B0IC0gMV07CisgIHdoaWxlIChmaXJzdCA8IGxhc3QpIHsKKyAgICB0ZW1wID0gKmZpcnN0OyAqZmlyc3QgPSAqbGFzdDsgKmxhc3QgPSB0ZW1wOyBmaXJzdCsrOyBsYXN0LS07CisgIH0KKworICAvKiBQdXQgYmFjayB0aGUgbm9uIG9wdGlvbnMgaW4gb3JkZXIgKi8KKyAgZmlyc3QgPSAmYXJndltmaXJzdF9ub25vcHRdOworICBsYXN0X25vbm9wdCA9IG9wdGluZDsKKyAgbGFzdCAgPSAmYXJndltsYXN0X25vbm9wdC0xXTsKKyAgd2hpbGUgKGZpcnN0IDwgbGFzdCkgeworICAgIHRlbXAgPSAqZmlyc3Q7ICpmaXJzdCA9ICpsYXN0OyAqbGFzdCA9IHRlbXA7IGZpcnN0Kys7IGxhc3QtLTsKKyAgfQorfQorCisvKiBTY2FuIGVsZW1lbnRzIG9mIEFSR1YgKHdob3NlIGxlbmd0aCBpcyBBUkdDKSBmb3Igb3B0aW9uIGNoYXJhY3RlcnMKKyAgIGdpdmVuIGluIE9QVFNUUklORy4KKworICAgSWYgYW4gZWxlbWVudCBvZiBBUkdWIHN0YXJ0cyB3aXRoICctJywgYW5kIGlzIG5vdCBleGFjdGx5ICItIiBvciAiLS0iLAorICAgdGhlbiBpdCBpcyBhbiBvcHRpb24gZWxlbWVudC4gIFRoZSBjaGFyYWN0ZXJzIG9mIHRoaXMgZWxlbWVudAorICAgKGFzaWRlIGZyb20gdGhlIGluaXRpYWwgJy0nKSBhcmUgb3B0aW9uIGNoYXJhY3RlcnMuICBJZiBgZ2V0b3B0JworICAgaXMgY2FsbGVkIHJlcGVhdGVkbHksIGl0IHJldHVybnMgc3VjY2Vzc2l2ZWx5IGVhY2ggb2YgdGhlIG9wdGlvbiBjaGFyYWN0ZXJzCisgICBmcm9tIGVhY2ggb2YgdGhlIG9wdGlvbiBlbGVtZW50cy4KKworICAgSWYgYGdldG9wdCcgZmluZHMgYW5vdGhlciBvcHRpb24gY2hhcmFjdGVyLCBpdCByZXR1cm5zIHRoYXQgY2hhcmFjdGVyLAorICAgdXBkYXRpbmcgYG9wdGluZCcgYW5kIGBuZXh0Y2hhcicgc28gdGhhdCB0aGUgbmV4dCBjYWxsIHRvIGBnZXRvcHQnIGNhbgorICAgcmVzdW1lIHRoZSBzY2FuIHdpdGggdGhlIGZvbGxvd2luZyBvcHRpb24gY2hhcmFjdGVyIG9yIEFSR1YtZWxlbWVudC4KKworICAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgb3B0aW9uIGNoYXJhY3RlcnMsIGBnZXRvcHQnIHJldHVybnMgYEVPRicuCisgICBUaGVuIGBvcHRpbmQnIGlzIHRoZSBpbmRleCBpbiBBUkdWIG9mIHRoZSBmaXJzdCBBUkdWLWVsZW1lbnQKKyAgIHRoYXQgaXMgbm90IGFuIG9wdGlvbi4gIChUaGUgQVJHVi1lbGVtZW50cyBoYXZlIGJlZW4gcGVybXV0ZWQKKyAgIHNvIHRoYXQgdGhvc2UgdGhhdCBhcmUgbm90IG9wdGlvbnMgbm93IGNvbWUgbGFzdC4pCisKKyAgIE9QVFNUUklORyBpcyBhIHN0cmluZyBjb250YWluaW5nIHRoZSBsZWdpdGltYXRlIG9wdGlvbiBjaGFyYWN0ZXJzLgorICAgSWYgYW4gb3B0aW9uIGNoYXJhY3RlciBpcyBzZWVuIHRoYXQgaXMgbm90IGxpc3RlZCBpbiBPUFRTVFJJTkcsCisgICByZXR1cm4gQkFEX09QVElPTiBhZnRlciBwcmludGluZyBhbiBlcnJvciBtZXNzYWdlLiAgSWYgeW91IHNldCBgb3B0ZXJyJyB0bworICAgemVybywgdGhlIGVycm9yIG1lc3NhZ2UgaXMgc3VwcHJlc3NlZCBidXQgd2Ugc3RpbGwgcmV0dXJuIEJBRF9PUFRJT04uCisKKyAgIElmIGEgY2hhciBpbiBPUFRTVFJJTkcgaXMgZm9sbG93ZWQgYnkgYSBjb2xvbiwgdGhhdCBtZWFucyBpdCB3YW50cyBhbiBhcmcsCisgICBzbyB0aGUgZm9sbG93aW5nIHRleHQgaW4gdGhlIHNhbWUgQVJHVi1lbGVtZW50LCBvciB0aGUgdGV4dCBvZiB0aGUgZm9sbG93aW5nCisgICBBUkdWLWVsZW1lbnQsIGlzIHJldHVybmVkIGluIGBvcHRhcmcnLiAgVHdvIGNvbG9ucyBtZWFuIGFuIG9wdGlvbiB0aGF0CisgICB3YW50cyBhbiBvcHRpb25hbCBhcmc7IGlmIHRoZXJlIGlzIHRleHQgaW4gdGhlIGN1cnJlbnQgQVJHVi1lbGVtZW50LAorICAgaXQgaXMgcmV0dXJuZWQgaW4gYG9wdGFyZycsIG90aGVyd2lzZSBgb3B0YXJnJyBpcyBzZXQgdG8gemVyby4KKworICAgSWYgT1BUU1RSSU5HIHN0YXJ0cyB3aXRoIGAtJyBvciBgKycsIGl0IHJlcXVlc3RzIGRpZmZlcmVudCBtZXRob2RzIG9mCisgICBoYW5kbGluZyB0aGUgbm9uLW9wdGlvbiBBUkdWLWVsZW1lbnRzLgorICAgU2VlIHRoZSBjb21tZW50cyBhYm91dCBSRVRVUk5fSU5fT1JERVIgYW5kIFJFUVVJUkVfT1JERVIsIGFib3ZlLgorCisgICBMb25nLW5hbWVkIG9wdGlvbnMgYmVnaW4gd2l0aCBgLS0nIGluc3RlYWQgb2YgYC0nLgorICAgVGhlaXIgbmFtZXMgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGxvbmcgYXMgdGhlIGFiYnJldmlhdGlvbiBpcyB1bmlxdWUKKyAgIG9yIGlzIGFuIGV4YWN0IG1hdGNoIGZvciBzb21lIGRlZmluZWQgb3B0aW9uLiAgSWYgdGhleSBoYXZlIGFuCisgICBhcmd1bWVudCwgaXQgZm9sbG93cyB0aGUgb3B0aW9uIG5hbWUgaW4gdGhlIHNhbWUgQVJHVi1lbGVtZW50LCBzZXBhcmF0ZWQKKyAgIGZyb20gdGhlIG9wdGlvbiBuYW1lIGJ5IGEgYD0nLCBvciBlbHNlIHRoZSBpbiBuZXh0IEFSR1YtZWxlbWVudC4KKyAgIFdoZW4gYGdldG9wdCcgZmluZHMgYSBsb25nLW5hbWVkIG9wdGlvbiwgaXQgcmV0dXJucyAwIGlmIHRoYXQgb3B0aW9uJ3MKKyAgIGBmbGFnJyBmaWVsZCBpcyBub256ZXJvLCB0aGUgdmFsdWUgb2YgdGhlIG9wdGlvbidzIGB2YWwnIGZpZWxkCisgICBpZiB0aGUgYGZsYWcnIGZpZWxkIGlzIHplcm8uCisKKyAgIExPTkdPUFRTIGlzIGEgdmVjdG9yIG9mIGBzdHJ1Y3Qgb3B0aW9uJyB0ZXJtaW5hdGVkIGJ5IGFuCisgICBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzIHplcm8uCisKKyAgIExPTkdJTkQgcmV0dXJucyB0aGUgaW5kZXggaW4gTE9OR09QVCBvZiB0aGUgbG9uZy1uYW1lZCBvcHRpb24gZm91bmQuCisgICBJdCBpcyBvbmx5IHZhbGlkIHdoZW4gYSBsb25nLW5hbWVkIG9wdGlvbiBoYXMgYmVlbiBmb3VuZCBieSB0aGUgbW9zdAorICAgcmVjZW50IGNhbGwuCisKKyAgIElmIExPTkdfT05MWSBpcyBub256ZXJvLCAnLScgYXMgd2VsbCBhcyAnLS0nIGNhbiBpbnRyb2R1Y2UKKyAgIGxvbmctbmFtZWQgb3B0aW9ucy4gICovCisKK3N0YXRpYyBpbnQgX2dldG9wdF9pbnRlcm5hbCAoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdvcHRzLCBpbnQgKmxvbmdpbmQsCisgICAgICAgICAgICAgICAgIGludCBsb25nX29ubHkpCit7CisgIHN0YXRpYyBjaGFyIGVtcHR5X3N0cmluZ1sxXTsKKyAgaW50IG9wdGlvbl9pbmRleDsKKworICBpZiAobG9uZ2luZCAhPSBOVUxMKQorICAgICpsb25naW5kID0gLTE7CisKKyAgb3B0YXJnID0gMDsKKworICAvKiBJbml0aWFsaXplIHRoZSBpbnRlcm5hbCBkYXRhIHdoZW4gdGhlIGZpcnN0IGNhbGwgaXMgbWFkZS4KKyAgICAgU3RhcnQgcHJvY2Vzc2luZyBvcHRpb25zIHdpdGggQVJHVi1lbGVtZW50IDEgKHNpbmNlIEFSR1YtZWxlbWVudCAwCisgICAgIGlzIHRoZSBwcm9ncmFtIG5hbWUpOyB0aGUgc2VxdWVuY2Ugb2YgcHJldmlvdXNseSBza2lwcGVkCisgICAgIG5vbi1vcHRpb24gQVJHVi1lbGVtZW50cyBpcyBlbXB0eS4gICovCisKKyAgaWYgKG9wdGluZCA9PSAwKQorICAgIHsKKyAgICAgIGZpcnN0X25vbm9wdCA9IGxhc3Rfbm9ub3B0ID0gb3B0aW5kID0gMTsKKworICAgICAgbmV4dGNoYXIgPSBOVUxMOworCisgICAgICAvKiBEZXRlcm1pbmUgaG93IHRvIGhhbmRsZSB0aGUgb3JkZXJpbmcgb2Ygb3B0aW9ucyBhbmQgbm9ub3B0aW9ucy4gICovCisKKyAgICAgIGlmIChvcHRzdHJpbmdbMF0gPT0gJy0nKQorICAgICAgICB7CisgICAgICAgICAgb3JkZXJpbmcgPSBSRVRVUk5fSU5fT1JERVI7CisgICAgICAgICAgKytvcHRzdHJpbmc7CisgICAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG9wdHN0cmluZ1swXSA9PSAnKycpCisgICAgICAgIHsKKyAgICAgICAgICBvcmRlcmluZyA9IFJFUVVJUkVfT1JERVI7CisgICAgICAgICAgKytvcHRzdHJpbmc7CisgICAgICAgIH0KKyNpZiAwCisgICAgICBlbHNlIGlmIChnZXRlbnYgKCJQT1NJWExZX0NPUlJFQ1QiKSAhPSBOVUxMKQorICAgICAgICBvcmRlcmluZyA9IFJFUVVJUkVfT1JERVI7CisjZW5kaWYKKyAgICAgIGVsc2UKKyAgICAgICAgb3JkZXJpbmcgPSBQRVJNVVRFOworICAgIH0KKworICBpZiAobmV4dGNoYXIgPT0gTlVMTCB8fCAqbmV4dGNoYXIgPT0gJ1wwJykKKyAgICB7CisgICAgICBpZiAob3JkZXJpbmcgPT0gUEVSTVVURSkKKyAgICAgICAgeworICAgICAgICAgIC8qIElmIHdlIGhhdmUganVzdCBwcm9jZXNzZWQgc29tZSBvcHRpb25zIGZvbGxvd2luZyBzb21lIG5vbi1vcHRpb25zLAorICAgICAgICAgICAgIGV4Y2hhbmdlIHRoZW0gc28gdGhhdCB0aGUgb3B0aW9ucyBjb21lIGZpcnN0LiAgKi8KKworICAgICAgICAgIGlmIChmaXJzdF9ub25vcHQgIT0gbGFzdF9ub25vcHQgJiYgbGFzdF9ub25vcHQgIT0gb3B0aW5kKQorICAgICAgICAgICAgZXhjaGFuZ2UgKGFyZ3YpOworICAgICAgICAgIGVsc2UgaWYgKGxhc3Rfbm9ub3B0ICE9IG9wdGluZCkKKyAgICAgICAgICAgIGZpcnN0X25vbm9wdCA9IG9wdGluZDsKKworICAgICAgICAgIC8qIE5vdyBza2lwIGFueSBhZGRpdGlvbmFsIG5vbi1vcHRpb25zCisgICAgICAgICAgICAgYW5kIGV4dGVuZCB0aGUgcmFuZ2Ugb2Ygbm9uLW9wdGlvbnMgcHJldmlvdXNseSBza2lwcGVkLiAgKi8KKworICAgICAgICAgIHdoaWxlIChvcHRpbmQgPCBhcmdjCisgICAgICAgICAgICAgICAgICYmIChhcmd2W29wdGluZF1bMF0gIT0gJy0nIHx8IGFyZ3Zbb3B0aW5kXVsxXSA9PSAnXDAnKQorI2lmZGVmIEdFVE9QVF9DT01QQVQKKyAgICAgICAgICAgICAgICAgJiYgKGxvbmdvcHRzID09IE5VTEwKKyAgICAgICAgICAgICAgICAgICAgIHx8IGFyZ3Zbb3B0aW5kXVswXSAhPSAnKycgfHwgYXJndltvcHRpbmRdWzFdID09ICdcMCcpCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVE9QVF9DT01QQVQgKi8KKyAgICAgICAgICAgICAgICAgKQorICAgICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICAgbGFzdF9ub25vcHQgPSBvcHRpbmQ7CisgICAgICAgIH0KKworICAgICAgLyogU3BlY2lhbCBBUkdWLWVsZW1lbnQgYC0tJyBtZWFucyBwcmVtYXR1cmUgZW5kIG9mIG9wdGlvbnMuCisgICAgICAgICBTa2lwIGl0IGxpa2UgYSBudWxsIG9wdGlvbiwKKyAgICAgICAgIHRoZW4gZXhjaGFuZ2Ugd2l0aCBwcmV2aW91cyBub24tb3B0aW9ucyBhcyBpZiBpdCB3ZXJlIGFuIG9wdGlvbiwKKyAgICAgICAgIHRoZW4gc2tpcCBldmVyeXRoaW5nIGVsc2UgbGlrZSBhIG5vbi1vcHRpb24uICAqLworCisgICAgICBpZiAob3B0aW5kICE9IGFyZ2MgJiYgIXN0cmNtcCAoYXJndltvcHRpbmRdLCAiLS0iKSkKKyAgICAgICAgeworICAgICAgICAgIG9wdGluZCsrOworCisgICAgICAgICAgaWYgKGZpcnN0X25vbm9wdCAhPSBsYXN0X25vbm9wdCAmJiBsYXN0X25vbm9wdCAhPSBvcHRpbmQpCisgICAgICAgICAgICBleGNoYW5nZSAoYXJndik7CisgICAgICAgICAgZWxzZSBpZiAoZmlyc3Rfbm9ub3B0ID09IGxhc3Rfbm9ub3B0KQorICAgICAgICAgICAgZmlyc3Rfbm9ub3B0ID0gb3B0aW5kOworICAgICAgICAgIGxhc3Rfbm9ub3B0ID0gYXJnYzsKKworICAgICAgICAgIG9wdGluZCA9IGFyZ2M7CisgICAgICAgIH0KKworICAgICAgLyogSWYgd2UgaGF2ZSBkb25lIGFsbCB0aGUgQVJHVi1lbGVtZW50cywgc3RvcCB0aGUgc2NhbgorICAgICAgICAgYW5kIGJhY2sgb3ZlciBhbnkgbm9uLW9wdGlvbnMgdGhhdCB3ZSBza2lwcGVkIGFuZCBwZXJtdXRlZC4gICovCisKKyAgICAgIGlmIChvcHRpbmQgPT0gYXJnYykKKyAgICAgICAgeworICAgICAgICAgIC8qIFNldCB0aGUgbmV4dC1hcmctaW5kZXggdG8gcG9pbnQgYXQgdGhlIG5vbi1vcHRpb25zCisgICAgICAgICAgICAgdGhhdCB3ZSBwcmV2aW91c2x5IHNraXBwZWQsIHNvIHRoZSBjYWxsZXIgd2lsbCBkaWdlc3QgdGhlbS4gICovCisgICAgICAgICAgaWYgKGZpcnN0X25vbm9wdCAhPSBsYXN0X25vbm9wdCkKKyAgICAgICAgICAgIG9wdGluZCA9IGZpcnN0X25vbm9wdDsKKyAgICAgICAgICByZXR1cm4gRU9GOworICAgICAgICB9CisKKyAgICAgIC8qIElmIHdlIGhhdmUgY29tZSB0byBhIG5vbi1vcHRpb24gYW5kIGRpZCBub3QgcGVybXV0ZSBpdCwKKyAgICAgICAgIGVpdGhlciBzdG9wIHRoZSBzY2FuIG9yIGRlc2NyaWJlIGl0IHRvIHRoZSBjYWxsZXIgYW5kIHBhc3MgaXQgYnkuICAqLworCisgICAgICBpZiAoKGFyZ3Zbb3B0aW5kXVswXSAhPSAnLScgfHwgYXJndltvcHRpbmRdWzFdID09ICdcMCcpCisjaWZkZWYgR0VUT1BUX0NPTVBBVAorICAgICAgICAgICYmIChsb25nb3B0cyA9PSBOVUxMCisgICAgICAgICAgICAgIHx8IGFyZ3Zbb3B0aW5kXVswXSAhPSAnKycgfHwgYXJndltvcHRpbmRdWzFdID09ICdcMCcpCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVE9QVF9DT01QQVQgKi8KKyAgICAgICAgICApCisgICAgICAgIHsKKyAgICAgICAgICBpZiAob3JkZXJpbmcgPT0gUkVRVUlSRV9PUkRFUikKKyAgICAgICAgICAgIHJldHVybiBFT0Y7CisgICAgICAgICAgb3B0YXJnID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIH0KKworICAgICAgLyogV2UgaGF2ZSBmb3VuZCBhbm90aGVyIG9wdGlvbi1BUkdWLWVsZW1lbnQuCisgICAgICAgICBTdGFydCBkZWNvZGluZyBpdHMgY2hhcmFjdGVycy4gICovCisKKyAgICAgIG5leHRjaGFyID0gKGFyZ3Zbb3B0aW5kXSArIDEKKyAgICAgICAgICAgICAgICAgICsgKGxvbmdvcHRzICE9IE5VTEwgJiYgYXJndltvcHRpbmRdWzFdID09ICctJykpOworICAgIH0KKworICBpZiAobG9uZ29wdHMgIT0gTlVMTAorICAgICAgJiYgKChhcmd2W29wdGluZF1bMF0gPT0gJy0nCisgICAgICAgICAgICYmIChhcmd2W29wdGluZF1bMV0gPT0gJy0nIHx8IGxvbmdfb25seSkpCisjaWZkZWYgR0VUT1BUX0NPTVBBVAorICAgICAgICAgIHx8IGFyZ3Zbb3B0aW5kXVswXSA9PSAnKycKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogR0VUT1BUX0NPTVBBVCAqLworICAgICAgICAgICkpCisgICAgeworICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcDsKKyAgICAgIGNoYXIgKnMgPSBuZXh0Y2hhcjsKKyAgICAgIGludCBleGFjdCA9IDA7CisgICAgICBpbnQgYW1iaWcgPSAwOworICAgICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqcGZvdW5kID0gTlVMTDsKKyAgICAgIGludCBpbmRmb3VuZCA9IDA7CisgICAgICBpbnQgbmVlZGV4YWN0ID0gMDsKKworICAgICAgLyogYWxsb3cgYC0tb3B0aW9uI3ZhbHVlJyBiZWNhdXNlIHlvdSBjYW5ub3V0IGFzc2lnbiBhICc9JworICAgICAgICAgdG8gYW4gZW52aXJvbm1lbnQgdmFyaWFibGUgdW5kZXIgRE9TIGNvbW1hbmQuY29tICovCisgICAgICB3aGlsZSAoKnMgJiYgKnMgIT0gJz0nICYmICogcyAhPSAnIycpCisgICAgICAgIHMrKzsKKworICAgICAgLyogVGVzdCBhbGwgb3B0aW9ucyBmb3IgZWl0aGVyIGV4YWN0IG1hdGNoIG9yIGFiYnJldmlhdGVkIG1hdGNoZXMuICAqLworICAgICAgZm9yIChwID0gbG9uZ29wdHMsIG9wdGlvbl9pbmRleCA9IDA7IHAtPm5hbWU7CisgICAgICAgICAgIHArKywgb3B0aW9uX2luZGV4KyspCisgICAgICAgIGlmICghc3RybmNtcCAocC0+bmFtZSwgbmV4dGNoYXIsICh1bnNpZ25lZCkgKHMgLSBuZXh0Y2hhcikpKQorICAgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwLT5oYXNfYXJnICYgMHgxMCkKKyAgICAgICAgICAgICAgbmVlZGV4YWN0ID0gMTsKKyAgICAgICAgICAgIGlmICgodW5zaWduZWQpIChzIC0gbmV4dGNoYXIpID09IHN0cmxlbiAocC0+bmFtZSkpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBFeGFjdCBtYXRjaCBmb3VuZC4gICovCisgICAgICAgICAgICAgICAgcGZvdW5kID0gcDsKKyAgICAgICAgICAgICAgICBpbmRmb3VuZCA9IG9wdGlvbl9pbmRleDsKKyAgICAgICAgICAgICAgICBleGFjdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHBmb3VuZCA9PSBOVUxMKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogRmlyc3Qgbm9uZXhhY3QgbWF0Y2ggZm91bmQuICAqLworICAgICAgICAgICAgICAgIHBmb3VuZCA9IHA7CisgICAgICAgICAgICAgICAgaW5kZm91bmQgPSBvcHRpb25faW5kZXg7CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgLyogU2Vjb25kIG5vbmV4YWN0IG1hdGNoIGZvdW5kLiAgKi8KKyAgICAgICAgICAgICAgYW1iaWcgPSAxOworICAgICAgICAgIH0KKworICAgICAgLyogZG9uJ3QgYWxsb3cgbm9uZXhhY3QgbG9uZ29wdGlvbnMgKi8KKyAgICAgIGlmIChuZWVkZXhhY3QgJiYgIWV4YWN0KQorICAgICAgICB7CisgICAgICAgICAgaWYgKG9wdGVycikKKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlcydcbiIsCisgICAgICAgICAgICAgICAgICAgICBQUk9HTkFNRShhcmd2WzBdKSwgYXJndltvcHRpbmRdKTsKKyAgICAgICAgICBuZXh0Y2hhciArPSBzdHJsZW4gKG5leHRjaGFyKTsKKyAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICByZXR1cm4gQkFEX09QVElPTjsKKyAgICAgICAgfQorICAgICAgaWYgKGFtYmlnICYmICFleGFjdCkKKyAgICAgICAgeworICAgICAgICAgIGlmIChvcHRlcnIpCisgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogb3B0aW9uIGAlcycgaXMgYW1iaWd1b3VzXG4iLAorICAgICAgICAgICAgICAgICAgICAgUFJPR05BTUUoYXJndlswXSksIGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgICAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisgICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICAgcmV0dXJuIEJBRF9PUFRJT047CisgICAgICAgIH0KKworICAgICAgaWYgKHBmb3VuZCAhPSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaW50IGhhdmVfYXJnID0gKHNbMF0gIT0gJ1wwJyk7CisgICAgICAgICAgaWYgKGhhdmVfYXJnICYmIChwZm91bmQtPmhhc19hcmcgJiAweGYpKQorICAgICAgICAgICAgaGF2ZV9hcmcgPSAoc1sxXSAhPSAnXDAnKTsKKyAgICAgICAgICBvcHRpb25faW5kZXggPSBpbmRmb3VuZDsKKyAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICBpZiAoaGF2ZV9hcmcpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgIC8qIERvbid0IHRlc3QgaGFzX2FyZyB3aXRoID4sIGJlY2F1c2Ugc29tZSBDIGNvbXBpbGVycyBkb24ndAorICAgICAgICAgICAgICAgICBhbGxvdyBpdCB0byBiZSB1c2VkIG9uIGVudW1zLiAgKi8KKyAgICAgICAgICAgICAgaWYgKHBmb3VuZC0+aGFzX2FyZyAmIDB4ZikKKyAgICAgICAgICAgICAgICBvcHRhcmcgPSBzICsgMTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChvcHRlcnIpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJndltvcHRpbmQgLSAxXVsxXSA9PSAnLScpCisgICAgICAgICAgICAgICAgICAgICAgICAvKiAtLW9wdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBvcHRpb24gYC0tJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9HTkFNRShhcmd2WzBdKSwgcGZvdW5kLT5uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvKiArb3B0aW9uIG9yIC1vcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBvcHRpb24gYCVjJXMnIGRvZXNuJ3QgYWxsb3cgYW4gYXJndW1lbnRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0dOQU1FKGFyZ3ZbMF0pLCBhcmd2W29wdGluZCAtIDFdWzBdLCBwZm91bmQtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICBuZXh0Y2hhciArPSBzdHJsZW4gKG5leHRjaGFyKTsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBCQURfT1BUSU9OOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlIGlmICgocGZvdW5kLT5oYXNfYXJnICYgMHhmKSA9PSAxKQorICAgICAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCisjZWxzZQorICAgICAgICAgICAgICBpZiAob3B0aW5kIDwgYXJnYyAmJiAocGZvdW5kLT5oYXNfYXJnICYgMHgyMCkgPT0gMCkKKyNlbmRpZgorICAgICAgICAgICAgICAgIG9wdGFyZyA9IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgaWYgKG9wdGVycikKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IG9wdGlvbiBgLS0lcyVzJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPR05BTUUoYXJndlswXSksIHBmb3VuZC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBmb3VuZC0+aGFzX2FyZyAmIDB4MjApID8gIj0iIDogIiIpOworICAgICAgICAgICAgICAgICAgbmV4dGNoYXIgKz0gc3RybGVuIChuZXh0Y2hhcik7CisgICAgICAgICAgICAgICAgICByZXR1cm4gb3B0c3RyaW5nWzBdID09ICc6JyA/ICc6JyA6IEJBRF9PUFRJT047CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIG5leHRjaGFyICs9IHN0cmxlbiAobmV4dGNoYXIpOworICAgICAgICAgIGlmIChsb25naW5kICE9IE5VTEwpCisgICAgICAgICAgICAqbG9uZ2luZCA9IG9wdGlvbl9pbmRleDsKKyAgICAgICAgICBpZiAocGZvdW5kLT5mbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAqKHBmb3VuZC0+ZmxhZykgPSBwZm91bmQtPnZhbDsKKyAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgcmV0dXJuIHBmb3VuZC0+dmFsOworICAgICAgICB9CisgICAgICAvKiBDYW4ndCBmaW5kIGl0IGFzIGEgbG9uZyBvcHRpb24uICBJZiB0aGlzIGlzIG5vdCBnZXRvcHRfbG9uZ19vbmx5LAorICAgICAgICAgb3IgdGhlIG9wdGlvbiBzdGFydHMgd2l0aCAnLS0nIG9yIGlzIG5vdCBhIHZhbGlkIHNob3J0CisgICAgICAgICBvcHRpb24sIHRoZW4gaXQncyBhbiBlcnJvci4KKyAgICAgICAgIE90aGVyd2lzZSBpbnRlcnByZXQgaXQgYXMgYSBzaG9ydCBvcHRpb24uICAqLworICAgICAgaWYgKCFsb25nX29ubHkgfHwgYXJndltvcHRpbmRdWzFdID09ICctJworI2lmZGVmIEdFVE9QVF9DT01QQVQKKyAgICAgICAgICB8fCBhcmd2W29wdGluZF1bMF0gPT0gJysnCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEdFVE9QVF9DT01QQVQgKi8KKyAgICAgICAgICB8fCBzdHJjaHIgKG9wdHN0cmluZywgKm5leHRjaGFyKSA9PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgaWYgKG9wdGVycikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgaWYgKGFyZ3Zbb3B0aW5kXVsxXSA9PSAnLScpCisgICAgICAgICAgICAgICAgLyogLS1vcHRpb24gKi8KKyAgICAgICAgICAgICAgICBmcHJpbnRmIChzdGRlcnIsICIlczogdW5yZWNvZ25pemVkIG9wdGlvbiBgLS0lcydcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgUFJPR05BTUUoYXJndlswXSksIG5leHRjaGFyKTsKKyAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIC8qICtvcHRpb24gb3IgLW9wdGlvbiAqLworICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uIGAlYyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUk9HTkFNRShhcmd2WzBdKSwgYXJndltvcHRpbmRdWzBdLCBuZXh0Y2hhcik7CisgICAgICAgICAgICB9CisgICAgICAgICAgbmV4dGNoYXIgPSBlbXB0eV9zdHJpbmc7CisgICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICAgcmV0dXJuIEJBRF9PUFRJT047CisgICAgICAgIH0KKyAgICAgICAgKHZvaWQpICZhbWJpZzsgIC8qIFVOVVNFRCAqLworICAgIH0KKworICAvKiBMb29rIGF0IGFuZCBoYW5kbGUgdGhlIG5leHQgb3B0aW9uLWNoYXJhY3Rlci4gICovCisKKyAgeworICAgIGNoYXIgYyA9ICpuZXh0Y2hhcisrOworICAgIGNvbnN0IGNoYXIgKnRlbXAgPSBzdHJjaHIgKG9wdHN0cmluZywgYyk7CisKKyAgICAvKiBJbmNyZW1lbnQgYG9wdGluZCcgd2hlbiB3ZSBzdGFydCB0byBwcm9jZXNzIGl0cyBsYXN0IGNoYXJhY3Rlci4gICovCisgICAgaWYgKCpuZXh0Y2hhciA9PSAnXDAnKQorICAgICAgKytvcHRpbmQ7CisKKyAgICBpZiAodGVtcCA9PSBOVUxMIHx8IGMgPT0gJzonKQorICAgICAgeworICAgICAgICBpZiAob3B0ZXJyKQorICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICBpZiAoYyA8IDA0MCB8fCBjID49IDAxNzcpCisgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiB1bnJlY29nbml6ZWQgb3B0aW9uLCBjaGFyYWN0ZXIgY29kZSAwJW9cbiIsCisgICAgICAgICAgICAgICAgICAgICAgIFBST0dOQU1FKGFyZ3ZbMF0pLCBjKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IHVucmVjb2duaXplZCBvcHRpb24gYC0lYydcbiIsIFBST0dOQU1FKGFyZ3ZbMF0pLCBjKTsKKyNlbHNlCisgICAgICAgICAgICAvKiAxMDAzLjIgc3BlY2lmaWVzIHRoZSBmb3JtYXQgb2YgdGhpcyBtZXNzYWdlLiAgKi8KKyAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBpbGxlZ2FsIG9wdGlvbiAtLSAlY1xuIiwgUFJPR05BTUUoYXJndlswXSksIGMpOworI2VuZGlmCisgICAgICAgICAgfQorICAgICAgICBvcHRvcHQgPSBjOworICAgICAgICByZXR1cm4gQkFEX09QVElPTjsKKyAgICAgIH0KKyAgICBpZiAodGVtcFsxXSA9PSAnOicpCisgICAgICB7CisgICAgICAgIGlmICh0ZW1wWzJdID09ICc6JykKKyAgICAgICAgICB7CisgICAgICAgICAgICAvKiBUaGlzIGlzIGFuIG9wdGlvbiB0aGF0IGFjY2VwdHMgYW4gYXJndW1lbnQgb3B0aW9uYWxseS4gICovCisgICAgICAgICAgICBpZiAoKm5leHRjaGFyICE9ICdcMCcpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBvcHRhcmcgPSBuZXh0Y2hhcjsKKyAgICAgICAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBvcHRhcmcgPSAwOworICAgICAgICAgICAgbmV4dGNoYXIgPSBOVUxMOworICAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIFRoaXMgaXMgYW4gb3B0aW9uIHRoYXQgcmVxdWlyZXMgYW4gYXJndW1lbnQuICAqLworICAgICAgICAgICAgaWYgKCpuZXh0Y2hhciAhPSAnXDAnKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3B0YXJnID0gbmV4dGNoYXI7CisgICAgICAgICAgICAgICAgLyogSWYgd2UgZW5kIHRoaXMgQVJHVi1lbGVtZW50IGJ5IHRha2luZyB0aGUgcmVzdCBhcyBhbiBhcmcsCisgICAgICAgICAgICAgICAgICAgd2UgbXVzdCBhZHZhbmNlIHRvIHRoZSBuZXh0IGVsZW1lbnQgbm93LiAgKi8KKyAgICAgICAgICAgICAgICBvcHRpbmQrKzsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAob3B0aW5kID09IGFyZ2MpCisgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAob3B0ZXJyKQorICAgICAgICAgICAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZiAoc3RkZXJyLCAiJXM6IG9wdGlvbiBgLSVjJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJPR05BTUUoYXJndlswXSksIGMpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgLyogMTAwMy4yIHNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoaXMgbWVzc2FnZS4gICovCisgICAgICAgICAgICAgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIiVzOiBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQgLS0gJWNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBST0dOQU1FKGFyZ3ZbMF0pLCBjKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG9wdG9wdCA9IGM7CisgICAgICAgICAgICAgICAgaWYgKG9wdHN0cmluZ1swXSA9PSAnOicpCisgICAgICAgICAgICAgICAgICBjID0gJzonOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIGMgPSBCQURfT1BUSU9OOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIC8qIFdlIGFscmVhZHkgaW5jcmVtZW50ZWQgYG9wdGluZCcgb25jZTsKKyAgICAgICAgICAgICAgICAgaW5jcmVtZW50IGl0IGFnYWluIHdoZW4gdGFraW5nIG5leHQgQVJHVi1lbHQgYXMgYXJndW1lbnQuICAqLworICAgICAgICAgICAgICBvcHRhcmcgPSBhcmd2W29wdGluZCsrXTsKKyAgICAgICAgICAgIG5leHRjaGFyID0gTlVMTDsKKyAgICAgICAgICB9CisgICAgICB9CisgICAgcmV0dXJuIGM7CisgIH0KK30KKworaW50IG1meF9nZXRvcHQoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpvcHRzdHJpbmcpCit7CisgIHJldHVybiBfZ2V0b3B0X2ludGVybmFsIChhcmdjLCBhcmd2LCBvcHRzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IG9wdGlvbiAqKSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCAqKSAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7Cit9CisKK2ludCBtZnhfZ2V0b3B0X2xvbmcoaW50IGFyZ2MsIGNoYXIgKiphcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqb3B0X2luZGV4KQoreworICByZXR1cm4gX2dldG9wdF9pbnRlcm5hbCAoYXJnYywgYXJndiwgb3B0aW9ucywgbG9uZ19vcHRpb25zLCBvcHRfaW5kZXgsIDApOworfQorCisKKyNpZmRlZiBURVNUCisKKy8qIENvbXBpbGUgd2l0aCAtRFRFU1QgdG8gbWFrZSBhbiBleGVjdXRhYmxlIGZvciB1c2UgaW4gdGVzdGluZworICAgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgYGdldG9wdCcuICAqLworCitpbnQKK21haW4gKGFyZ2MsIGFyZ3YpCisgICAgIGludCBhcmdjOworICAgICBjaGFyICoqYXJndjsKK3sKKyAgaW50IGM7CisgIGludCBkaWdpdF9vcHRpbmQgPSAwOworCisgIHdoaWxlICgxKQorICAgIHsKKyAgICAgIGludCB0aGlzX29wdGlvbl9vcHRpbmQgPSBvcHRpbmQgPyBvcHRpbmQgOiAxOworCisgICAgICBjID0gZ2V0b3B0IChhcmdjLCBhcmd2LCAiYWJjOmQ6MDEyMzQ1Njc4OSIpOworICAgICAgaWYgKGMgPT0gRU9GKQorICAgICAgICBicmVhazsKKworICAgICAgc3dpdGNoIChjKQorICAgICAgICB7CisgICAgICAgIGNhc2UgJzAnOgorICAgICAgICBjYXNlICcxJzoKKyAgICAgICAgY2FzZSAnMic6CisgICAgICAgIGNhc2UgJzMnOgorICAgICAgICBjYXNlICc0JzoKKyAgICAgICAgY2FzZSAnNSc6CisgICAgICAgIGNhc2UgJzYnOgorICAgICAgICBjYXNlICc3JzoKKyAgICAgICAgY2FzZSAnOCc6CisgICAgICAgIGNhc2UgJzknOgorICAgICAgICAgIGlmIChkaWdpdF9vcHRpbmQgIT0gMCAmJiBkaWdpdF9vcHRpbmQgIT0gdGhpc19vcHRpb25fb3B0aW5kKQorICAgICAgICAgICAgcHJpbnRmICgiZGlnaXRzIG9jY3VyIGluIHR3byBkaWZmZXJlbnQgYXJndi1lbGVtZW50cy5cbiIpOworICAgICAgICAgIGRpZ2l0X29wdGluZCA9IHRoaXNfb3B0aW9uX29wdGluZDsKKyAgICAgICAgICBwcmludGYgKCJvcHRpb24gJWNcbiIsIGMpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgIHByaW50ZiAoIm9wdGlvbiBhXG4iKTsKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdiJzoKKyAgICAgICAgICBwcmludGYgKCJvcHRpb24gYlxuIik7CisgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgcHJpbnRmICgib3B0aW9uIGMgd2l0aCB2YWx1ZSBgJXMnXG4iLCBvcHRhcmcpOworICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgQkFEX09QVElPTjoKKyAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgIHByaW50ZiAoIj8/IGdldG9wdCByZXR1cm5lZCBjaGFyYWN0ZXIgY29kZSAwJW8gPz9cbiIsIGMpOworICAgICAgICB9CisgICAgfQorCisgIGlmIChvcHRpbmQgPCBhcmdjKQorICAgIHsKKyAgICAgIHByaW50ZiAoIm5vbi1vcHRpb24gQVJHVi1lbGVtZW50czogIik7CisgICAgICB3aGlsZSAob3B0aW5kIDwgYXJnYykKKyAgICAgICAgcHJpbnRmICgiJXMgIiwgYXJndltvcHRpbmQrK10pOworICAgICAgcHJpbnRmICgiXG4iKTsKKyAgICB9CisKKyAgZXhpdCAoMCk7Cit9CisKKyNlbmRpZiAvKiBURVNUICovCisKKworLyoKK3ZpOnRzPTQ6ZXQ6bm93cmFwCisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9sem90ZXN0L215Z2V0b3B0LmggYi9sem8tMi4wMy9sem90ZXN0L215Z2V0b3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBkZTlhZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2x6b3Rlc3QvbXlnZXRvcHQuaApAQCAtMCwwICsxLDEwMiBAQAorLyogRGVjbGFyYXRpb25zIGZvciBnZXRvcHQuCisgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkKKyAgIGxhdGVyIHZlcnNpb24uCisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuICAqLworCisjaWZuZGVmIF9fTUZYX0dFVE9QVF9ICisjZGVmaW5lIF9fTUZYX0dFVE9QVF9IIDEKKworI2lmZGVmIF9fY3BsdXNwbHVzCisvKiBleHRlcm4gIkMiIHsgKi8KKyNlbmRpZgorCisvKiBGb3IgY29tbXVuaWNhdGlvbiBmcm9tIGBnZXRvcHQnIHRvIHRoZSBjYWxsZXIuCisgICBXaGVuIGBnZXRvcHQnIGZpbmRzIGFuIG9wdGlvbiB0aGF0IHRha2VzIGFuIGFyZ3VtZW50LAorICAgdGhlIGFyZ3VtZW50IHZhbHVlIGlzIHJldHVybmVkIGhlcmUuCisgICBBbHNvLCB3aGVuIGBvcmRlcmluZycgaXMgUkVUVVJOX0lOX09SREVSLAorICAgZWFjaCBub24tb3B0aW9uIEFSR1YtZWxlbWVudCBpcyByZXR1cm5lZCBoZXJlLiAgKi8KKworZXh0ZXJuIGNoYXIgKm1meF9vcHRhcmc7CisKKy8qIEluZGV4IGluIEFSR1Ygb2YgdGhlIG5leHQgZWxlbWVudCB0byBiZSBzY2FubmVkLgorICAgVGhpcyBpcyB1c2VkIGZvciBjb21tdW5pY2F0aW9uIHRvIGFuZCBmcm9tIHRoZSBjYWxsZXIKKyAgIGFuZCBmb3IgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYGdldG9wdCcuCisKKyAgIE9uIGVudHJ5IHRvIGBnZXRvcHQnLCB6ZXJvIG1lYW5zIHRoaXMgaXMgdGhlIGZpcnN0IGNhbGw7IGluaXRpYWxpemUuCisKKyAgIFdoZW4gYGdldG9wdCcgcmV0dXJucyBFT0YsIHRoaXMgaXMgdGhlIGluZGV4IG9mIHRoZSBmaXJzdCBvZiB0aGUKKyAgIG5vbi1vcHRpb24gZWxlbWVudHMgdGhhdCB0aGUgY2FsbGVyIHNob3VsZCBpdHNlbGYgc2Nhbi4KKworICAgT3RoZXJ3aXNlLCBgb3B0aW5kJyBjb21tdW5pY2F0ZXMgZnJvbSBvbmUgY2FsbCB0byB0aGUgbmV4dAorICAgaG93IG11Y2ggb2YgQVJHViBoYXMgYmVlbiBzY2FubmVkIHNvIGZhci4gICovCisKK2V4dGVybiBpbnQgbWZ4X29wdGluZDsKKworLyogQ2FsbGVycyBzdG9yZSB6ZXJvIGhlcmUgdG8gaW5oaWJpdCB0aGUgZXJyb3IgbWVzc2FnZSBgZ2V0b3B0JyBwcmludHMKKyAgIGZvciB1bnJlY29nbml6ZWQgb3B0aW9ucy4gICovCisKK2V4dGVybiBpbnQgbWZ4X29wdGVycjsKKworLyogU2V0IHRvIGFuIG9wdGlvbiBjaGFyYWN0ZXIgd2hpY2ggd2FzIHVucmVjb2duaXplZC4gICovCisKK2V4dGVybiBpbnQgbWZ4X29wdG9wdDsKKworLyogRGVzY3JpYmUgdGhlIGxvbmctbmFtZWQgb3B0aW9ucyByZXF1ZXN0ZWQgYnkgdGhlIGFwcGxpY2F0aW9uLgorICAgVGhlIExPTkdfT1BUSU9OUyBhcmd1bWVudCB0byBnZXRvcHRfbG9uZyBvciBnZXRvcHRfbG9uZ19vbmx5IGlzIGEgdmVjdG9yCisgICBvZiBgc3RydWN0IG9wdGlvbicgdGVybWluYXRlZCBieSBhbiBlbGVtZW50IGNvbnRhaW5pbmcgYSBuYW1lIHdoaWNoIGlzCisgICB6ZXJvLgorCisgICBUaGUgZmllbGQgYGhhc19hcmcnIGlzOgorICAgbm9fYXJndW1lbnQgICAgICAgICAgKG9yIDApIGlmIHRoZSBvcHRpb24gZG9lcyBub3QgdGFrZSBhbiBhcmd1bWVudCwKKyAgIHJlcXVpcmVkX2FyZ3VtZW50ICAgIChvciAxKSBpZiB0aGUgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50LAorICAgb3B0aW9uYWxfYXJndW1lbnQgICAgKG9yIDIpIGlmIHRoZSBvcHRpb24gdGFrZXMgYW4gb3B0aW9uYWwgYXJndW1lbnQuCisKKyAgIElmIHRoZSBmaWVsZCBgZmxhZycgaXMgbm90IE5VTEwsIGl0IHBvaW50cyB0byBhIHZhcmlhYmxlIHRoYXQgaXMgc2V0CisgICB0byB0aGUgdmFsdWUgZ2l2ZW4gaW4gdGhlIGZpZWxkIGB2YWwnIHdoZW4gdGhlIG9wdGlvbiBpcyBmb3VuZCwgYnV0CisgICBsZWZ0IHVuY2hhbmdlZCBpZiB0aGUgb3B0aW9uIGlzIG5vdCBmb3VuZC4KKworICAgVG8gaGF2ZSBhIGxvbmctbmFtZWQgb3B0aW9uIGRvIHNvbWV0aGluZyBvdGhlciB0aGFuIHNldCBhbiBgaW50JyB0bworICAgYSBjb21waWxlZC1pbiBjb25zdGFudCwgc3VjaCBhcyBzZXQgYSB2YWx1ZSBmcm9tIGBvcHRhcmcnLCBzZXQgdGhlCisgICBvcHRpb24ncyBgZmxhZycgZmllbGQgdG8gemVybyBhbmQgaXRzIGB2YWwnIGZpZWxkIHRvIGEgbm9uemVybworICAgdmFsdWUgKHRoZSBlcXVpdmFsZW50IHNpbmdsZS1sZXR0ZXIgb3B0aW9uIGNoYXJhY3RlciwgaWYgdGhlcmUgaXMKKyAgIG9uZSkuICBGb3IgbG9uZyBvcHRpb25zIHRoYXQgaGF2ZSBhIHplcm8gYGZsYWcnIGZpZWxkLCBgZ2V0b3B0JworICAgcmV0dXJucyB0aGUgY29udGVudHMgb2YgdGhlIGB2YWwnIGZpZWxkLiAgKi8KKworc3RydWN0IG1meF9vcHRpb24KK3sKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgLyogaGFzX2FyZyBjYW4ndCBiZSBhbiBlbnVtIGJlY2F1c2Ugc29tZSBjb21waWxlcnMgY29tcGxhaW4gYWJvdXQKKyAgICAgdHlwZSBtaXNtYXRjaGVzIGluIGFsbCB0aGUgY29kZSB0aGF0IGFzc3VtZXMgaXQgaXMgYW4gaW50LiAgKi8KKyAgaW50IGhhc19hcmc7CisgIGludCAqZmxhZzsKKyAgaW50IHZhbDsKK307CisKKy8qIE5hbWVzIGZvciB0aGUgdmFsdWVzIG9mIHRoZSBgaGFzX2FyZycgZmllbGQgb2YgYHN0cnVjdCBvcHRpb24nLiAgKi8KKworI2RlZmluZSBtZnhfbm9fYXJndW1lbnQgICAgICAgICAwCisjZGVmaW5lIG1meF9yZXF1aXJlZF9hcmd1bWVudCAgIDEKKyNkZWZpbmUgbWZ4X29wdGlvbmFsX2FyZ3VtZW50ICAgMgorI2RlZmluZSBtZnhfZXhhY3RfYXJndW1lbnQgICAgICAweDEwICAgICAgICAgICAgLyogbm8gYWJicmV2LiAqLworCitpbnQgbWZ4X2dldG9wdChpbnQgYXJnYywgY2hhciAqKmFyZ3YsIGNvbnN0IGNoYXIgKnNob3J0b3B0cyk7CitpbnQgbWZ4X2dldG9wdF9sb25nKGludCBhcmdjLCBjaGFyICoqYXJndiwgY29uc3QgY2hhciAqc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWZ4X29wdGlvbiAqbG9uZ29wdHMsIGludCAqbG9uZ2luZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworLyogfSAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfX01GWF9HRVRPUFRfSCAqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvbHpvdGVzdC93cmFwLmggYi9sem8tMi4wMy9sem90ZXN0L3dyYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODgzNjA1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbHpvdGVzdC93cmFwLmgKQEAgLTAsMCArMSwyODQgQEAKKy8qIHdyYXAuaCAtLSB3cmFwcGVyIGZ1bmN0aW9ucworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3Npb24gbGV2ZWxzIG9mIExaTzFYLTk5OSBhbmQgTFpPMVktOTk5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoSEFWRV9MWk8xWF9IKQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeF85OTlfMV9jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF4Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCAxKTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXhfOTk5XzJfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeF85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgMik7Cit9CisKK0xaT19QUklWQVRFKGludCkKK2x6bzF4Xzk5OV8zX2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDMpOworfQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeF85OTlfNF9jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF4Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCA0KTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXhfOTk5XzVfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeF85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgNSk7Cit9CisKK0xaT19QUklWQVRFKGludCkKK2x6bzF4Xzk5OV82X2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDYpOworfQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeF85OTlfN19jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF4Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCA3KTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXhfOTk5XzhfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeF85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgOCk7Cit9CisKK0xaT19QUklWQVRFKGludCkKK2x6bzF4Xzk5OV85X2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDkpOworfQorCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChIQVZFX0xaTzFZX0gpCisKK0xaT19QUklWQVRFKGludCkKK2x6bzF5Xzk5OV8xX2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXlfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDEpOworfQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeV85OTlfMl9jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF5Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCAyKTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXlfOTk5XzNfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeV85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgMyk7Cit9CisKK0xaT19QUklWQVRFKGludCkKK2x6bzF5Xzk5OV80X2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXlfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDQpOworfQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeV85OTlfNV9jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF5Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCA1KTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXlfOTk5XzZfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeV85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgNik7Cit9CisKK0xaT19QUklWQVRFKGludCkKK2x6bzF5Xzk5OV83X2NvbXByZXNzICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gbHpvMXlfOTk5X2NvbXByZXNzX2xldmVsKHNyYywgc3JjX2xlbiwgZHN0LCBkc3RfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LnB0ciwgZGljdC5sZW4sIDAsIDcpOworfQorCitMWk9fUFJJVkFURShpbnQpCitsem8xeV85OTlfOF9jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzF5Xzk5OV9jb21wcmVzc19sZXZlbChzcmMsIHNyY19sZW4sIGRzdCwgZHN0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdC5wdHIsIGRpY3QubGVuLCAwLCA4KTsKK30KKworTFpPX1BSSVZBVEUoaW50KQorbHpvMXlfOTk5XzlfY29tcHJlc3MgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeV85OTlfY29tcHJlc3NfbGV2ZWwoc3JjLCBzcmNfbGVuLCBkc3QsIGRzdF9sZW4sIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3QucHRyLCBkaWN0LmxlbiwgMCwgOSk7Cit9CisKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBvdGhlciB3cmFwcGVycyAocHNldWRvIGNvbXByZXNzb3JzKQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QUklWQVRFKGludCkKK21lbWNweV94X2NvbXByZXNzICAgICAgICggY29uc3QgbHpvX2J5dGVwIHNyYywgbHpvX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBkc3QsIGx6b191aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBsem9fbWVtY3B5KGRzdCxzcmMsc3JjX2xlbik7CisgICAgKmRzdF9sZW4gPSBzcmNfbGVuOworICAgIGlmICh3cmttZW0pIHdya21lbSA9IDA7IC8qIGF2b2lkIHdhcm5pbmcgKi8KKyAgICByZXR1cm4gMDsKK30KKworCitMWk9fUFJJVkFURShpbnQpCittZW1zZXRfeF9jb21wcmVzcyAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgbHpvX21lbXNldChkc3QsMCxzcmNfbGVuKTsKKyAgICAqZHN0X2xlbiA9IHNyY19sZW47CisgICAgaWYgKHNyYykgc3JjID0gMDsgICAgICAgLyogYXZvaWQgd2FybmluZyAqLworICAgIGlmICh3cmttZW0pIHdya21lbSA9IDA7IC8qIGF2b2lkIHdhcm5pbmcgKi8KKyAgICByZXR1cm4gMDsKK30KKworCitMWk9fUFJJVkFURShpbnQpCithZGxlcjMyX3hfY29tcHJlc3MgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgbHpvX3VpbnQzMiBhZGxlcjsKKyAgICBhZGxlciA9IGx6b19hZGxlcjMyKDAsIE5VTEwsIDApOworICAgIGFkbGVyID0gbHpvX2FkbGVyMzIoYWRsZXIsIGRzdCwgc3JjX2xlbik7CisgICAgKmRzdF9sZW4gPSBzcmNfbGVuOworICAgIGlmIChzcmMpIHNyYyA9IDA7ICAgICAgIC8qIGF2b2lkIHdhcm5pbmcgKi8KKyAgICBpZiAod3JrbWVtKSB3cmttZW0gPSAwOyAvKiBhdm9pZCB3YXJuaW5nICovCisgICAgcmV0dXJuIDA7Cit9CisKKworTFpPX1BSSVZBVEUoaW50KQorY3JjMzJfeF9jb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIGx6b191aW50MzIgY3JjOworICAgIGNyYyA9IGx6b19jcmMzMigwLCBOVUxMLCAwKTsKKyAgICBjcmMgPSBsem9fY3JjMzIoY3JjLCBkc3QsIHNyY19sZW4pOworICAgICpkc3RfbGVuID0gc3JjX2xlbjsKKyAgICBpZiAoc3JjKSBzcmMgPSAwOyAgICAgICAvKiBhdm9pZCB3YXJuaW5nICovCisgICAgaWYgKHdya21lbSkgd3JrbWVtID0gMDsgLyogYXZvaWQgd2FybmluZyAqLworICAgIHJldHVybiAwOworfQorCisKKyNpZiBkZWZpbmVkKF9fTFpPX1BST0ZFU1NJT05BTF9fKQorIyAgaW5jbHVkZSAibHpvcHJvL3Rfd3JhcC5jaCIKKyNlbmRpZgorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9sem90ZXN0L3dyYXBtaXNjLmggYi9sem8tMi4wMy9sem90ZXN0L3dyYXBtaXNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhZDA3OAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL2x6b3Rlc3Qvd3JhcG1pc2MuaApAQCAtMCwwICsxLDI4OCBAQAorLyogd3JhcG1pc2MuaCAtLSBtaXNjIHdyYXBwZXIgZnVuY3Rpb25zIGZvciB0aGUgdGVzdCBkcml2ZXIKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXByZXNzaW9uIGxldmVscyBvZiB6bGliCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoQUxHX1pMSUIpCisKKyNkZWZpbmUgWkxJQl9NRU1fQ09NUFJFU1MgICAgICAgMAorI2RlZmluZSBaTElCX01FTV9ERUNPTVBSRVNTICAgICAwCisKK3N0YXRpYworaW50IHpsaWJfY29tcHJlc3MgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1ldGhvZCwgaW50IGxldmVsICkKK3sKKyAgICBpbnQgZXJyOworICAgIHVMb25nIGRlc3RMZW47CisKKyAgICBhc3NlcnQobWV0aG9kID09IFpfREVGTEFURUQpOworICAgIGRlc3RMZW4gPSAqZHN0X2xlbjsKKyAgICBlcnIgPSBjb21wcmVzczIoZHN0LCAmZGVzdExlbiwgc3JjLCBzcmNfbGVuLCBsZXZlbCk7CisgICAgKmRzdF9sZW4gPSBkZXN0TGVuOworICAgIExaT19VTlVTRUQobWV0aG9kKTsKKyAgICBMWk9fVU5VU0VEKHdya21lbSk7CisgICAgcmV0dXJuIGVycjsKK30KKworCitNX1BSSVZBVEUoaW50KQoremxpYl9kZWNvbXByZXNzICAgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7CisgICAgaW50IGVycjsKKyAgICB1TG9uZyBkZXN0TGVuOworCisgICAgZGVzdExlbiA9ICpkc3RfbGVuOworICAgIGVyciA9IHVuY29tcHJlc3MoZHN0LCAmZGVzdExlbiwgc3JjLCBzcmNfbGVuKTsKKyAgICAqZHN0X2xlbiA9IGRlc3RMZW47CisgICAgTFpPX1VOVVNFRCh3cmttZW0pOworICAgIHJldHVybiBlcnI7Cit9CisKKworTV9QUklWQVRFKGludCkKK3psaWJfOF8xX2NvbXByZXNzICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gemxpYl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sWl9ERUZMQVRFRCwxKTsgfQorCitNX1BSSVZBVEUoaW50KQoremxpYl84XzJfY29tcHJlc3MgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiB6bGliX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSxaX0RFRkxBVEVELDIpOyB9CisKK01fUFJJVkFURShpbnQpCit6bGliXzhfM19jb21wcmVzcyAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIHpsaWJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLFpfREVGTEFURUQsMyk7IH0KKworTV9QUklWQVRFKGludCkKK3psaWJfOF80X2NvbXByZXNzICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gemxpYl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sWl9ERUZMQVRFRCw0KTsgfQorCitNX1BSSVZBVEUoaW50KQoremxpYl84XzVfY29tcHJlc3MgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiB6bGliX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSxaX0RFRkxBVEVELDUpOyB9CisKK01fUFJJVkFURShpbnQpCit6bGliXzhfNl9jb21wcmVzcyAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIHpsaWJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLFpfREVGTEFURUQsNik7IH0KKworTV9QUklWQVRFKGludCkKK3psaWJfOF83X2NvbXByZXNzICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gemxpYl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sWl9ERUZMQVRFRCw3KTsgfQorCitNX1BSSVZBVEUoaW50KQoremxpYl84XzhfY29tcHJlc3MgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiB6bGliX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSxaX0RFRkxBVEVELDgpOyB9CisKK01fUFJJVkFURShpbnQpCit6bGliXzhfOV9jb21wcmVzcyAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIHpsaWJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLFpfREVGTEFURUQsOSk7IH0KKworCisjZW5kaWYgLyogQUxHX1pMSUIgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3Npb24gbGV2ZWxzIG9mIGJ6aXAyCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoQUxHX0JaSVAyKQorCisjZGVmaW5lIEJaSVAyX01FTV9DT01QUkVTUyAgICAgIDAKKyNkZWZpbmUgQlpJUDJfTUVNX0RFQ09NUFJFU1MgICAgMAorCitzdGF0aWMKK2ludCBiemlwMl9jb21wcmVzcyAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZXZlbCApCit7CisgICAgaW50IGVycjsKKyAgICB1bnNpZ25lZCBkZXN0TGVuOworICAgIHVuaW9uIHsgY29uc3QgbV9ieXRlcCBjc3JjOyBjaGFyKiBzcmM7IH0gdTsKKworICAgIHUuY3NyYyA9IHNyYzsgLyogVU5DT05TVCAqLworICAgIGRlc3RMZW4gPSAqZHN0X2xlbjsKKyAgICBlcnIgPSBCWjJfYnpCdWZmVG9CdWZmQ29tcHJlc3MoKGNoYXIqKWRzdCwgJmRlc3RMZW4sIHUuc3JjLCBzcmNfbGVuLCBsZXZlbCwgMCwgMCk7CisgICAgKmRzdF9sZW4gPSBkZXN0TGVuOworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKyAgICByZXR1cm4gZXJyOworfQorCisKK01fUFJJVkFURShpbnQpCitiemlwMl9kZWNvbXByZXNzICAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBpbnQgZXJyOworICAgIHVuc2lnbmVkIGRlc3RMZW47CisgICAgdW5pb24geyBjb25zdCBtX2J5dGVwIGNzcmM7IGNoYXIqIHNyYzsgfSB1OworCisgICAgdS5jc3JjID0gc3JjOyAvKiBVTkNPTlNUICovCisgICAgZGVzdExlbiA9ICpkc3RfbGVuOworICAgIGVyciA9IEJaMl9iekJ1ZmZUb0J1ZmZEZWNvbXByZXNzKChjaGFyKilkc3QsICZkZXN0TGVuLCB1LnNyYywgc3JjX2xlbiwgMCwgMCk7CisgICAgKmRzdF9sZW4gPSBkZXN0TGVuOworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKyAgICByZXR1cm4gZXJyOworfQorCisKK01fUFJJVkFURShpbnQpCitiemlwMl8xX2NvbXByZXNzICAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIGJ6aXAyX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSwxKTsgfQorCitNX1BSSVZBVEUoaW50KQorYnppcDJfMl9jb21wcmVzcyAgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiBiemlwMl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sMik7IH0KKworTV9QUklWQVRFKGludCkKK2J6aXAyXzNfY29tcHJlc3MgICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gYnppcDJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLDMpOyB9CisKK01fUFJJVkFURShpbnQpCitiemlwMl80X2NvbXByZXNzICAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIGJ6aXAyX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSw0KTsgfQorCitNX1BSSVZBVEUoaW50KQorYnppcDJfNV9jb21wcmVzcyAgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiBiemlwMl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sNSk7IH0KKworTV9QUklWQVRFKGludCkKK2J6aXAyXzZfY29tcHJlc3MgICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gYnppcDJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLDYpOyB9CisKK01fUFJJVkFURShpbnQpCitiemlwMl83X2NvbXByZXNzICAgICAgICAoIGNvbnN0IG1fYnl0ZXAgc3JjLCBtX3VpbnQgIHNyY19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fYnl0ZXAgZHN0LCBtX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fdm9pZHAgd3JrbWVtICkKK3sgcmV0dXJuIGJ6aXAyX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSw3KTsgfQorCitNX1BSSVZBVEUoaW50KQorYnppcDJfOF9jb21wcmVzcyAgICAgICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7IHJldHVybiBiemlwMl9jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sOCk7IH0KKworTV9QUklWQVRFKGludCkKK2J6aXAyXzlfY29tcHJlc3MgICAgICAgICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreyByZXR1cm4gYnppcDJfY29tcHJlc3Moc3JjLHNyY19sZW4sZHN0LGRzdF9sZW4sd3JrbWVtLDkpOyB9CisKKworI2VuZGlmIC8qIEFMR19CWklQMiAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBvdGhlciB3cmFwcGVycyAoZm9yIGJlbmNobWFya2luZyB0aGUgY2hlY2tzdW0gYWxnb3JpdGhtcykKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChBTEdfWkxJQikKKworTV9QUklWQVRFKGludCkKK3psaWJfYWRsZXIzMl94X2NvbXByZXNzICggY29uc3QgbV9ieXRlcCBzcmMsIG1fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ieXRlcCBkc3QsIG1fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV92b2lkcCB3cmttZW0gKQoreworICAgIHVMb25nIGFkbGVyOworICAgIGFkbGVyID0gYWRsZXIzMigxTCwgc3JjLCBzcmNfbGVuKTsKKyAgICAqZHN0X2xlbiA9IHNyY19sZW47CisgICAgTFpPX1VOVVNFRChhZGxlcik7CisgICAgTFpPX1VOVVNFRChkc3QpOworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKyAgICByZXR1cm4gMDsKK30KKworCitNX1BSSVZBVEUoaW50KQoremxpYl9jcmMzMl94X2NvbXByZXNzICAgKCBjb25zdCBtX2J5dGVwIHNyYywgbV91aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2J5dGVwIGRzdCwgbV91aW50cCBkc3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3ZvaWRwIHdya21lbSApCit7CisgICAgdUxvbmcgY3JjOworICAgIGNyYyA9IGNyYzMyKDBMLCBzcmMsIHNyY19sZW4pOworICAgICpkc3RfbGVuID0gc3JjX2xlbjsKKyAgICBMWk9fVU5VU0VEKGNyYyk7CisgICAgTFpPX1VOVVNFRChkc3QpOworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIEFMR19aTElCICovCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL21pbmlsem8vTWFrZWZpbGUuYW0gYi9sem8tMi4wMy9taW5pbHpvL01ha2VmaWxlLmFtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzY5M2MKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9taW5pbHpvL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsMTQgQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCisKK0FNX0NQUEZMQUdTID0gLURNSU5JTFpPX0hBVkVfQ09ORklHX0gKK0lOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvbHpvIC1JJCh0b3Bfc3JjZGlyKS9pbmNsdWRlCisKK25vaW5zdF9QUk9HUkFNUyA9IHRlc3RtaW5pCisKK3Rlc3RtaW5pX1NPVVJDRVMgPSB0ZXN0bWluaS5jIG1pbmlsem8uYworCitFWFRSQV9ESVNUID0gUkVBRE1FLkxaTyBNYWtlZmlsZS5taW5pbHpvIG1pbmlsem8uaAorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9taW5pbHpvL01ha2VmaWxlLmluIGIvbHpvLTIuMDMvbWluaWx6by9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTJkYzhiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbWluaWx6by9NYWtlZmlsZS5pbgpAQCAtMCwwICsxLDQ0MiBAQAorIyBNYWtlZmlsZS5pbiBnZW5lcmF0ZWQgYnkgYXV0b21ha2UgMS45LjYgZnJvbSBNYWtlZmlsZS5hbS4KKyMgQGNvbmZpZ3VyZV9pbnB1dEAKKworIyBDb3B5cmlnaHQgKEMpIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsCisjIDIwMDMsIDIwMDQsIDIwMDUgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIE1ha2VmaWxlLmluIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKKyMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgorCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFksIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdzsgd2l0aG91dAorIyBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCisjIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworQFNFVF9NQUtFQAorCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCisKK3NyY2RpciA9IEBzcmNkaXJACit0b3Bfc3JjZGlyID0gQHRvcF9zcmNkaXJACitWUEFUSCA9IEBzcmNkaXJACitwa2dkYXRhZGlyID0gJChkYXRhZGlyKS9AUEFDS0FHRUAKK3BrZ2xpYmRpciA9ICQobGliZGlyKS9AUEFDS0FHRUAKK3BrZ2luY2x1ZGVkaXIgPSAkKGluY2x1ZGVkaXIpL0BQQUNLQUdFQAordG9wX2J1aWxkZGlyID0gLi4KK2FtX19jZCA9IENEUEFUSD0iJCR7WlNIX1ZFUlNJT04rLn0kKFBBVEhfU0VQQVJBVE9SKSIgJiYgY2QKK0lOU1RBTEwgPSBASU5TVEFMTEAKK2luc3RhbGxfc2hfREFUQSA9ICQoaW5zdGFsbF9zaCkgLWMgLW0gNjQ0CitpbnN0YWxsX3NoX1BST0dSQU0gPSAkKGluc3RhbGxfc2gpIC1jCitpbnN0YWxsX3NoX1NDUklQVCA9ICQoaW5zdGFsbF9zaCkgLWMKK0lOU1RBTExfSEVBREVSID0gJChJTlNUQUxMX0RBVEEpCit0cmFuc2Zvcm0gPSAkKHByb2dyYW1fdHJhbnNmb3JtX25hbWUpCitOT1JNQUxfSU5TVEFMTCA9IDoKK1BSRV9JTlNUQUxMID0gOgorUE9TVF9JTlNUQUxMID0gOgorTk9STUFMX1VOSU5TVEFMTCA9IDoKK1BSRV9VTklOU1RBTEwgPSA6CitQT1NUX1VOSU5TVEFMTCA9IDoKK2J1aWxkX3RyaXBsZXQgPSBAYnVpbGRACitob3N0X3RyaXBsZXQgPSBAaG9zdEAKK3RhcmdldF90cmlwbGV0ID0gQHRhcmdldEAKK25vaW5zdF9QUk9HUkFNUyA9IHRlc3RtaW5pJChFWEVFWFQpCitzdWJkaXIgPSBtaW5pbHpvCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX3Rlc3RtaW5pX09CSkVDVFMgPSB0ZXN0bWluaS4kKE9CSkVYVCkgbWluaWx6by4kKE9CSkVYVCkKK3Rlc3RtaW5pX09CSkVDVFMgPSAkKGFtX3Rlc3RtaW5pX09CSkVDVFMpCit0ZXN0bWluaV9MREFERCA9ICQoTERBREQpCitERUZBVUxUX0lOQ0xVREVTID0gLUkuIC1JJChzcmNkaXIpIC1JJCh0b3BfYnVpbGRkaXIpCitkZXBjb21wID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9kZXBjb21wCithbV9fZGVwZmlsZXNfbWF5YmUgPSBkZXBmaWxlcworQ09NUElMRSA9ICQoQ0MpICQoREVGUykgJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSBcCisJJChDUFBGTEFHUykgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorTFRDT01QSUxFID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9Y29tcGlsZSAkKENDKSAkKERFRlMpIFwKKwkkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpICQoQ1BQRkxBR1MpIFwKKwkkKEFNX0NGTEFHUykgJChDRkxBR1MpCitDQ0xEID0gJChDQykKK0xJTksgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1saW5rICQoQ0NMRCkgJChBTV9DRkxBR1MpICQoQ0ZMQUdTKSBcCisJJChBTV9MREZMQUdTKSAkKExERkxBR1MpIC1vICRACitTT1VSQ0VTID0gJCh0ZXN0bWluaV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJCh0ZXN0bWluaV9TT1VSQ0VTKQorRVRBR1MgPSBldGFncworQ1RBR1MgPSBjdGFncworRElTVEZJTEVTID0gJChESVNUX0NPTU1PTikgJChESVNUX1NPVVJDRVMpICQoVEVYSU5GT1MpICQoRVhUUkFfRElTVCkKK0FDTE9DQUwgPSBAQUNMT0NBTEAKK0FNREVQX0ZBTFNFID0gQEFNREVQX0ZBTFNFQAorQU1ERVBfVFJVRSA9IEBBTURFUF9UUlVFQAorQU1UQVIgPSBAQU1UQVJACitBUiA9IEBBUkAKK0FVVE9DT05GID0gQEFVVE9DT05GQAorQVVUT0hFQURFUiA9IEBBVVRPSEVBREVSQAorQVVUT01BS0UgPSBAQVVUT01BS0VACitBV0sgPSBAQVdLQAorQ0MgPSBAQ0NACitDQ0RFUE1PREUgPSBAQ0NERVBNT0RFQAorQ0ZMQUdTID0gQENGTEFHU0AKK0NQUCA9IEBDUFBACitDUFBGTEFHUyA9IEBDUFBGTEFHU0AKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMREZMQUdTID0gQExERkxBR1NACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFpPX0FTTV9WUEFUSCA9IEBMWk9fQVNNX1ZQQVRIQAorTFpPX0NGTEFHUyA9IEBMWk9fQ0ZMQUdTQAorTFpPX0NQUEZMQUdTID0gQExaT19DUFBGTEFHU0AKK0xaT19FWFRSQV9DRkxBR1MgPSBATFpPX0VYVFJBX0NGTEFHU0AKK0xaT19FWFRSQV9DUFBGTEFHUyA9IEBMWk9fRVhUUkFfQ1BQRkxBR1NACitMWk9fVVNFX0FTTV9GQUxTRSA9IEBMWk9fVVNFX0FTTV9GQUxTRUAKK0xaT19VU0VfQVNNX1RSVUUgPSBATFpPX1VTRV9BU01fVFJVRUAKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitPQkpFWFQgPSBAT0JKRVhUQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFOTElCID0gQFJBTkxJQkAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACithY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKK2FtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorY29uZmlndXJlX0NGTEFHUyA9IEBjb25maWd1cmVfQ0ZMQUdTQAorY29uZmlndXJlX0NQUEZMQUdTID0gQGNvbmZpZ3VyZV9DUFBGTEFHU0AKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAorQU1fQ1BQRkxBR1MgPSAtRE1JTklMWk9fSEFWRV9DT05GSUdfSAorSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZS9sem8gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUKK3Rlc3RtaW5pX1NPVVJDRVMgPSB0ZXN0bWluaS5jIG1pbmlsem8uYworRVhUUkFfRElTVCA9IFJFQURNRS5MWk8gTWFrZWZpbGUubWluaWx6byBtaW5pbHpvLmgKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIG1pbmlsem8vTWFrZWZpbGUnOyBcCisJY2QgJCh0b3Bfc3JjZGlyKSAmJiBcCisJICAkKEFVVE9NQUtFKSAtLWdudSAgbWluaWx6by9NYWtlZmlsZQorLlBSRUNJT1VTOiBNYWtlZmlsZQorTWFrZWZpbGU6ICQoc3JjZGlyKS9NYWtlZmlsZS5pbiAkKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1cworCUBjYXNlICckPycgaW4gXAorCSAgKmNvbmZpZy5zdGF0dXMqKSBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaDs7IFwKKwkgICopIFwKKwkgICAgZWNobyAnIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKSc7IFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpOzsgXAorCWVzYWM7CisKKyQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzOiAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZSAkKENPTkZJR19TVEFUVVNfREVQRU5ERU5DSUVTKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCiskKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19jb25maWd1cmVfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKyQoQUNMT0NBTF9NNCk6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fYWNsb2NhbF9tNF9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorCitjbGVhbi1ub2luc3RQUk9HUkFNUzoKKwlAbGlzdD0nJChub2luc3RfUFJPR1JBTVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBmPWBlY2hvICQkcHxzZWQgJ3MvJChFWEVFWFQpJCQvLydgOyBcCisJICBlY2hvICIgcm0gLWYgJCRwICQkZiI7IFwKKwkgIHJtIC1mICQkcCAkJGYgOyBcCisJZG9uZQordGVzdG1pbmkkKEVYRUVYVCk6ICQodGVzdG1pbmlfT0JKRUNUUykgJCh0ZXN0bWluaV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiB0ZXN0bWluaSQoRVhFRVhUKQorCSQoTElOSykgJCh0ZXN0bWluaV9MREZMQUdTKSAkKHRlc3RtaW5pX09CSkVDVFMpICQodGVzdG1pbmlfTERBREQpICQoTElCUykKKworbW9zdGx5Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi4kKE9CSkVYVCkKKworZGlzdGNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICoudGFiLmMKKworQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL21pbmlsem8uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL3Rlc3RtaW5pLlBvQGFtX19xdW90ZUAKKworLmMubzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyAkPAorCisuYy5vYmo6CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgYCQoQ1lHUEFUSF9XKSAnJDwnYDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD1ubyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChDT01QSUxFKSAtYyBgJChDWUdQQVRIX1cpICckPCdgCisKKy5jLmxvOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChMVENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUGxvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPXllcyBAQU1ERVBCQUNLU0xBU0hACitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJREVQRElSPSQoREVQRElSKSAkKENDREVQTU9ERSkgJChkZXBjb21wKSBAQU1ERVBCQUNLU0xBU0hACitAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJJChMVENPTVBJTEUpIC1jIC1vICRAICQ8CisKK21vc3RseWNsZWFuLWxpYnRvb2w6CisJLXJtIC1mICoubG8KKworY2xlYW4tbGlidG9vbDoKKwktcm0gLXJmIC5saWJzIF9saWJzCisKK2Rpc3RjbGVhbi1saWJ0b29sOgorCS1ybSAtZiBsaWJ0b29sCit1bmluc3RhbGwtaW5mby1hbToKKworSUQ6ICQoSEVBREVSUykgJChTT1VSQ0VTKSAkKExJU1ApICQoVEFHU19GSUxFUykKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCW1raWQgLWZJRCAkJHVuaXF1ZQordGFnczogVEFHUworCitUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCWlmIHRlc3QgLXogIiQoRVRBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSI7IHRoZW4gOjsgZWxzZSBcCisJICB0ZXN0IC1uICIkJHVuaXF1ZSIgfHwgdW5pcXVlPSQkZW1wdHlfZml4OyBcCisJICAkKEVUQUdTKSAkKEVUQUdTRkxBR1MpICQoQU1fRVRBR1NGTEFHUykgJChFVEFHU19BUkdTKSBcCisJICAgICQkdGFncyAkJHVuaXF1ZTsgXAorCWZpCitjdGFnczogQ1RBR1MKK0NUQUdTOiAgJChIRUFERVJTKSAkKFNPVVJDRVMpICAkKFRBR1NfREVQRU5ERU5DSUVTKSBcCisJCSQoVEFHU19GSUxFUykgJChMSVNQKQorCXRhZ3M9OyBcCisJaGVyZT1gcHdkYDsgXAorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAgJChMSVNQKSAkKFRBR1NfRklMRVMpJzsgXAorCXVuaXF1ZT1gZm9yIGkgaW4gJCRsaXN0OyBkbyBcCisJICAgIGlmIHRlc3QgLWYgIiQkaSI7IHRoZW4gZWNobyAkJGk7IGVsc2UgZWNobyAkKHNyY2RpcikvJCRpOyBmaTsgXAorCSAgZG9uZSB8IFwKKwkgICQoQVdLKSAnICAgIHsgZmlsZXNbJCQwXSA9IDE7IH0gXAorCSAgICAgICBFTkQgeyBmb3IgKGkgaW4gZmlsZXMpIHByaW50IGk7IH0nYDsgXAorCXRlc3QgLXogIiQoQ1RBR1NfQVJHUykkJHRhZ3MkJHVuaXF1ZSIgXAorCSAgfHwgJChDVEFHUykgJChDVEFHU0ZMQUdTKSAkKEFNX0NUQUdTRkxBR1MpICQoQ1RBR1NfQVJHUykgXAorCSAgICAgJCR0YWdzICQkdW5pcXVlCisKK0dUQUdTOgorCWhlcmU9YCQoYW1fX2NkKSAkKHRvcF9idWlsZGRpcikgJiYgcHdkYCBcCisJICAmJiBjZCAkKHRvcF9zcmNkaXIpIFwKKwkgICYmIGd0YWdzIC1pICQoR1RBR1NfQVJHUykgJCRoZXJlCisKK2Rpc3RjbGVhbi10YWdzOgorCS1ybSAtZiBUQUdTIElEIEdUQUdTIEdSVEFHUyBHU1lNUyBHUEFUSCB0YWdzCisKK2Rpc3RkaXI6ICQoRElTVEZJTEVTKQorCUBzcmNkaXJzdHJpcD1gZWNobyAiJChzcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJdG9wc3JjZGlyc3RyaXA9YGVjaG8gIiQodG9wX3NyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwlsaXN0PSckKERJU1RGSUxFUyknOyBmb3IgZmlsZSBpbiAkJGxpc3Q7IGRvIFwKKwkgIGNhc2UgJCRmaWxlIGluIFwKKwkgICAgJChzcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkc3JjZGlyc3RyaXAvfHwiYDs7IFwKKwkgICAgJCh0b3Bfc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHRvcHNyY2RpcnN0cmlwL3wkKHRvcF9idWlsZGRpcikvfCJgOzsgXAorCSAgZXNhYzsgXAorCSAgaWYgdGVzdCAtZiAkJGZpbGUgfHwgdGVzdCAtZCAkJGZpbGU7IHRoZW4gZD0uOyBlbHNlIGQ9JChzcmNkaXIpOyBmaTsgXAorCSAgZGlyPWBlY2hvICIkJGZpbGUiIHwgc2VkIC1lICdzLC9bXi9dKiQkLCwnYDsgXAorCSAgaWYgdGVzdCAiJCRkaXIiICE9ICIkJGZpbGUiICYmIHRlc3QgIiQkZGlyIiAhPSAiLiI7IHRoZW4gXAorCSAgICBkaXI9Ii8kJGRpciI7IFwKKwkgICAgJChta2Rpcl9wKSAiJChkaXN0ZGlyKSQkZGlyIjsgXAorCSAgZWxzZSBcCisJICAgIGRpcj0nJzsgXAorCSAgZmk7IFwKKwkgIGlmIHRlc3QgLWQgJCRkLyQkZmlsZTsgdGhlbiBcCisJICAgIGlmIHRlc3QgLWQgJChzcmNkaXIpLyQkZmlsZSAmJiB0ZXN0ICQkZCAhPSAkKHNyY2Rpcik7IHRoZW4gXAorCSAgICAgIGNwIC1wUiAkKHNyY2RpcikvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgICAgZmk7IFwKKwkgICAgY3AgLXBSICQkZC8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgZWxzZSBcCisJICAgIHRlc3QgLWYgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBjcCAtcCAkJGQvJCRmaWxlICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgZXhpdCAxOyBcCisJICBmaTsgXAorCWRvbmUKK2NoZWNrLWFtOiBhbGwtYW0KK2NoZWNrOiBjaGVjay1hbQorYWxsLWFtOiBNYWtlZmlsZSAkKFBST0dSQU1TKQoraW5zdGFsbGRpcnM6CitpbnN0YWxsOiBpbnN0YWxsLWFtCitpbnN0YWxsLWV4ZWM6IGluc3RhbGwtZXhlYy1hbQoraW5zdGFsbC1kYXRhOiBpbnN0YWxsLWRhdGEtYW0KK3VuaW5zdGFsbDogdW5pbnN0YWxsLWFtCisKK2luc3RhbGwtYW06IGFsbC1hbQorCUAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1kYXRhLWFtCisKK2luc3RhbGxjaGVjazogaW5zdGFsbGNoZWNrLWFtCitpbnN0YWxsLXN0cmlwOgorCSQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIElOU1RBTExfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBcCisJICBpbnN0YWxsX3NoX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgSU5TVEFMTF9TVFJJUF9GTEFHPS1zIFwKKwkgIGB0ZXN0IC16ICckKFNUUklQKScgfHwgXAorCSAgICBlY2hvICJJTlNUQUxMX1BST0dSQU1fRU5WPVNUUklQUFJPRz0nJChTVFJJUCknImAgaW5zdGFsbAorbW9zdGx5Y2xlYW4tZ2VuZXJpYzoKKworY2xlYW4tZ2VuZXJpYzoKKworZGlzdGNsZWFuLWdlbmVyaWM6CisJLXRlc3QgLXogIiQoQ09ORklHX0NMRUFOX0ZJTEVTKSIgfHwgcm0gLWYgJChDT05GSUdfQ0xFQU5fRklMRVMpCisKK21haW50YWluZXItY2xlYW4tZ2VuZXJpYzoKKwlAZWNobyAiVGhpcyBjb21tYW5kIGlzIGludGVuZGVkIGZvciBtYWludGFpbmVycyB0byB1c2UiCisJQGVjaG8gIml0IGRlbGV0ZXMgZmlsZXMgdGhhdCBtYXkgcmVxdWlyZSBzcGVjaWFsIHRvb2xzIHRvIHJlYnVpbGQuIgorY2xlYW46IGNsZWFuLWFtCisKK2NsZWFuLWFtOiBjbGVhbi1nZW5lcmljIGNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgXAorCW1vc3RseWNsZWFuLWFtCisKK2Rpc3RjbGVhbjogZGlzdGNsZWFuLWFtCisJLXJtIC1yZiAuLyQoREVQRElSKQorCS1ybSAtZiBNYWtlZmlsZQorZGlzdGNsZWFuLWFtOiBjbGVhbi1hbSBkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBcCisJZGlzdGNsZWFuLWxpYnRvb2wgZGlzdGNsZWFuLXRhZ3MKKworZHZpOiBkdmktYW0KKworZHZpLWFtOgorCitodG1sOiBodG1sLWFtCisKK2luZm86IGluZm8tYW0KKworaW5mby1hbToKKworaW5zdGFsbC1kYXRhLWFtOgorCitpbnN0YWxsLWV4ZWMtYW06CisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtCisKKy5QSE9OWTogQ1RBR1MgR1RBR1MgYWxsIGFsbC1hbSBjaGVjayBjaGVjay1hbSBjbGVhbiBjbGVhbi1nZW5lcmljIFwKKwljbGVhbi1saWJ0b29sIGNsZWFuLW5vaW5zdFBST0dSQU1TIGN0YWdzIGRpc3RjbGVhbiBcCisJZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgZGlzdGNsZWFuLWxpYnRvb2wgXAorCWRpc3RjbGVhbi10YWdzIGRpc3RkaXIgZHZpIGR2aS1hbSBodG1sIGh0bWwtYW0gaW5mbyBpbmZvLWFtIFwKKwlpbnN0YWxsIGluc3RhbGwtYW0gaW5zdGFsbC1kYXRhIGluc3RhbGwtZGF0YS1hbSBpbnN0YWxsLWV4ZWMgXAorCWluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWluZm8gaW5zdGFsbC1pbmZvLWFtIGluc3RhbGwtbWFuIFwKKwlpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBpbnN0YWxsY2hlY2stYW0gaW5zdGFsbGRpcnMgXAorCW1haW50YWluZXItY2xlYW4gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuIFwKKwltb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4tbGlidG9vbCBcCisJcGRmIHBkZi1hbSBwcyBwcy1hbSB0YWdzIHVuaW5zdGFsbCB1bmluc3RhbGwtYW0gXAorCXVuaW5zdGFsbC1pbmZvLWFtCisKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL21pbmlsem8vTWFrZWZpbGUubWluaWx6byBiL2x6by0yLjAzL21pbmlsem8vTWFrZWZpbGUubWluaWx6bwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmVlMzczCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbWluaWx6by9NYWtlZmlsZS5taW5pbHpvCkBAIC0wLDAgKzEsMTEzIEBACisjCisjIGEgdmVyeSBzaW1wbGUgTWFrZWZpbGUgZm9yIG1pbmlMWk8KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworUFJPR1JBTSA9IHRlc3RtaW5pCitTT1VSQ0VTID0gdGVzdG1pbmkuYyBtaW5pbHpvLmMKKworZGVmYXVsdDoKKwlAZWNobyAiUGxlYXNlIGNob29zZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXRzOiIKKwlAZWNobyAiICAgIGdjYzogICBnY2MiCisJQGVjaG8gIiAgICB1bml4OiAgaHB1eCBocHV4OSIKKwlAZWNobyAiICAgIHdpbjMyOiB3aW4zMi1iYyB3aW4zMi1jeWd3aW4gd2luMzItZG0gd2luMzItbGNjd2luMzIiCisJQGVjaG8gIiAgICAgICAgICAgd2luMzItaW50ZWxjIHdpbjMyLW1pbmd3IHdpbjMyLXZjIHdpbjMyLXdhdGNvbWMiCisJQGVjaG8gIiAgICBkb3MxNjogZG9zMTYtYmMgZG9zMTYtbWMgZG9zMTYtd2MiCisJQGVjaG8gIiAgICBkb3MzMjogZG9zMzItZGpncHAyIGRvczMyLXdjIgorCisKKyMgTWFrZSBzdXJlIHRoYXQgbWluaWx6by5oLCBsem9jb25mLmggYW5kIGx6b2RlZnMuaCBhcmUgaW4gdGhlCisjIGN1cnJlbnQgZGlyY2VjdG9yeS4gT3RoZXJ3aXNlIHlvdSBtYXkgd2FudCB0byBhZGp1c3QgQ1BQRkxBR1MuCisjI0NQUEZMQUdTID0gLUkuLi9pbmNsdWRlL2x6byAtSS4KKworR0NDX0NGTEFHUyA9IC1zIC1XYWxsIC1PMiAtZm9taXQtZnJhbWUtcG9pbnRlcgorCisKKyMKKyMgZ2NjIChnZW5lcmljKQorIworCitnY2M6CisJZ2NjICQoQ1BQRkxBR1MpICQoR0NDX0NGTEFHUykgLW8gJChQUk9HUkFNKSAkKFNPVVJDRVMpCisKK2NjOgorCWNjICQoQ1BQRkxBR1MpIC1vICQoUFJPR1JBTSkgJChTT1VSQ0VTKQorCisKKyMKKyMgVU5JWAorIworCitocHV4OgorCWNjIC1BZSAkKENQUEZMQUdTKSAtbyAkKFBST0dSQU0pICQoU09VUkNFUykKKworaHB1eDk6CisJY2MgLUFhIC1EX0hQVVhfU09VUkNFICQoQ1BQRkxBR1MpIC1vICQoUFJPR1JBTSkgJChTT1VSQ0VTKQorCisKKyMKKyMgV2luZG93cyAoMzItYml0KQorIworCit3aW4zMi1ib3JsYW5kYyB3aW4zMi1iYzoKKwliY2MzMiAtTzIgLWQgLXcgLXctYXVzICQoQ1BQRkxBR1MpICQoU09VUkNFUykKKword2luMzItY3lnd2luMzIgd2luMzItY3lnd2luOgorCWdjYyAtbWN5Z3dpbiAkKENQUEZMQUdTKSAkKEdDQ19DRkxBR1MpIC1vICQoUFJPR1JBTSkuZXhlICQoU09VUkNFUykKKword2luMzItZGlnaXRhbG1hcnMgd2luMzItZG06CisJZG1jIC1tbiAtbyAtdy0gJChDUFBGTEFHUykgJChTT1VSQ0VTKQorCit3aW4zMi1pbnRlbGMgd2luMzItaWM6CisJaWNsIC1ub2xvZ28gLU1EIC1XMyAtTzIgLUdGICQoQ1BQRkxBR1MpICQoU09VUkNFUykKKword2luMzItbGNjd2luMzI6CisJQGVjaG8gIk5PVEU6IG5lZWQgbGNjIDIwMDItMDctMjUgb3IgbmV3ZXIsIG9sZGVyIHZlcnNpb25zIGhhdmUgYnVncyIKKwlsYyAtQSAtdW51c2VkIC1PICQoQ1BQRkxBR1MpICQoU09VUkNFUykKKword2luMzItbWluZ3czMiB3aW4zMi1taW5ndzoKKwlnY2MgLW1uby1jeWd3aW4gJChDUFBGTEFHUykgJChHQ0NfQ0ZMQUdTKSAtbyAkKFBST0dSQU0pLmV4ZSAkKFNPVVJDRVMpCisKK3dpbjMyLXZpc3VhbGMgd2luMzItdmM6CisJY2wgLW5vbG9nbyAtTUQgLVczIC1PMiAtR0YgJChDUFBGTEFHUykgJChTT1VSQ0VTKQorCit3aW4zMi13YXRjb21jIHdpbjMyLXdjOgorCXdjbDM4NiAtYnQ9bnQgLXpxIC1tZiAtNXIgLXpjIC13NSAtb25lYXR4ICQoQ1BQRkxBR1MpICQoU09VUkNFUykKKworCisjCisjIERPUyAoMTYtYml0KQorIworCitkb3MxNi1ib3JsYW5kYyBkb3MxNi1iYzoKKwliY2MgLW1sIC13IC1kIC1PIC00ICQoQ1BQRkxBR1MpICQoU09VUkNFUykKKworZG9zMTYtbWljcm9zb2Z0YyBkb3MxNi1tc2MgZG9zMTYtbWM6CisJY2wgLW5vbG9nbyAtZi0gLUFMIC1PIC1HMiAtVzMgJChDUFBGTEFHUykgJChTT1VSQ0VTKQorCitkb3MxNi13YXRjb21jIGRvczE2LXdjOgorCXdjbCAtenEgLW1sIC1idD1kb3MgLWw9ZG9zIC1veCAtdzUgJChDUFBGTEFHUykgJChTT1VSQ0VTKQorCisKKyMKKyMgRE9TICgzMi1iaXQpCisjCisKK2RvczMyLWRqZ3BwMiBkb3MzMi1kajI6CisJZ2NjICQoQ1BQRkxBR1MpICQoR0NDX0NGTEFHUykgLW8gJChQUk9HUkFNKS5leGUgJChTT1VSQ0VTKQorCitkb3MzMi13YXRjb21jIGRvczMyLXdjOgorCXdjbDM4NiAtenEgLW1mIC1idD1kb3MgLWw9ZG9zNGcgLTVyIC1veCAtemMgJChDUFBGTEFHUykgJChTT1VSQ0VTKQorCisKKyMKKyMgb3RoZXIgdGFyZ2V0cworIworCitjbGVhbjoKKwlybSAtZiAkKFBST0dSQU0pICQoUFJPR1JBTSkuZXhlICQoUFJPR1JBTSkubWFwICQoUFJPR1JBTSkudGRzCisJcm0gLWYgKi5lcnIgKi5vICoub2JqCisKKy5QSE9OWTogZGVmYXVsdCBjbGVhbgorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9taW5pbHpvL1JFQURNRS5MWk8gYi9sem8tMi4wMy9taW5pbHpvL1JFQURNRS5MWk8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcwMGYyOAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL21pbmlsem8vUkVBRE1FLkxaTwpAQCAtMCwwICsxLDEyMyBAQAorCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIG1pbmlMWk8gLS0gbWluaSBzdWJzZXQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgQXV0aG9yICA6IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgICAgICAgICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgICAgICAgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgVmVyc2lvbiA6IDIuMDMKKyBEYXRlICAgIDogMzAgQXByIDIwMDgKKworIEkndmUgY3JlYXRlZCBtaW5pTFpPIGZvciBwcm9qZWN0cyB3aGVyZSBpdCBpcyBpbmNvbnZlbmllbnQgdG8KKyBpbmNsdWRlIChvciByZXF1aXJlKSB0aGUgZnVsbCBMWk8gc291cmNlIGNvZGUganVzdCBiZWNhdXNlIHlvdQorIHdhbnQgdG8gYWRkIGEgbGl0dGxlIGJpdCBvZiBkYXRhIGNvbXByZXNzaW9uIHRvIHlvdXIgYXBwbGljYXRpb24uCisKKyBtaW5pTFpPIGltcGxlbWVudHMgdGhlIExaTzFYLTEgY29tcHJlc3NvciBhbmQgYm90aCB0aGUgc3RhbmRhcmQgYW5kCisgc2FmZSBMWk8xWCBkZWNvbXByZXNzb3IuIEFwYXJ0IGZyb20gZmFzdCBjb21wcmVzc2lvbiBpdCBhbHNvIHVzZWZ1bAorIGZvciBzaXR1YXRpb25zIHdoZXJlIHlvdSB3YW50IHRvIHVzZSBwcmUtY29tcHJlc3NlZCBkYXRhIGZpbGVzICh3aGljaAorIG11c3QgaGF2ZSBiZWVuIGNvbXByZXNzZWQgd2l0aCBMWk8xWC05OTkpLgorCisgbWluaUxaTyBjb25zaXN0cyBvZiBvbmUgQyBzb3VyY2UgZmlsZSBhbmQgdGhyZWUgaGVhZGVyIGZpbGVzOgorICAgIG1pbmlsem8uYworICAgIG1pbmlsem8uaCwgbHpvY29uZi5oLCBsem9kZWZzLmgKKworIFRvIHVzZSBtaW5pTFpPIGp1c3QgY29weSB0aGVzZSBmaWxlcyBpbnRvIHlvdXIgc291cmNlIGRpcmVjdG9yeSwgYWRkCisgbWluaWx6by5jIHRvIHlvdXIgTWFrZWZpbGUgYW5kICNpbmNsdWRlIG1pbmlsem8uaCBmcm9tIHlvdXIgcHJvZ3JhbS4KKyBOb3RlOiB5b3UgYWxzbyBtdXN0IGRpc3RyaWJ1dGUgdGhpcyBmaWxlIChgUkVBRE1FLkxaTycpIHdpdGggeW91ciBwcm9qZWN0LgorCisgbWluaWx6by5vIGNvbXBpbGVzIHRvIGFib3V0IDYga0IgKHVzaW5nIGdjYyBvciBWaXN1YWwgQyBvbiBhIGkzODYpLCBhbmQKKyB0aGUgc291cmNlcyBhcmUgYWJvdXQgMzAga0Igd2hlbiBwYWNrZWQgd2l0aCB6aXAgLSBzbyB0aGVyZSdzIG5vIG1vcmUKKyBleGN1c2UgdGhhdCB5b3VyIGFwcGxpY2F0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBkYXRhIGNvbXByZXNzaW9uIDotKQorCisgRm9yIG1vcmUgaW5mb3JtYXRpb24sIGRvY3VtZW50YXRpb24sIGV4YW1wbGUgcHJvZ3JhbXMgYW5kIG90aGVyIHN1cHBvcnQKKyBmaWxlcyAobGlrZSBNYWtlZmlsZXMgYW5kIGJ1aWxkIHNjcmlwdHMpIHBsZWFzZSBkb3dubG9hZCB0aGUgZnVsbCBMWk8KKyBwYWNrYWdlIGZyb20KKyAgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisKKyBIYXZlIGZ1biwKKyAgTWFya3VzCisKKworIFAuUy4gbWluaWx6by5jIGlzIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGZyb20gdGhlIExaTyBzb3VyY2VzIGFuZAorICAgICAgdGhlcmVmb3JlIGZ1bmN0aW9uYWxpdHkgaXMgY29tcGxldGVseSBpZGVudGljYWwKKworCisgQXBwZW5kaXggQTogYnVpbGRpbmcgbWluaUxaTworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBtaW5pTFpPIGlzIHdyaXR0ZW4gc3VjaCBhIHdheSB0aGF0IGl0IHNob3VsZCBjb21waWxlIGFuZCBydW4KKyBvdXQtb2YtdGhlLWJveCBvbiBtb3N0IG1hY2hpbmVzLgorCisgSWYgeW91IGFyZSBydW5uaW5nIG9uIGEgdmVyeSB1bnVzdWFsIGFyY2hpdGVjdHVyZSBhbmQgbHpvX2luaXQoKSBmYWlscyB0aGVuCisgeW91IHNob3VsZCBmaXJzdCByZWNvbXBpbGUgd2l0aCBgLURMWk9fREVCVUcnIHRvIHNlZSB3aGF0IGNhdXNlcyB0aGUgZmFpbHVyZS4KKyBUaGUgbW9zdCBwcm9iYWJsZSBjYXNlIGlzIHNvbWV0aGluZyBsaWtlIGBzaXplb2YoY2hhciAqKSAhPSBzaXplb2YobG9uZyknLgorIEFmdGVyIGlkZW50aWZ5aW5nIHRoZSBwcm9ibGVtIHlvdSBjYW4gY29tcGlsZSBieSBhZGRpbmcgc29tZSBkZWZpbmVzCisgbGlrZSBgLURTSVpFT0ZfQ0hBUl9QPTgnIHRvIHlvdXIgTWFrZWZpbGUuCisKKyBUaGUgYmVzdCBzb2x1dGlvbiBpcyAob2YgY291cnNlKSB1c2luZyBBdXRvY29uZiAtIGlmIHlvdXIgcHJvamVjdCB1c2VzCisgQXV0b2NvbmYgYW55d2F5IGp1c3QgYWRkIGAtRE1JTklMWk9fSEFWRV9DT05GSUdfSCcgdG8geW91ciBjb21waWxlcgorIGZsYWdzIHdoZW4gY29tcGlsaW5nIG1pbmlsem8uYy4gU2VlIHRoZSBMWk8gZGlzdHJpYnV0aW9uIGZvciBhbiBleGFtcGxlCisgaG93IHRvIHNldCB1cCBjb25maWd1cmUuaW4uCisKKworIEFwcGVuZGl4IEI6IGxpc3Qgb2YgcHVibGljIGZ1bmN0aW9ucyBhdmFpbGFibGUgaW4gbWluaUxaTworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExpYnJhcnkgaW5pdGlhbGl6YXRpb24KKyAgICBsem9faW5pdCgpCisKKyBDb21wcmVzc2lvbgorICAgIGx6bzF4XzFfY29tcHJlc3MoKQorCisgRGVjb21wcmVzc2lvbgorICAgIGx6bzF4X2RlY29tcHJlc3MoKQorICAgIGx6bzF4X2RlY29tcHJlc3Nfc2FmZSgpCisKKyBDaGVja3N1bSBmdW5jdGlvbnMKKyAgICBsem9fYWRsZXIzMigpCisKKyBWZXJzaW9uIGZ1bmN0aW9ucworICAgIGx6b192ZXJzaW9uKCkKKyAgICBsem9fdmVyc2lvbl9zdHJpbmcoKQorICAgIGx6b192ZXJzaW9uX2RhdGUoKQorCisgUG9ydGFibGUgKGJ1dCBzbG93KSBzdHJpbmcgZnVuY3Rpb25zCisgICAgbHpvX21lbWNtcCgpCisgICAgbHpvX21lbWNweSgpCisgICAgbHpvX21lbW1vdmUoKQorICAgIGx6b19tZW1zZXQoKQorCisKKyBBcHBlbmRpeCBDOiBzdWdnZXN0ZWQgbWFjcm9zIGZvciBgY29uZmlndXJlLmluJyB3aGVuIHVzaW5nIEF1dG9jb25mCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIENoZWNrcyBmb3IgdHlwZWRlZnMgYW5kIHN0cnVjdHVyZXMKKyAgICBBQ19DSEVDS19UWVBFKHB0cmRpZmZfdCxsb25nKQorICAgIEFDX1RZUEVfU0laRV9UCisgICAgQUNfQ0hFQ0tfU0laRU9GKHNob3J0KQorICAgIEFDX0NIRUNLX1NJWkVPRihpbnQpCisgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCisgICAgQUNfQ0hFQ0tfU0laRU9GKGxvbmcgbG9uZykKKyAgICBBQ19DSEVDS19TSVpFT0YoX19pbnQ2NCkKKyAgICBBQ19DSEVDS19TSVpFT0Yodm9pZCAqKQorICAgIEFDX0NIRUNLX1NJWkVPRihzaXplX3QpCisgICAgQUNfQ0hFQ0tfU0laRU9GKHB0cmRpZmZfdCkKKworIENoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfQ19DT05TVAorCisgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworICAgIEFDX0NIRUNLX0ZVTkNTKG1lbWNtcCBtZW1jcHkgbWVtbW92ZSBtZW1zZXQpCisKKworIEFwcGVuZGl4IEQ6IENvcHlyaWdodAorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIExaTyBhbmQgbWluaUxaTyBhcmUgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorCisgTFpPIGFuZCBtaW5pTFpPIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCisgUHVibGljIExpY2Vuc2UgKEdQTCkuICBTZWUgdGhlIGZpbGUgQ09QWUlORy4KKworIFNwZWNpYWwgbGljZW5zZXMgZm9yIGNvbW1lcmNpYWwgYW5kIG90aGVyIGFwcGxpY2F0aW9ucyB3aGljaAorIGFyZSBub3Qgd2lsbGluZyB0byBhY2NlcHQgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgYXJlIGF2YWlsYWJsZSBieSBjb250YWN0aW5nIHRoZSBhdXRob3IuCisKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvbWluaWx6by9taW5pbHpvLmMgYi9sem8tMi4wMy9taW5pbHpvL21pbmlsem8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTYyYjMxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbWluaWx6by9taW5pbHpvLmMKQEAgLTAsMCArMSw0MTEyIEBACisvKiBtaW5pbHpvLmMgLS0gbWluaSBzdWJzZXQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisvKgorICogTk9URToKKyAqICAgdGhlIGZ1bGwgTFpPIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGF0CisgKiAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisjZGVmaW5lIF9fTFpPX0lOX01JTklMWk8KKyNkZWZpbmUgTFpPX0JVSUxECisKKyNpZiBkZWZpbmVkKExaT19DRkdfRlJFRVNUQU5ESU5HKQorIyAgdW5kZWYgTUlOSUxaT19IQVZFX0NPTkZJR19ICisjICBkZWZpbmUgTFpPX0xJQkNfRlJFRVNUQU5ESU5HIDEKKyMgIGRlZmluZSBMWk9fT1NfRlJFRVNUQU5ESU5HIDEKKyNlbmRpZgorCisjaWZkZWYgTUlOSUxaT19IQVZFX0NPTkZJR19ICisjICBpbmNsdWRlIDxjb25maWcuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2lmIGRlZmluZWQoTUlOSUxaT19DRkdfVVNFX0lOVEVSTkFMX0xaT0RFRlMpCisKKyNpZm5kZWYgX19MWk9ERUZTX0hfSU5DTFVERUQKKyNkZWZpbmUgX19MWk9ERUZTX0hfSU5DTFVERUQgMQorCisjaWYgZGVmaW5lZChfX0NZR1dJTjMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKyNlbmRpZgorI2lmIGRlZmluZWQoX19JQk1DUFBfXykgJiYgIWRlZmluZWQoX19JQk1DX18pCisjICBkZWZpbmUgX19JQk1DX18gX19JQk1DUFBfXworI2VuZGlmCisjaWYgZGVmaW5lZChfX0lDTCkgJiYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjICBkZWZpbmUgX19JTlRFTF9DT01QSUxFUiBfX0lDTAorI2VuZGlmCisjaWYgMSAmJiBkZWZpbmVkKF9fSU5URVJJWCkgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX0FMTF9TT1VSQ0UpCisjICBkZWZpbmUgX0FMTF9TT1VSQ0UgMQorI2VuZGlmCisjaWYgZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChfX1I1OTAwX18pCisjICBpZiAhZGVmaW5lZChfX0xPTkdfTUFYX18pCisjICAgIGRlZmluZSBfX0xPTkdfTUFYX18gOTIyMzM3MjAzNjg1NDc3NTgwN0wKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX19saW51eF9fKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogMTkzKQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0tFSUxfXykgJiYgZGVmaW5lZChfX0MxNjZfXykKKyMgIHByYWdtYSB3YXJuaW5nIGRpc2FibGUgPSAzMjIKKyNlbGlmIDAgJiYgZGVmaW5lZChfX0MyNTFfXykKKyMgIHByYWdtYSB3YXJuaW5nIGRpc2FibGUgPSAzMjIKKyNlbmRpZgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmICFkZWZpbmVkKF9fTVdFUktTX18pCisjICBpZiAoX01TQ19WRVIgPj0gMTMwMCkKKyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDY2OCkKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAwICYmIGRlZmluZWQoX19XQVRDT01DX18pCisjICBpZiAoX19XQVRDT01DX18gPj0gMTA1MCkgJiYgKF9fV0FUQ09NQ19fIDwgMTA2MCkKKyMgICAgcHJhZ21hIHdhcm5pbmcgMjAzIDkKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChfX01TRE9TX18pICYmICFkZWZpbmVkKF9fRkxBVF9fKQorIyAgcHJhZ21hIG9wdGlvbiAtaAorI2VuZGlmCisjaWYgMAorI2RlZmluZSBMWk9fMHhmZmZmTCAgICAgICAgICAgICAweGZmZmZ1bAorI2RlZmluZSBMWk9fMHhmZmZmZmZmZkwgICAgICAgICAweGZmZmZmZmZmdWwKKyNlbHNlCisjZGVmaW5lIExaT18weGZmZmZMICAgICAgICAgICAgIDY1NTM1dWwKKyNkZWZpbmUgTFpPXzB4ZmZmZmZmZmZMICAgICAgICAgNDI5NDk2NzI5NXVsCisjZW5kaWYKKyNpZiAoTFpPXzB4ZmZmZkwgPT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAxIgorI2VuZGlmCisjaWYgKDE2dWwgKiAxNjM4NHVsICE9IDI2MjE0NHVsKQorIyAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VuZGlmCisjaWYgMAorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpCisjICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKKyNpZiAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gNCIKKyNlbmRpZgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorI2lmIGRlZmluZWQoX19aVENfXykgJiYgZGVmaW5lZChfX0k4Nl9fKSAmJiAhZGVmaW5lZChfX09TMl9fKQorIyAgaWYgIWRlZmluZWQoTVNET1MpCisjICAgIGRlZmluZSBNU0RPUyAxCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoX01TRE9TKQorIyAgICBkZWZpbmUgX01TRE9TIDEKKyMgIGVuZGlmCisjZWxpZiAwICYmIGRlZmluZWQoX19WRVJTSU9OKSAmJiBkZWZpbmVkKE1CX0xFTl9NQVgpCisjICBpZiAoX19WRVJTSU9OID09IDUyMCkgJiYgKE1CX0xFTl9NQVggPT0gMSkKKyMgICAgaWYgIWRlZmluZWQoX19BWlRFQ19DX18pCisjICAgICAgZGVmaW5lIF9fQVpURUNfQ19fIF9fVkVSU0lPTgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX0RPU19fKQorIyAgICAgIGRlZmluZSBfX0RPU19fIDEKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoTV9JODZITSkgJiYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorIyAgZGVmaW5lIHB0cmRpZmZfdCBsb25nCisjICBkZWZpbmUgX1BUUkRJRkZfVF9ERUZJTkVECisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICB1bmRlZiBfX0xaT19SRU5BTUVfQQorIyAgdW5kZWYgX19MWk9fUkVOQU1FX0IKKyMgIGlmIGRlZmluZWQoX19BWlRFQ19DX18pICYmIGRlZmluZWQoX19ET1NfXykKKyMgICAgZGVmaW5lIF9fTFpPX1JFTkFNRV9BIDEKKyMgIGVsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChNU0RPUykKKyMgICAgaWYgKF9NU0NfVkVSIDwgNjAwKQorIyAgICAgIGRlZmluZSBfX0xaT19SRU5BTUVfQSAxCisjICAgIGVsaWYgKF9NU0NfVkVSIDwgNzAwKQorIyAgICAgIGRlZmluZSBfX0xaT19SRU5BTUVfQiAxCisjICAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQoX19UU0NfXykgJiYgZGVmaW5lZChfX09TMl9fKQorIyAgICBkZWZpbmUgX19MWk9fUkVOQU1FX0EgMQorIyAgZWxpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgZGVmaW5lZChfX1RVUkJPQ19fKSAmJiAoX19UVVJCT0NfXyA8IDB4MDQxMCkKKyMgICAgZGVmaW5lIF9fTFpPX1JFTkFNRV9BIDEKKyMgIGVsaWYgZGVmaW5lZChfX1BBQ0lGSUNfXykgJiYgZGVmaW5lZChET1MpCisjICAgIGlmICFkZWZpbmVkKF9fZmFyKQorIyAgICAgIGRlZmluZSBfX2ZhciBmYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19uZWFyKQorIyAgICAgIGRlZmluZSBfX25lYXIgbmVhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX19MWk9fUkVOQU1FX0EpCisjICAgIGlmICFkZWZpbmVkKF9fY2RlY2wpCisjICAgICAgZGVmaW5lIF9fY2RlY2wgY2RlY2wKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19mYXIpCisjICAgICAgZGVmaW5lIF9fZmFyIGZhcgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX2h1Z2UpCisjICAgICAgZGVmaW5lIF9faHVnZSBodWdlCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fbmVhcikKKyMgICAgICBkZWZpbmUgX19uZWFyIG5lYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19wYXNjYWwpCisjICAgICAgZGVmaW5lIF9fcGFzY2FsIHBhc2NhbAorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX2h1Z2UpCisjICAgICAgZGVmaW5lIF9faHVnZSBodWdlCisjICAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQoX19MWk9fUkVOQU1FX0IpCisjICAgIGlmICFkZWZpbmVkKF9fY2RlY2wpCisjICAgICAgZGVmaW5lIF9fY2RlY2wgX2NkZWNsCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fZmFyKQorIyAgICAgIGRlZmluZSBfX2ZhciBfZmFyCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9faHVnZSkKKyMgICAgICBkZWZpbmUgX19odWdlIF9odWdlCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fbmVhcikKKyMgICAgICBkZWZpbmUgX19uZWFyIF9uZWFyCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fcGFzY2FsKQorIyAgICAgIGRlZmluZSBfX3Bhc2NhbCBfcGFzY2FsCisjICAgIGVuZGlmCisjICBlbGlmIChkZWZpbmVkKF9fUFVSRUNfXykgfHwgZGVmaW5lZChfX1RVUkJPQ19fKSkgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgICBpZiAhZGVmaW5lZChfX2NkZWNsKQorIyAgICAgIGRlZmluZSBfX2NkZWNsIGNkZWNsCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fcGFzY2FsKQorIyAgICAgIGRlZmluZSBfX3Bhc2NhbCBwYXNjYWwKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICB1bmRlZiBfX0xaT19SRU5BTUVfQQorIyAgdW5kZWYgX19MWk9fUkVOQU1FX0IKKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyNpZiBkZWZpbmVkKF9fQVpURUNfQ19fKSAmJiBkZWZpbmVkKF9fRE9TX18pCisjICBkZWZpbmUgTFpPX0JST0tFTl9DREVDTF9BTFRfU1lOVEFYIDEKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoTVNET1MpCisjICBpZiAoX01TQ19WRVIgPCA2MDApCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX0lOVEVHUkFMX0NPTlNUQU5UUyAxCisjICBlbmRpZgorIyAgaWYgKF9NU0NfVkVSIDwgNzAwKQorIyAgICBkZWZpbmUgTFpPX0JST0tFTl9JTlRFR1JBTF9QUk9NT1RJT04gMQorIyAgICBkZWZpbmUgTFpPX0JST0tFTl9TSVpFT0YgMQorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19QQUNJRklDX18pICYmIGRlZmluZWQoRE9TKQorIyAgZGVmaW5lIExaT19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTIDEKKyNlbGlmIGRlZmluZWQoX19UVVJCT0NfXykgJiYgZGVmaW5lZChfX01TRE9TX18pCisjICBpZiAoX19UVVJCT0NfXyA8IDB4MDE1MCkKKyMgICAgZGVmaW5lIExaT19CUk9LRU5fQ0RFQ0xfQUxUX1NZTlRBWCAxCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX0lOVEVHUkFMX0NPTlNUQU5UUyAxCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX0lOVEVHUkFMX1BST01PVElPTiAxCisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDAyMDApCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX1NJWkVPRiAxCisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDA0MDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgIGRlZmluZSBMWk9fQlJPS0VOX0NERUNMX0FMVF9TWU5UQVggMQorIyAgZW5kaWYKKyNlbGlmIChkZWZpbmVkKF9fUFVSRUNfXykgfHwgZGVmaW5lZChfX1RVUkJPQ19fKSkgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgZGVmaW5lIExaT19CUk9LRU5fQ0RFQ0xfQUxUX1NZTlRBWCAxCisjICBkZWZpbmUgTFpPX0JST0tFTl9TSVpFT0YgMQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAoX19XQVRDT01DX18gPCA5MDApCisjICBkZWZpbmUgTFpPX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMgMQorI2VuZGlmCisjaWYgZGVmaW5lZChfQ1JBWSkgJiYgZGVmaW5lZChfQ1JBWTEpCisjICBkZWZpbmUgTFpPX0JST0tFTl9TSUdORURfUklHSFRfU0hJRlQgMQorI2VuZGlmCisjZGVmaW5lIExaT19QUF9TVFJJTkdJWkUoeCkgICAgICAgICAgICAgI3gKKyNkZWZpbmUgTFpPX1BQX01BQ1JPX0VYUEFORCh4KSAgICAgICAgICBMWk9fUFBfU1RSSU5HSVpFKHgpCisjZGVmaW5lIExaT19QUF9DT05DQVQyKGEsYikgICAgICAgICAgICAgYSAjIyBiCisjZGVmaW5lIExaT19QUF9DT05DQVQzKGEsYixjKSAgICAgICAgICAgYSAjIyBiICMjIGMKKyNkZWZpbmUgTFpPX1BQX0NPTkNBVDQoYSxiLGMsZCkgICAgICAgICBhICMjIGIgIyMgYyAjIyBkCisjZGVmaW5lIExaT19QUF9DT05DQVQ1KGEsYixjLGQsZSkgICAgICAgYSAjIyBiICMjIGMgIyMgZCAjIyBlCisjZGVmaW5lIExaT19QUF9FQ09OQ0FUMihhLGIpICAgICAgICAgICAgTFpPX1BQX0NPTkNBVDIoYSxiKQorI2RlZmluZSBMWk9fUFBfRUNPTkNBVDMoYSxiLGMpICAgICAgICAgIExaT19QUF9DT05DQVQzKGEsYixjKQorI2RlZmluZSBMWk9fUFBfRUNPTkNBVDQoYSxiLGMsZCkgICAgICAgIExaT19QUF9DT05DQVQ0KGEsYixjLGQpCisjZGVmaW5lIExaT19QUF9FQ09OQ0FUNShhLGIsYyxkLGUpICAgICAgTFpPX1BQX0NPTkNBVDUoYSxiLGMsZCxlKQorI2lmIDEKKyNkZWZpbmUgTFpPX0NQUF9TVFJJTkdJWkUoeCkgICAgICAgICAgICAjeAorI2RlZmluZSBMWk9fQ1BQX01BQ1JPX0VYUEFORCh4KSAgICAgICAgIExaT19DUFBfU1RSSU5HSVpFKHgpCisjZGVmaW5lIExaT19DUFBfQ09OQ0FUMihhLGIpICAgICAgICAgICAgYSAjIyBiCisjZGVmaW5lIExaT19DUFBfQ09OQ0FUMyhhLGIsYykgICAgICAgICAgYSAjIyBiICMjIGMKKyNkZWZpbmUgTFpPX0NQUF9DT05DQVQ0KGEsYixjLGQpICAgICAgICBhICMjIGIgIyMgYyAjIyBkCisjZGVmaW5lIExaT19DUFBfQ09OQ0FUNShhLGIsYyxkLGUpICAgICAgYSAjIyBiICMjIGMgIyMgZCAjIyBlCisjZGVmaW5lIExaT19DUFBfRUNPTkNBVDIoYSxiKSAgICAgICAgICAgTFpPX0NQUF9DT05DQVQyKGEsYikKKyNkZWZpbmUgTFpPX0NQUF9FQ09OQ0FUMyhhLGIsYykgICAgICAgICBMWk9fQ1BQX0NPTkNBVDMoYSxiLGMpCisjZGVmaW5lIExaT19DUFBfRUNPTkNBVDQoYSxiLGMsZCkgICAgICAgTFpPX0NQUF9DT05DQVQ0KGEsYixjLGQpCisjZGVmaW5lIExaT19DUFBfRUNPTkNBVDUoYSxiLGMsZCxlKSAgICAgTFpPX0NQUF9DT05DQVQ1KGEsYixjLGQsZSkKKyNlbmRpZgorI2RlZmluZSBfX0xaT19NQVNLX0dFTihvLGIpICAgICAoKCgoKG8pIDw8ICgoYiktMSkpIC0gKG8pKSA8PCAxKSArIChvKSkKKyNpZiAxICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBpZiAhZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAxCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKyMgICAgZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBkZWZpbmUgTFpPX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjICBkZWZpbmUgTFpPX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19MWk9fT1NfT1ZFUlJJREUpCisjaWYgZGVmaW5lZChMWk9fT1NfRlJFRVNUQU5ESU5HKQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiZnJlZXN0YW5kaW5nIgorI2VsaWYgZGVmaW5lZChMWk9fT1NfRU1CRURERUQpCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJlbWJlZGRlZCIKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorIyAgZGVmaW5lIExaT19PU19FTUJFRERFRCAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJlbWJlZGRlZCIKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGRlZmluZSBMWk9fT1NfQ1lHV0lOICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiY3lnd2luIgorI2VsaWYgZGVmaW5lZChfX0VNWF9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIExaT19PU19FTVggICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJlbXgiCisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorIyAgZGVmaW5lIExaT19PU19CRU9TICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJiZW9zIgorI2VsaWYgZGVmaW5lZChfX0x5bnhfXykKKyMgIGRlZmluZSBMWk9fT1NfTFlOWE9TICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAibHlueG9zIgorI2VsaWYgZGVmaW5lZChfX09TNDAwX18pCisjICBkZWZpbmUgTFpPX09TX09TNDAwICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgIm9zNDAwIgorI2VsaWYgZGVmaW5lZChfX1FOWF9fKQorIyAgZGVmaW5lIExaT19PU19RTlggICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJxbngiCisjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChfX0RQTUkzMl9fKSAmJiAoX19CT1JMQU5EQ19fID49IDB4MDQ2MCkKKyMgIGRlZmluZSBMWk9fT1NfRE9TMzIgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiZG9zMzIiCisjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChfX0RQTUkxNl9fKQorIyAgZGVmaW5lIExaT19PU19ET1MxNiAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJkb3MxNiIKKyNlbGlmIGRlZmluZWQoX19aVENfXykgJiYgZGVmaW5lZChET1MzODYpCisjICBkZWZpbmUgTFpPX09TX0RPUzMyICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImRvczMyIgorI2VsaWYgZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkKF9fT1MyVjJfXykKKyMgIGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgICAgZGVmaW5lIExaT19PU19PUzIxNiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAib3MyMTYiCisjICBlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fT1NfT1MyICAgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgIm9zMiIKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNoZWNrIHlvdXIgbGltaXRzLmggaGVhZGVyIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19XSU42NF9fKSB8fCBkZWZpbmVkKF9XSU42NCkgfHwgZGVmaW5lZChXSU42NCkKKyMgIGRlZmluZSBMWk9fT1NfV0lONjQgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAid2luNjQiCisjZWxpZiBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19XSU5ET1dTXzM4Nl9fKQorIyAgZGVmaW5lIExaT19PU19XSU4zMiAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJ3aW4zMiIKKyNlbGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgZGVmaW5lZChfX0lOVEVMX18pCisjICBkZWZpbmUgTFpPX09TX1dJTjMyICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgIndpbjMyIgorI2VsaWYgZGVmaW5lZChfX1dJTkRPV1NfXykgfHwgZGVmaW5lZChfV0lORE9XUykgfHwgZGVmaW5lZChfV2luZG93cykKKyMgIGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkKKyMgICAgZGVmaW5lIExaT19PU19XSU4xNiAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAid2luMTYiCisjICBlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fT1NfV0lOMzIgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgIndpbjMyIgorIyAgZWxzZQorIyAgICBlcnJvciAiY2hlY2sgeW91ciBsaW1pdHMuaCBoZWFkZXIiCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0RPU19fKSB8fCBkZWZpbmVkKF9fTVNET1NfXykgfHwgZGVmaW5lZChfTVNET1MpIHx8IGRlZmluZWQoTVNET1MpIHx8IChkZWZpbmVkKF9fUEFDSUZJQ19fKSAmJiBkZWZpbmVkKERPUykpCisjICBpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICAgIGRlZmluZSBMWk9fT1NfRE9TMTYgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgImRvczE2IgorIyAgZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBkZWZpbmUgTFpPX09TX0RPUzMyICAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICJkb3MzMiIKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNoZWNrIHlvdXIgbGltaXRzLmggaGVhZGVyIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjICBpZiBkZWZpbmVkKF9fTlRfXykgJiYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKQorIyAgICBkZWZpbmUgTFpPX09TX0RPUzE2ICAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICJkb3MxNiIKKyMgIGVsaWYgZGVmaW5lZChfX05UX18pICYmIChfX1dBVENPTUNfXyA8IDExMDApCisjICAgIGRlZmluZSBMWk9fT1NfV0lOMzIgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgIndpbjMyIgorIyAgZWxpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0xJTlVYX18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVggICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgInBvc2l4IgorIyAgZWxzZQorIyAgICBlcnJvciAicGxlYXNlIHNwZWNpZnkgYSB0YXJnZXQgdXNpbmcgdGhlIC1idCBjb21waWxlciBvcHRpb24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX3BhbG1vc19fKQorIyAgZGVmaW5lIExaT19PU19QQUxNT1MgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJwYWxtb3MiCisjZWxpZiBkZWZpbmVkKF9fVE9TX18pIHx8IGRlZmluZWQoX19hdGFyaXN0X18pCisjICBkZWZpbmUgTFpPX09TX1RPUyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgInRvcyIKKyNlbGlmIGRlZmluZWQobWFjaW50b3NoKSAmJiAhZGVmaW5lZChfX3BwY19fKQorIyAgZGVmaW5lIExaT19PU19NQUNDTEFTU0lDICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJtYWNjbGFzc2ljIgorI2VsaWYgZGVmaW5lZChfX1ZNUykKKyMgIGRlZmluZSBMWk9fT1NfVk1TICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAidm1zIgorI2VsaWYgKChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fUjU5MDBfXykpIHx8IGRlZmluZWQoX19NSVBTX1BTWDJfXykpCisjICBkZWZpbmUgTFpPX09TX0NPTlNPTEUgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1NfQ09OU09MRV9QUzIgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX09TICAgICAgICAgICAiY29uc29sZSIKKyMgIGRlZmluZSBMWk9fSU5GT19PU19DT05TT0xFICAgInBzMiIKKyNlbGlmIChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fcHNwX18pKQorIyAgZGVmaW5lIExaT19PU19DT05TT0xFICAgICAgICAxCisjICBkZWZpbmUgTFpPX09TX0NPTlNPTEVfUFNQICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19PUyAgICAgICAgICAgImNvbnNvbGUiCisjICBkZWZpbmUgTFpPX0lORk9fT1NfQ09OU09MRSAgICJwc3AiCisjZWxzZQorIyAgZGVmaW5lIExaT19PU19QT1NJWCAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fT1MgICAgICAgICAgICJwb3NpeCIKKyNlbmRpZgorI2lmIChMWk9fT1NfUE9TSVgpCisjICBpZiBkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoX19BSVhfXykgfHwgZGVmaW5lZChfX2FpeF9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0FJWCAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImFpeCIKKyMgIGVsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9GUkVFQlNEICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJmcmVlYnNkIgorIyAgZWxpZiBkZWZpbmVkKF9faHB1eF9fKSB8fCBkZWZpbmVkKF9faHB1eCkKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9IUFVYICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJocHV4IgorIyAgZWxpZiBkZWZpbmVkKF9fSU5URVJJWCkKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9JTlRFUklYICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJpbnRlcml4IgorIyAgZWxpZiBkZWZpbmVkKF9fSVJJWF9fKSB8fCBkZWZpbmVkKF9faXJpeF9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0lSSVggICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImlyaXgiCisjICBlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19MSU5VWF9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX0xJTlVYICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgImxpbnV4IgorIyAgZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX01BQ09TX18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfTUFDT1NYICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAibWFjb3N4IgorIyAgZWxpZiBkZWZpbmVkKF9fbWluaXhfXykgfHwgZGVmaW5lZChfX21pbml4KQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX01JTklYICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgIm1pbml4IgorIyAgZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisjICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfTkVUQlNEICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgICAibmV0YnNkIgorIyAgZWxpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX09QRU5CU0QgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgIm9wZW5ic2QiCisjICBlbGlmIGRlZmluZWQoX19vc2ZfXykKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9PU0YgICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJvc2YiCisjICBlbGlmIGRlZmluZWQoX19zb2xhcmlzX18pIHx8IGRlZmluZWQoX19zdW4pCisjICAgIGlmIGRlZmluZWQoX19TVlI0KSB8fCBkZWZpbmVkKF9fc3ZyNF9fKQorIyAgICAgIGRlZmluZSBMWk9fT1NfUE9TSVhfU09MQVJJUyAgMQorIyAgICAgIGRlZmluZSBMWk9fSU5GT19PU19QT1NJWCAgICAgInNvbGFyaXMiCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgTFpPX09TX1BPU0lYX1NVTk9TICAgIDEKKyMgICAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICJzdW5vcyIKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfX3VsdHJpeF9fKSB8fCBkZWZpbmVkKF9fdWx0cml4KQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX1VMVFJJWCAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgInVsdHJpeCIKKyMgIGVsaWYgZGVmaW5lZChfVU5JQ09TKQorIyAgICBkZWZpbmUgTFpPX09TX1BPU0lYX1VOSUNPUyAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fT1NfUE9TSVggICAgICAgInVuaWNvcyIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19PU19QT1NJWF9VTktOT1dOICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX09TX1BPU0lYICAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgKExaT19PU19ET1MxNiB8fCBMWk9fT1NfT1MyMTYgfHwgTFpPX09TX1dJTjE2KQorIyAgaWYgKFVJTlRfTUFYICE9IExaT18weGZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjICBpZiAoVUxPTkdfTUFYICE9IExaT18weGZmZmZmZmZmTCkKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorI2VuZGlmCisjaWYgKExaT19PU19ET1MzMiB8fCBMWk9fT1NfT1MyIHx8IExaT19PU19XSU4zMiB8fCBMWk9fT1NfV0lONjQpCisjICBpZiAoVUlOVF9NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjICBpZiAoVUxPTkdfTUFYICE9IExaT18weGZmZmZmZmZmTCkKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChDSUwpICYmIGRlZmluZWQoX0dOVUNDKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIExaT19DQ19DSUxMWSAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJDaWxseSIKKyMgIGlmIGRlZmluZWQoX19DSUxMWV9fKQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fQ0lMTFlfXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgMCAmJiBkZWZpbmVkKFNEQ0MpICYmIGRlZmluZWQoX19WRVJTSU9OX18pICYmICFkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIExaT19DQ19TRENDICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJzZGNjIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKFNEQ0MpCisjZWxpZiBkZWZpbmVkKF9fUEFUSFNDQUxFX18pICYmIGRlZmluZWQoX19QQVRIQ0NfUEFUQ0hMRVZFTF9fKQorIyAgZGVmaW5lIExaT19DQ19QQVRIU0NBTEUgICAgICAoX19QQVRIQ0NfXyAqIDB4MTAwMDBMICsgX19QQVRIQ0NfTUlOT1JfXyAqIDB4MTAwICsgX19QQVRIQ0NfUEFUQ0hMRVZFTF9fKQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiUGF0aHNjYWxlIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIF9fUEFUSFNDQUxFX18KKyNlbGlmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyMgIGRlZmluZSBMWk9fQ0NfSU5URUxDICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiSW50ZWwgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX0lOVEVMX0NPTVBJTEVSKQorIyAgaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyAgICBkZWZpbmUgTFpPX0NDX1NZTlRBWF9NU0MgMQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0NDX1NZTlRBWF9HTlVDIDEKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fUE9DQ19fKSAmJiBkZWZpbmVkKF9XSU4zMikKKyMgIGRlZmluZSBMWk9fQ0NfUEVMTEVTQyAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiUGVsbGVzIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19QT0NDX18pCisjZWxpZiBkZWZpbmVkKF9fbGx2bV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fVkVSU0lPTl9fKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfTUlOT1JfXykgJiYgZGVmaW5lZChfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgICBkZWZpbmUgTFpPX0NDX0xMVk0gICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0NDX0xMVk0gICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDApCisjICBlbmRpZgorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAibGx2bS1nY2MiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIF9fVkVSU0lPTl9fCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fVkVSU0lPTl9fKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfTUlOT1JfXykgJiYgZGVmaW5lZChfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgICBkZWZpbmUgTFpPX0NDX0dOVUMgICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgZWxpZiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKQorIyAgICBkZWZpbmUgTFpPX0NDX0dOVUMgICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDApCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ0NfR05VQyAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMKQorIyAgZW5kaWYKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgImdjYyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgX19WRVJTSU9OX18KKyNlbGlmIGRlZmluZWQoX19BQ0tfXykgJiYgZGVmaW5lZChfQUNLKQorIyAgZGVmaW5lIExaT19DQ19BQ0sgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJBbXN0ZXJkYW0gQ29tcGlsZXIgS2l0IEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgICJ1bmtub3duIgorI2VsaWYgZGVmaW5lZChfX0FaVEVDX0NfXykKKyMgIGRlZmluZSBMWk9fQ0NfQVpURUNDICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiQXp0ZWMgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX0FaVEVDX0NfXykKKyNlbGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIExaT19DQ19CT1JMQU5EQyAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJCb3JsYW5kIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19CT1JMQU5EQ19fKQorI2VsaWYgZGVmaW5lZChfQ1JBWUMpICYmIGRlZmluZWQoX1JFTEVBU0UpCisjICBkZWZpbmUgTFpPX0NDX0NSQVlDICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIkNyYXkgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfUkVMRUFTRSkKKyNlbGlmIGRlZmluZWQoX19ETUNfXykgJiYgZGVmaW5lZChfX1NDX18pCisjICBkZWZpbmUgTFpPX0NDX0RNQyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIkRpZ2l0YWwgTWFycyBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fRE1DX18pCisjZWxpZiBkZWZpbmVkKF9fREVDQykKKyMgIGRlZmluZSBMWk9fQ0NfREVDQyAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiREVDIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19ERUNDKQorI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisjICBkZWZpbmUgTFpPX0NDX0hJR0hDICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIk1ldGFXYXJlIEhpZ2ggQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisjICBkZWZpbmUgTFpPX0NDX0lBUkMgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIklBUiBDIgorIyAgaWYgZGVmaW5lZChfX1ZFUl9fKQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fVkVSX18pCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19JQk1DX18pCisjICBkZWZpbmUgTFpPX0NDX0lCTUMgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIklCTSBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fSUJNQ19fKQorI2VsaWYgZGVmaW5lZChfX0tFSUxfXykgJiYgZGVmaW5lZChfX0MxNjZfXykKKyMgIGRlZmluZSBMWk9fQ0NfS0VJTEMgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiS2VpbCBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fQzE2Nl9fKQorI2VsaWYgZGVmaW5lZChfX0xDQ19fKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfX0xDQ09QVElNTEVWRUwpCisjICBkZWZpbmUgTFpPX0NDX0xDQ1dJTjMyICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgImxjYy13aW4zMiIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fTENDX18pCisjICBkZWZpbmUgTFpPX0NDX0xDQyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgImxjYyIKKyMgIGlmIGRlZmluZWQoX19MQ0NfVkVSU0lPTl9fKQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fTENDX1ZFUlNJT05fXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgIGRlZmluZSBMWk9fQ0NfTVNDICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiTWljcm9zb2Z0IEMiCisjICBpZiBkZWZpbmVkKF9NU0NfRlVMTF9WRVIpCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX01TQ19WRVIpICIuIiBMWk9fUFBfTUFDUk9fRVhQQU5EKF9NU0NfRlVMTF9WRVIpCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX01TQ19WRVIpCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX01XRVJLU19fKQorIyAgZGVmaW5lIExaT19DQ19NV0VSS1MgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJNZXRyb3dlcmtzIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19NV0VSS1NfXykKKyNlbGlmIChkZWZpbmVkKF9fTkRQQ19fKSB8fCBkZWZpbmVkKF9fTkRQWF9fKSkgJiYgZGVmaW5lZChfX2kzODYpCisjICBkZWZpbmUgTFpPX0NDX05EUEMgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIk1pY3Jvd2F5IE5EUCBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbGlmIGRlZmluZWQoX19QQUNJRklDX18pCisjICBkZWZpbmUgTFpPX0NDX1BBQ0lGSUNDICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19DQyAgICAgICAgICAgIlBhY2lmaWMgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1BBQ0lGSUNfXykKKyNlbGlmIGRlZmluZWQoX19QR0kpICYmIChkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX1dJTjMyX18pKQorIyAgZGVmaW5lIExaT19DQ19QR0kgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJQb3J0bGFuZCBHcm91cCBQR0kgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fUFVSRUNfXykgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgZGVmaW5lIExaT19DQ19QVVJFQyAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJQdXJlIEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19QVVJFQ19fKQorI2VsaWYgZGVmaW5lZChfX1NDX18pICYmIGRlZmluZWQoX19aVENfXykKKyMgIGRlZmluZSBMWk9fQ0NfU1lNQU5URUNDICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiU3ltYW50ZWMgQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1NDX18pCisjZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0MpCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJTdW5Qcm8gQyIKKyMgIGlmICgoX19TVU5QUk9fQykrMCA+IDApCisjICAgIGRlZmluZSBMWk9fQ0NfU1VOUFJPQyAgICAgIF9fU1VOUFJPX0MKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1NVTlBST19DKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0NDX1NVTlBST0MgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJTdW5Qcm8gQyIKKyMgIGlmICgoX19TVU5QUk9fQ0MpKzAgPiAwKQorIyAgICBkZWZpbmUgTFpPX0NDX1NVTlBST0MgICAgICBfX1NVTlBST19DQworIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fU1VOUFJPX0NDKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0NDX1NVTlBST0MgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19USU5ZQ19fKQorIyAgZGVmaW5lIExaT19DQ19USU5ZQyAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJUaW55IEMiCisjICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICAgIExaT19QUF9NQUNST19FWFBBTkQoX19USU5ZQ19fKQorI2VsaWYgZGVmaW5lZChfX1RTQ19fKQorIyAgZGVmaW5lIExaT19DQ19UT1BTUEVFREMgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJUb3BTcGVlZCBDIgorIyAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fVFNDX18pCisjZWxpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKQorIyAgZGVmaW5lIExaT19DQ19XQVRDT01DICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJXYXRjb20gQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1dBVENPTUNfXykKKyNlbGlmIGRlZmluZWQoX19UVVJCT0NfXykKKyMgIGRlZmluZSBMWk9fQ0NfVFVSQk9DICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAiVHVyYm8gQyIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgTFpPX1BQX01BQ1JPX0VYUEFORChfX1RVUkJPQ19fKQorI2VsaWYgZGVmaW5lZChfX1pUQ19fKQorIyAgZGVmaW5lIExaT19DQ19aT1JURUNIQyAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQ0MgICAgICAgICAgICJab3J0ZWNoIEMiCisjICBpZiAoX19aVENfXyA9PSAweDMxMCkKKyMgICAgZGVmaW5lIExaT19JTkZPX0NDVkVSICAgICAgIjB4MzEwIgorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX0lORk9fQ0NWRVIgICAgICBMWk9fUFBfTUFDUk9fRVhQQU5EKF9fWlRDX18pCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fQ0NfVU5LTk9XTiAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0NDICAgICAgICAgICAidW5rbm93biIKKyMgIGRlZmluZSBMWk9fSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZW5kaWYKKyNpZiAwICYmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkgJiYgIWRlZmluZWQoX01TQ19GVUxMX1ZFUikKKyMgIGVycm9yICJMWk9fQ0NfTVNDOiBfTVNDX0ZVTExfVkVSIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19MWk9fQVJDSF9PVkVSUklERSkgJiYgIWRlZmluZWQoTFpPX0FSQ0hfR0VORVJJQykgJiYgZGVmaW5lZChfQ1JBWSkKKyMgIGlmIChVSU5UX01BWCA+IExaT18weGZmZmZmZmZmTCkgJiYgZGVmaW5lZChfQ1JBWSkKKyMgICAgaWYgZGVmaW5lZChfQ1JBWU1QUCkgfHwgZGVmaW5lZChfQ1JBWVQzRCkgfHwgZGVmaW5lZChfQ1JBWVQzRSkKKyMgICAgICBkZWZpbmUgTFpPX0FSQ0hfQ1JBWV9NUFAgICAgIDEKKyMgICAgZWxpZiBkZWZpbmVkKF9DUkFZMSkKKyMgICAgICBkZWZpbmUgTFpPX0FSQ0hfQ1JBWV9QVlAgICAgIDEKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0xaT19BUkNIX09WRVJSSURFKQorI2lmIGRlZmluZWQoTFpPX0FSQ0hfR0VORVJJQykKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJnZW5lcmljIgorI2VsaWYgKExaT19PU19ET1MxNiB8fCBMWk9fT1NfT1MyMTYgfHwgTFpPX09TX1dJTjE2KQorIyAgZGVmaW5lIExaT19BUkNIX0kwODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19BUkNIX0lBMTYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImkwODYiCisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9NX0FMUEhBKQorIyAgZGVmaW5lIExaT19BUkNIX0FMUEhBICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImFscGhhIgorI2VsaWYgKExaT19BUkNIX0NSQVlfTVBQKSAmJiAoZGVmaW5lZChfQ1JBWVQzRCkgfHwgZGVmaW5lZChfQ1JBWVQzRSkpCisjICBkZWZpbmUgTFpPX0FSQ0hfQUxQSEEgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYWxwaGEiCisjZWxpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KQorIyAgZGVmaW5lIExaT19BUkNIX0FNRDY0ICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImFtZDY0IgorI2VsaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IChkZWZpbmVkKF9NX0FSTSkgJiYgZGVmaW5lZChfTV9USFVNQikpCisjICBkZWZpbmUgTFpPX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfQVJNX1RIVU1CICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiYXJtX3RodW1iIgorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fSUNDQVJNX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisjICBpZiBkZWZpbmVkKF9fQ1BVX01PREVfXykgJiYgKChfX0NQVV9NT0RFX18pKzAgPT0gMSkKKyMgICAgZGVmaW5lIExaT19BUkNIX0FSTV9USFVNQiAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICJhcm1fdGh1bWIiCisjICBlbGlmIGRlZmluZWQoX19DUFVfTU9ERV9fKSAmJiAoKF9fQ1BVX01PREVfXykrMCA9PSAyKQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImFybSIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICJhcm0iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9NX0FSTSkKKyMgIGRlZmluZSBMWk9fQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJhcm0iCisjZWxpZiAoVUlOVF9NQVggPD0gTFpPXzB4ZmZmZkwpICYmIGRlZmluZWQoX19BVlJfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9BVlIgICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJhdnIiCisjZWxpZiBkZWZpbmVkKF9fYmZpbl9fKQorIyAgZGVmaW5lIExaT19BUkNIX0JMQUNLRklOICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImJsYWNrZmluIgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fQzE2Nl9fKQorIyAgZGVmaW5lIExaT19BUkNIX0MxNjYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImMxNjYiCisjZWxpZiBkZWZpbmVkKF9fY3Jpc19fKQorIyAgZGVmaW5lIExaT19BUkNIX0NSSVMgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImNyaXMiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0NFWjgwX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfRVo4MCAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiZXo4MCIKKyNlbGlmIGRlZmluZWQoX19IODMwMF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykgfHwgZGVmaW5lZChfX0g4MzAwU1hfXykKKyMgIGRlZmluZSBMWk9fQVJDSF9IODMwMCAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJoODMwMCIKKyNlbGlmIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19ocHBhKQorIyAgZGVmaW5lIExaT19BUkNIX0hQUEEgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImhwcGEiCisjZWxpZiBkZWZpbmVkKF9fMzg2X18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fSTM4NikKKyMgIGRlZmluZSBMWk9fQVJDSF9JMzg2ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTMyICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJpMzg2IgorI2VsaWYgKExaT19DQ19aT1JURUNIQyAmJiBkZWZpbmVkKF9fSTg2X18pKQorIyAgZGVmaW5lIExaT19BUkNIX0kzODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19BUkNIX0lBMzIgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgImkzODYiCisjZWxpZiAoTFpPX09TX0RPUzMyICYmIExaT19DQ19ISUdIQykgJiYgZGVmaW5lZChfSTM4NikKKyMgIGRlZmluZSBMWk9fQVJDSF9JMzg2ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTMyICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJpMzg2IgorI2VsaWYgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX2lhNjQpIHx8IGRlZmluZWQoX01fSUE2NCkKKyMgIGRlZmluZSBMWk9fQVJDSF9JQTY0ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJpYTY0IgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fbTMyY19fKQorIyAgZGVmaW5lIExaT19BUkNIX00xNkMgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm0xNmMiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0NNMTZDX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTTE2QyAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibTE2YyIKKyNlbGlmIGRlZmluZWQoX19tMzJyX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfTTMyUiAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibTMyciIKKyNlbGlmIChMWk9fT1NfVE9TKSB8fCBkZWZpbmVkKF9fbTY4a19fKSB8fCBkZWZpbmVkKF9fbTY4MDAwX18pIHx8IGRlZmluZWQoX19tYzY4MDAwX18pIHx8IGRlZmluZWQoX19tYzY4MDIwX18pIHx8IGRlZmluZWQoX01fTTY4SykKKyMgIGRlZmluZSBMWk9fQVJDSF9NNjhLICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJtNjhrIgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fQzI1MV9fKQorIyAgZGVmaW5lIExaT19BUkNIX01DUzI1MSAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczI1MSIKKyNlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkgJiYgZGVmaW5lZChfX0M1MV9fKQorIyAgZGVmaW5lIExaT19BUkNIX01DUzUxICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczUxIgorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fSUNDODA1MV9fKQorIyAgZGVmaW5lIExaT19BUkNIX01DUzUxICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczUxIgorI2VsaWYgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX01JUFNfQVJDSCkgfHwgZGVmaW5lZChfTV9NUlgwMDApCisjICBkZWZpbmUgTFpPX0FSQ0hfTUlQUyAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAibWlwcyIKKyNlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmTCkgJiYgZGVmaW5lZChfX01TUDQzMF9fKQorIyAgZGVmaW5lIExaT19BUkNIX01TUDQzMCAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1zcDQzMCIKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgJiYgZGVmaW5lZChfX0lDQzQzMF9fKQorIyAgZGVmaW5lIExaT19BUkNIX01TUDQzMCAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1zcDQzMCIKKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjKSB8fCBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChfTV9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BXUikKKyMgIGRlZmluZSBMWk9fQVJDSF9QT1dFUlBDICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAgICJwb3dlcnBjIgorI2VsaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTApIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBkZWZpbmVkKF9fczM5MHgpCisjICBkZWZpbmUgTFpPX0FSQ0hfUzM5MCAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAiczM5MCIKKyNlbGlmIGRlZmluZWQoX19zaF9fKSB8fCBkZWZpbmVkKF9NX1NIKQorIyAgZGVmaW5lIExaT19BUkNIX1NIICAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgInNoIgorI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19zcGFyYykgfHwgZGVmaW5lZChfX3NwYXJjdjgpCisjICBkZWZpbmUgTFpPX0FSQ0hfU1BBUkMgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAic3BhcmMiCisjZWxpZiBkZWZpbmVkKF9fU1BVX18pCisjICBkZWZpbmUgTFpPX0FSQ0hfU1BVICAgICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgICAic3B1IgorI2VsaWYgKFVJTlRfTUFYID09IExaT18weGZmZmZMKSAmJiBkZWZpbmVkKF9fejgwKQorIyAgZGVmaW5lIExaT19BUkNIX1o4MCAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgIno4MCIKKyNlbGlmIChMWk9fQVJDSF9DUkFZX1BWUCkKKyMgIGlmIGRlZmluZWQoX0NSQVlTVjEpCisjICAgIGRlZmluZSBMWk9fQVJDSF9DUkFZX1NWMSAgICAgICAxCisjICAgIGRlZmluZSBMWk9fSU5GT19BUkNIICAgICAgICAgICAiY3JheV9zdjEiCisjICBlbGlmIChfQUREUjY0KQorIyAgICBkZWZpbmUgTFpPX0FSQ0hfQ1JBWV9UOTAgICAgICAgMQorIyAgICBkZWZpbmUgTFpPX0lORk9fQVJDSCAgICAgICAgICAgImNyYXlfdDkwIgorIyAgZWxpZiAoX0FERFIzMikKKyMgICAgZGVmaW5lIExaT19BUkNIX0NSQVlfWU1QICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICJjcmF5X3ltcCIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19BUkNIX0NSQVlfWE1QICAgICAgIDEKKyMgICAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICJjcmF5X3htcCIKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIExaT19BUkNIX1VOS05PV04gICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FSQ0ggICAgICAgICAgICAgInVua25vd24iCisjZW5kaWYKKyNlbmRpZgorI2lmIDEgJiYgKExaT19BUkNIX1VOS05PV04pICYmIChMWk9fT1NfRE9TMzIgfHwgTFpPX09TX09TMikKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgMSAmJiAoTFpPX0FSQ0hfVU5LTk9XTikgJiYgKExaT19PU19XSU4zMikKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgV0lOMzIgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgMSAmJiAoTFpPX0FSQ0hfVU5LTk9XTikgJiYgKExaT19PU19XSU42NCkKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgV0lONjQgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgKExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZWxpZiAxICYmIChMWk9fT1NfRE9TMTYgJiYgZGVmaW5lZChCTFgyODYpKQorIyAgZGVmaW5lIExaT19BUkNIX0kwODZQTSAgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19BUkNIX0lBMTZQTSAgICAgICAgICAgMQorI2VsaWYgMSAmJiAoTFpPX09TX0RPUzE2ICYmIGRlZmluZWQoRE9TWDI4NikpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZWxpZiAxICYmIChMWk9fT1NfRE9TMTYgJiYgTFpPX0NDX0JPUkxBTkRDICYmIGRlZmluZWQoX19EUE1JMTZfXykpCisjICBkZWZpbmUgTFpPX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgTFpPX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BUkNIX0FSTV9USFVNQikgJiYgIWRlZmluZWQoTFpPX0FSQ0hfQVJNKQorIyAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BUkNIX0kwODZQTSkgJiYgIWRlZmluZWQoTFpPX0FSQ0hfSTA4NikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgKExaT19BUkNIX0kwODYpCisjICBpZiAoVUlOVF9NQVggIT0gTFpPXzB4ZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoTFpPX0FSQ0hfSTM4NikKKyMgIGlmIChVSU5UX01BWCAhPSBMWk9fMHhmZmZmTCkgJiYgZGVmaW5lZChfX2kzODZfaW50MTZfXykKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorIyAgaWYgKFVJTlRfTUFYICE9IExaT18weGZmZmZmZmZmTCkgJiYgIWRlZmluZWQoX19pMzg2X2ludDE2X18pCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gTFpPXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0xaT19NTV9PVkVSUklERSkKKyNpZiAoTFpPX0FSQ0hfSTA4NikKKyNpZiAoVUlOVF9NQVggIT0gTFpPXzB4ZmZmZkwpCisjICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19USU5ZX18pIHx8IGRlZmluZWQoTV9JODZUTSkgfHwgZGVmaW5lZChfTV9JODZUTSkKKyMgIGRlZmluZSBMWk9fTU1fVElOWSAgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX0hVR0VfXykgfHwgZGVmaW5lZChfSFVHRV8pIHx8IGRlZmluZWQoTV9JODZITSkgfHwgZGVmaW5lZChfTV9JODZITSkKKyMgIGRlZmluZSBMWk9fTU1fSFVHRSAgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChfTV9JODZTTSkgfHwgZGVmaW5lZChTTUFMTF9NT0RFTCkKKyMgIGRlZmluZSBMWk9fTU1fU01BTEwgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX01FRElVTV9fKSB8fCBkZWZpbmVkKE1fSTg2TU0pIHx8IGRlZmluZWQoX01fSTg2TU0pCisjICBkZWZpbmUgTFpPX01NX01FRElVTSAgICAgICAgIDEKKyNlbGlmIGRlZmluZWQoX19DT01QQUNUX18pIHx8IGRlZmluZWQoTV9JODZDTSkgfHwgZGVmaW5lZChfTV9JODZDTSkKKyMgIGRlZmluZSBMWk9fTU1fQ09NUEFDVCAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoTV9JODZMTSkgfHwgZGVmaW5lZChfTV9JODZMTSkgfHwgZGVmaW5lZChMQVJHRV9NT0RFTCkKKyMgIGRlZmluZSBMWk9fTU1fTEFSR0UgICAgICAgICAgMQorI2VsaWYgKExaT19DQ19BWlRFQ0MpCisjICBpZiBkZWZpbmVkKF9MQVJHRV9DT0RFKSAmJiBkZWZpbmVkKF9MQVJHRV9EQVRBKQorIyAgICBkZWZpbmUgTFpPX01NX0xBUkdFICAgICAgICAxCisjICBlbGlmIGRlZmluZWQoX0xBUkdFX0NPREUpCisjICAgIGRlZmluZSBMWk9fTU1fTUVESVVNICAgICAgIDEKKyMgIGVsaWYgZGVmaW5lZChfTEFSR0VfREFUQSkKKyMgICAgZGVmaW5lIExaT19NTV9DT01QQUNUICAgICAgMQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX01NX1NNQUxMICAgICAgICAxCisjICBlbmRpZgorI2VsaWYgKExaT19DQ19aT1JURUNIQyAmJiBkZWZpbmVkKF9fVkNNX18pKQorIyAgZGVmaW5lIExaT19NTV9MQVJHRSAgICAgICAgICAxCisjZWxzZQorIyAgZXJyb3IgInVua25vd24gbWVtb3J5IG1vZGVsIgorI2VuZGlmCisjaWYgKExaT19PU19ET1MxNiB8fCBMWk9fT1NfT1MyMTYgfHwgTFpPX09TX1dJTjE2KQorI2RlZmluZSBMWk9fSEFWRV9NTV9IVUdFX1BUUiAgICAgICAgMQorI2RlZmluZSBMWk9fSEFWRV9NTV9IVUdFX0FSUkFZICAgICAgMQorI2lmIChMWk9fTU1fVElOWSkKKyMgIHVuZGVmIExaT19IQVZFX01NX0hVR0VfQVJSQVkKKyNlbmRpZgorI2lmIChMWk9fQ0NfQVpURUNDIHx8IExaT19DQ19QQUNJRklDQyB8fCBMWk9fQ0NfWk9SVEVDSEMpCisjICB1bmRlZiBMWk9fSEFWRV9NTV9IVUdFX1BUUgorIyAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9BUlJBWQorI2VsaWYgKExaT19DQ19ETUMgfHwgTFpPX0NDX1NZTUFOVEVDQykKKyMgIHVuZGVmIExaT19IQVZFX01NX0hVR0VfQVJSQVkKKyNlbGlmIChMWk9fQ0NfTVNDICYmIGRlZmluZWQoX1FDKSkKKyMgIHVuZGVmIExaT19IQVZFX01NX0hVR0VfQVJSQVkKKyMgIGlmIChfTVNDX1ZFUiA8IDYwMCkKKyMgICAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9QVFIKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA8IDB4MDI5NSkpCisjICB1bmRlZiBMWk9fSEFWRV9NTV9IVUdFX0FSUkFZCisjZW5kaWYKKyNpZiAoTFpPX0FSQ0hfSTA4NlBNKSAmJiAhZGVmaW5lZChMWk9fSEFWRV9NTV9IVUdFX1BUUikKKyMgIGlmIChMWk9fT1NfRE9TMTYpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZWxpZiAoTFpPX0NDX1pPUlRFQ0hDKQorIyAgZWxzZQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNpZiAoTFpPX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPj0gMHgwMjAwKSkKKyAgIGV4dGVybiB2b2lkIF9fbmVhciBfX2NkZWNsIF9BSFNISUZUKHZvaWQpOworIyAgZGVmaW5lIExaT19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0FIU0hJRlQpCisjZWxpZiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDIHx8IExaT19DQ19aT1JURUNIQykKKyAgIGV4dGVybiB2b2lkIF9fbmVhciBfX2NkZWNsIF9BSFNISUZUKHZvaWQpOworIyAgZGVmaW5lIExaT19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0FIU0hJRlQpCisjZWxpZiAoTFpPX0NDX01TQyB8fCBMWk9fQ0NfVE9QU1BFRURDKQorICAgZXh0ZXJuIHZvaWQgX19uZWFyIF9fY2RlY2wgX0FIU0hJRlQodm9pZCk7CisjICBkZWZpbmUgTFpPX01NX0FIU0hJRlQgICAgICAoKHVuc2lnbmVkKSBfQUhTSElGVCkKKyNlbGlmIChMWk9fQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fID49IDB4MDI5NSkpCisgICBleHRlcm4gdm9pZCBfX25lYXIgX19jZGVjbCBfQUhTSElGVCh2b2lkKTsKKyMgIGRlZmluZSBMWk9fTU1fQUhTSElGVCAgICAgICgodW5zaWduZWQpIF9BSFNISUZUKQorI2VsaWYgKChMWk9fQ0NfQVpURUNDIHx8IExaT19DQ19QQUNJRklDQyB8fCBMWk9fQ0NfVFVSQk9DKSAmJiBMWk9fT1NfRE9TMTYpCisjICBkZWZpbmUgTFpPX01NX0FIU0hJRlQgICAgICAxMgorI2VsaWYgKExaT19DQ19XQVRDT01DKQorICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX0hTaGlmdDsKKyMgIGRlZmluZSBMWk9fTU1fQUhTSElGVCAgICAgICgodW5zaWduZWQpIF9IU2hpZnQpCisjZWxzZQorIyAgZXJyb3IgIkZJWE1FIC0gaW1wbGVtZW50IExaT19NTV9BSFNISUZUIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCisjZWxpZiAoTFpPX0FSQ0hfQzE2NikKKyNpZiAhZGVmaW5lZChfX01PREVMX18pCisjICBlcnJvciAiRklYTUUgLSBDMTY2IF9fTU9ERUxfXyIKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAwKQorIyAgZGVmaW5lIExaT19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMSkKKyMgIGRlZmluZSBMWk9fTU1fU01BTEwgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDIpCisjICBkZWZpbmUgTFpPX01NX0xBUkdFICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAzKQorIyAgZGVmaW5lIExaT19NTV9USU5ZICAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNCkKKyMgIGRlZmluZSBMWk9fTU1fWFRJTlkgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDUpCisjICBkZWZpbmUgTFpPX01NX1hTTUFMTCAgICAgICAgIDEKKyNlbHNlCisjICBlcnJvciAiRklYTUUgLSBDMTY2IF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKExaT19BUkNIX01DUzI1MSkKKyNpZiAhZGVmaW5lZChfX01PREVMX18pCisjICBlcnJvciAiRklYTUUgLSBNQ1MyNTEgX19NT0RFTF9fIgorI2VsaWYgKChfX01PREVMX18pID09IDApCisjICBkZWZpbmUgTFpPX01NX1NNQUxMICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAyKQorIyAgZGVmaW5lIExaT19NTV9MQVJHRSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMykKKyMgIGRlZmluZSBMWk9fTU1fVElOWSAgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDQpCisjICBkZWZpbmUgTFpPX01NX1hUSU5ZICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA1KQorIyAgZGVmaW5lIExaT19NTV9YU01BTEwgICAgICAgICAxCisjZWxzZQorIyAgZXJyb3IgIkZJWE1FIC0gTUNTMjUxIF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKExaT19BUkNIX01DUzUxKQorI2lmICFkZWZpbmVkKF9fTU9ERUxfXykKKyMgIGVycm9yICJGSVhNRSAtIE1DUzUxIF9fTU9ERUxfXyIKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAxKQorIyAgZGVmaW5lIExaT19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMikKKyMgIGRlZmluZSBMWk9fTU1fTEFSR0UgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDMpCisjICBkZWZpbmUgTFpPX01NX1RJTlkgICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA0KQorIyAgZGVmaW5lIExaT19NTV9YVElOWSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNSkKKyMgIGRlZmluZSBMWk9fTU1fWFNNQUxMICAgICAgICAgMQorI2Vsc2UKKyMgIGVycm9yICJGSVhNRSAtIE1DUzUxIF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKExaT19BUkNIX0NSQVlfUFZQKQorIyAgZGVmaW5lIExaT19NTV9QVlAgICAgICAgICAgICAxCisjZWxzZQorIyAgZGVmaW5lIExaT19NTV9GTEFUICAgICAgICAgICAxCisjZW5kaWYKKyNpZiAoTFpPX01NX0NPTVBBQ1QpCisjICBkZWZpbmUgTFpPX0lORk9fTU0gICAgICAgICAgICJjb21wYWN0IgorI2VsaWYgKExaT19NTV9GTEFUKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAiZmxhdCIKKyNlbGlmIChMWk9fTU1fSFVHRSkKKyMgIGRlZmluZSBMWk9fSU5GT19NTSAgICAgICAgICAgImh1Z2UiCisjZWxpZiAoTFpPX01NX0xBUkdFKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAibGFyZ2UiCisjZWxpZiAoTFpPX01NX01FRElVTSkKKyMgIGRlZmluZSBMWk9fSU5GT19NTSAgICAgICAgICAgIm1lZGl1bSIKKyNlbGlmIChMWk9fTU1fUFZQKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAicHZwIgorI2VsaWYgKExaT19NTV9TTUFMTCkKKyMgIGRlZmluZSBMWk9fSU5GT19NTSAgICAgICAgICAgInNtYWxsIgorI2VsaWYgKExaT19NTV9USU5ZKQorIyAgZGVmaW5lIExaT19JTkZPX01NICAgICAgICAgICAidGlueSIKKyNlbHNlCisjICBlcnJvciAidW5rbm93biBtZW1vcnkgbW9kZWwiCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX1NIT1JUKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgICAgKFNJWkVPRl9TSE9SVCkKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX0lOVCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0lOVCAgICAgICAgICAgIChTSVpFT0ZfSU5UKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfTE9ORykKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkcgICAgICAgICAgIChTSVpFT0ZfTE9ORykKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIChTSVpFT0ZfTE9OR19MT05HKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfX19JTlQxNikKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UMTYgICAgICAgIChTSVpFT0ZfX19JTlQxNikKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX19fSU5UMzIpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9fX0lOVDMyICAgICAgICAoU0laRU9GX19fSU5UMzIpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9fX0lOVDY0KQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgKFNJWkVPRl9fX0lOVDY0KQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfVk9JRF9QKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgKFNJWkVPRl9WT0lEX1ApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9TSVpFX1QpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9TSVpFX1QgICAgICAgICAoU0laRU9GX1NJWkVfVCkKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX1BUUkRJRkZfVCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgICAgIChTSVpFT0ZfUFRSRElGRl9UKQorI2VuZGlmCisjZGVmaW5lIF9fTFpPX0xTUih4LGIpICAgICgoKHgpKzB1bCkgPj4gKGIpKQorI2lmICFkZWZpbmVkKExaT19TSVpFT0ZfU0hPUlQpCisjICBpZiAoTFpPX0FSQ0hfQ1JBWV9QVlApCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1NIT1JUICAgICAgICA4CisjICBlbGlmIChVU0hSVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1NIT1JUICAgICAgICAyCisjICBlbGlmIChfX0xaT19MU1IoVVNIUlRfTUFYLDcpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1NIT1JUICAgICAgICAxCisjICBlbGlmIChfX0xaT19MU1IoVVNIUlRfTUFYLDE1KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9TSE9SVCAgICAgICAgMgorIyAgZWxpZiAoX19MWk9fTFNSKFVTSFJUX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDQKKyMgIGVsaWYgKF9fTFpPX0xTUihVU0hSVF9NQVgsNjMpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1NIT1JUICAgICAgICA4CisjICBlbGlmIChfX0xaT19MU1IoVVNIUlRfTUFYLDEyNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0hPUlQgICAgICAgIDE2CisjICBlbHNlCisjICAgIGVycm9yICJMWk9fU0laRU9GX1NIT1JUIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19TSVpFT0ZfSU5UKQorIyAgaWYgKExaT19BUkNIX0NSQVlfUFZQKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9JTlQgICAgICAgICAgOAorIyAgZWxpZiAoVUlOVF9NQVggPT0gTFpPXzB4ZmZmZkwpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0lOVCAgICAgICAgICAyCisjICBlbGlmIChVSU5UX01BWCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0lOVCAgICAgICAgICA0CisjICBlbGlmIChfX0xaT19MU1IoVUlOVF9NQVgsNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDEKKyMgIGVsaWYgKF9fTFpPX0xTUihVSU5UX01BWCwxNSkgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDIKKyMgIGVsaWYgKF9fTFpPX0xTUihVSU5UX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDQKKyMgIGVsaWYgKF9fTFpPX0xTUihVSU5UX01BWCw2MykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfSU5UICAgICAgICAgIDgKKyMgIGVsaWYgKF9fTFpPX0xTUihVSU5UX01BWCwxMjcpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0lOVCAgICAgICAgICAxNgorIyAgZWxzZQorIyAgICBlcnJvciAiTFpPX1NJWkVPRl9JTlQiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9MT05HKQorIyAgaWYgKFVMT05HX01BWCA9PSBMWk9fMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkcgICAgICAgICA0CisjICBlbGlmIChfX0xaT19MU1IoVUxPTkdfTUFYLDcpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkcgICAgICAgICAxCisjICBlbGlmIChfX0xaT19MU1IoVUxPTkdfTUFYLDE1KSA9PSAxKQorIyAgICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HICAgICAgICAgMgorIyAgZWxpZiAoX19MWk9fTFNSKFVMT05HX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgIDQKKyMgIGVsaWYgKF9fTFpPX0xTUihVTE9OR19NQVgsNjMpID09IDEpCisjICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkcgICAgICAgICA4CisjICBlbGlmIChfX0xaT19MU1IoVUxPTkdfTUFYLDEyNykgPT0gMSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfTE9ORyAgICAgICAgIDE2CisjICBlbHNlCisjICAgIGVycm9yICJMWk9fU0laRU9GX0xPTkciCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9MT05HX0xPTkcpICYmICFkZWZpbmVkKExaT19TSVpFT0ZfX19JTlQ2NCkKKyNpZiAoTFpPX1NJWkVPRl9MT05HID4gMCAmJiBMWk9fU0laRU9GX0xPTkcgPCA4KQorIyAgaWYgZGVmaW5lZChfX0xPTkdfTUFYX18pICYmIGRlZmluZWQoX19MT05HX0xPTkdfTUFYX18pCisjICAgIGlmIChMWk9fQ0NfR05VQyA+PSAweDAzMDMwMHVsKQorIyAgICAgIGlmICgoX19MT05HX01BWF9fKSswID09IChfX0xPTkdfTE9OR19NQVhfXykrMCkKKyMgICAgICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIExaT19TSVpFT0ZfTE9ORworIyAgICAgIGVsaWYgKF9fTFpPX0xTUihfX0xPTkdfTE9OR19NQVhfXywzMCkgPT0gMSkKKyMgICAgICAgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDQKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9MT05HX0xPTkcpICYmICFkZWZpbmVkKExaT19TSVpFT0ZfX19JTlQ2NCkKKyNpZiAoTFpPX1NJWkVPRl9MT05HID4gMCAmJiBMWk9fU0laRU9GX0xPTkcgPCA4KQorI2lmIChMWk9fQVJDSF9JMDg2ICYmIExaT19DQ19ETUMpCisjZWxpZiAoTFpPX0NDX0NJTExZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19DQ19HTlVDIHx8IExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoKExaT19PU19XSU4zMiB8fCBMWk9fT1NfV0lONjQgfHwgZGVmaW5lZChfV0lOMzIpKSAmJiBMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChMWk9fT1NfV0lONjQgfHwgZGVmaW5lZChfV0lONjQpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19ETUMpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19TWU1BTlRFQ0MgJiYgKF9fU0NfXyA+PSAweDcwMCkpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19JTlRFTEMgJiYgZGVmaW5lZChfX2xpbnV4X18pKSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChMWk9fQVJDSF9JMzg2ICYmIChMWk9fQ0NfTVdFUktTIHx8IExaT19DQ19QRUxMRVNDIHx8IExaT19DQ19QR0kgfHwgTFpPX0NDX1NVTlBST0MpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19JTlRFTEMgfHwgTFpPX0NDX01TQykpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9fX0lOVDY0ICAgICAgICA4CisjZWxpZiAoKExaT19PU19XSU4zMiB8fCBkZWZpbmVkKF9XSU4zMikpICYmIChMWk9fQ0NfTVNDKSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChMWk9fQVJDSF9JMzg2ICYmIChMWk9fQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA1MjApKSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChMWk9fQVJDSF9JMzg2ICYmIChMWk9fQ0NfV0FUQ09NQyAmJiAoX19XQVRDT01DX18gPj0gMTEwMCkpKQorIyAgZGVmaW5lIExaT19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKExaT19DQ19XQVRDT01DICYmIGRlZmluZWQoX0lOVEVHUkFMX01BWF9CSVRTKSAmJiAoX0lOVEVHUkFMX01BWF9CSVRTID09IDY0KSkKKyMgIGRlZmluZSBMWk9fU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChMWk9fT1NfT1M0MDAgfHwgZGVmaW5lZChfX09TNDAwX18pKSAmJiBkZWZpbmVkKF9fTExQNjRfSUZDX18pCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoZGVmaW5lZChfX3ZtcykgfHwgZGVmaW5lZChfX1ZNUykpICYmIChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFKzAgPT0gNjQpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoTFpPX0NDX1NEQ0MpICYmIChMWk9fU0laRU9GX0lOVCA9PSAyKQorI2VsaWYgMSAmJiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjICBkZWZpbmUgTFpPX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgZGVmaW5lZChMWk9fQ0NfR05VQykKKyMgIGlmIChMWk9fQ0NfR05VQyA8IDB4MDIwODAwdWwpCisjICAgIHVuZGVmIExaT19TSVpFT0ZfTE9OR19MT05HCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQ0ZHX05PX0xPTkdfTE9ORykgfHwgZGVmaW5lZChfX05PX0xPTkdfTE9ORykKKyMgIHVuZGVmIExaT19TSVpFT0ZfTE9OR19MT05HCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX1ZPSURfUCkKKyNpZiAoTFpPX0FSQ0hfSTA4NikKKyMgIGRlZmluZSBfX0xaT19XT1JEU0laRSAgICAgICAgICAgIDIKKyMgIGlmIChMWk9fTU1fVElOWSB8fCBMWk9fTU1fU01BTEwgfHwgTFpPX01NX01FRElVTSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVsaWYgKExaT19NTV9DT01QQUNUIHx8IExaT19NTV9MQVJHRSB8fCBMWk9fTU1fSFVHRSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDQKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkxaT19NTSIKKyMgIGVuZGlmCisjZWxpZiAoTFpPX0FSQ0hfQVZSIHx8IExaT19BUkNIX1o4MCkKKyMgIGRlZmluZSBfX0xaT19XT1JEU0laRSAgICAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIDIKKyNlbGlmIChMWk9fQVJDSF9DMTY2IHx8IExaT19BUkNIX01DUzUxIHx8IExaT19BUkNIX01DUzI1MSB8fCBMWk9fQVJDSF9NU1A0MzApCisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICAyCisjZWxpZiAoTFpPX0FSQ0hfSDgzMDApCisjICBpZiBkZWZpbmVkKF9fTk9STUFMX01PREVfXykKKyMgICAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgIDQKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pIHx8IGRlZmluZWQoX19IODMwMFNYX18pCisjICAgIGRlZmluZSBfX0xaT19XT1JEU0laRSAgICAgICAgICA0CisjICAgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICA0CisjICBlbHNlCisjICAgIGRlZmluZSBfX0xaT19XT1JEU0laRSAgICAgICAgICAyCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAyCisjICBlbmRpZgorIyAgaWYgKExaT19DQ19HTlVDICYmIChMWk9fQ0NfR05VQyA8IDB4MDQwMDAwdWwpKSAmJiAoTFpPX1NJWkVPRl9JTlQgPT0gNCkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfU0laRV9UICAgICAgIExaT19TSVpFT0ZfSU5UCisjICAgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgICBMWk9fU0laRU9GX0lOVAorIyAgZW5kaWYKKyNlbGlmIChMWk9fQVJDSF9NMTZDKQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgMgorIyAgaWYgZGVmaW5lZChfX20zMmNfY3B1X18pIHx8IGRlZmluZWQoX19tMzJjbV9jcHVfXykKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVuZGlmCisjZWxpZiAoTFpPX1NJWkVPRl9MT05HID09IDgpICYmICgoZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChfX1I1OTAwX18pKSB8fCBkZWZpbmVkKF9fTUlQU19QU1gyX18pKQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgOAorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgNAorI2VsaWYgZGVmaW5lZChfX0xMUDY0X18pIHx8IGRlZmluZWQoX19MTFA2NCkgfHwgZGVmaW5lZChfTExQNjQpIHx8IGRlZmluZWQoX1dJTjY0KQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgOAorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgOAorI2VsaWYgKExaT19PU19PUzQwMCB8fCBkZWZpbmVkKF9fT1M0MDBfXykpICYmIGRlZmluZWQoX19MTFA2NF9JRkNfXykKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIExaT19TSVpFT0ZfTE9ORworIyAgZGVmaW5lIExaT19TSVpFT0ZfU0laRV9UICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgICAgICBMWk9fU0laRU9GX0xPTkcKKyNlbGlmIChMWk9fT1NfT1M0MDAgfHwgZGVmaW5lZChfX09TNDAwX18pKQorIyAgZGVmaW5lIF9fTFpPX1dPUkRTSVpFICAgICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjICBkZWZpbmUgTFpPX1NJWkVPRl9WT0lEX1AgICAgICAgICAxNgorIyAgZGVmaW5lIExaT19TSVpFT0ZfU0laRV9UICAgICAgICAgTFpPX1NJWkVPRl9MT05HCisjICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgICAgICBMWk9fU0laRU9GX0xPTkcKKyNlbGlmIChkZWZpbmVkKF9fdm1zKSB8fCBkZWZpbmVkKF9fVk1TKSkgJiYgKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUrMCA9PSA2NCkKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIDgKKyMgIGRlZmluZSBMWk9fU0laRU9GX1NJWkVfVCAgICAgICAgIExaT19TSVpFT0ZfTE9ORworIyAgZGVmaW5lIExaT19TSVpFT0ZfUFRSRElGRl9UICAgICAgTFpPX1NJWkVPRl9MT05HCisjZWxpZiAoTFpPX0FSQ0hfU1BVKQorIyBpZiAwCisjICBkZWZpbmUgX19MWk9fV09SRFNJWkUgICAgICAgICAgICAxNgorIyBlbmRpZgorIyAgZGVmaW5lIExaT19TSVpFT0ZfVk9JRF9QICAgICAgICAgNAorI2Vsc2UKKyMgIGRlZmluZSBMWk9fU0laRU9GX1ZPSURfUCAgICAgICAgIExaT19TSVpFT0ZfTE9ORworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fV09SRFNJWkUpCisjICBpZiBkZWZpbmVkKF9fTFpPX1dPUkRTSVpFKQorIyAgICBkZWZpbmUgTFpPX1dPUkRTSVpFICAgICAgICAgICAgX19MWk9fV09SRFNJWkUKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19XT1JEU0laRSAgICAgICAgICAgIExaT19TSVpFT0ZfVk9JRF9QCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1NJWkVPRl9TSVpFX1QpCisjaWYgKExaT19BUkNIX0kwODYgfHwgTFpPX0FSQ0hfTTE2QykKKyMgIGRlZmluZSBMWk9fU0laRU9GX1NJWkVfVCAgICAgICAgIDIKKyNlbHNlCisjICBkZWZpbmUgTFpPX1NJWkVPRl9TSVpFX1QgICAgICAgICBMWk9fU0laRU9GX1ZPSURfUAorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fU0laRU9GX1BUUkRJRkZfVCkKKyNpZiAoTFpPX0FSQ0hfSTA4NikKKyMgIGlmIChMWk9fTU1fVElOWSB8fCBMWk9fTU1fU01BTEwgfHwgTFpPX01NX01FRElVTSB8fCBMWk9fTU1fSFVHRSkKKyMgICAgZGVmaW5lIExaT19TSVpFT0ZfUFRSRElGRl9UICAgIExaT19TSVpFT0ZfVk9JRF9QCisjICBlbGlmIChMWk9fTU1fQ09NUEFDVCB8fCBMWk9fTU1fTEFSR0UpCisjICAgIGlmIChMWk9fQ0NfQk9STEFOREMgfHwgTFpPX0NDX1RVUkJPQykKKyMgICAgICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgIDQKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBMWk9fU0laRU9GX1BUUkRJRkZfVCAgMgorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBlcnJvciAiTFpPX01NIgorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgTFpPX1NJWkVPRl9QVFJESUZGX1QgICAgICBMWk9fU0laRU9GX1NJWkVfVAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BQklfTkVVVFJBTF9FTkRJQU4pCisjICB1bmRlZiBMWk9fQUJJX0JJR19FTkRJQU4KKyMgIHVuZGVmIExaT19BQklfTElUVExFX0VORElBTgorI2VsaWYgIWRlZmluZWQoTFpPX0FCSV9CSUdfRU5ESUFOKSAmJiAhZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisjaWYgKExaT19BUkNIX0FMUEhBKSAmJiAoTFpPX0FSQ0hfQ1JBWV9NUFApCisjICBkZWZpbmUgTFpPX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfQUxQSEEgfHwgTFpPX0FSQ0hfQU1ENjQgfHwgTFpPX0FSQ0hfQkxBQ0tGSU4gfHwgTFpPX0FSQ0hfQ1JJUyB8fCBMWk9fQVJDSF9JMDg2IHx8IExaT19BUkNIX0kzODYgfHwgTFpPX0FSQ0hfTVNQNDMwKQorIyAgZGVmaW5lIExaT19BQklfTElUVExFX0VORElBTiAgICAgMQorI2VsaWYgKExaT19BUkNIX002OEsgfHwgTFpPX0FSQ0hfUzM5MCkKKyMgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorIyAgaWYgKF9fTElUVExFX0VORElBTl9fID09IDEpCisjICAgIGRlZmluZSBMWk9fQUJJX0xJVFRMRV9FTkRJQU4gICAxCisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAxCisjICBlbmRpZgorI2VsaWYgMSAmJiBkZWZpbmVkKF9fQklHX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyMgIGRlZmluZSBMWk9fQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykgJiYgIWRlZmluZWQoX19CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgTFpPX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZWxpZiAxICYmIChMWk9fQVJDSF9BUk0pICYmIGRlZmluZWQoX19BUk1FQl9fKSAmJiAhZGVmaW5lZChfX0FSTUVMX18pCisjICBkZWZpbmUgTFpPX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAxICYmIChMWk9fQVJDSF9BUk0pICYmIGRlZmluZWQoX19BUk1FTF9fKSAmJiAhZGVmaW5lZChfX0FSTUVCX18pCisjICBkZWZpbmUgTFpPX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZWxpZiAxICYmIChMWk9fQVJDSF9NSVBTKSAmJiBkZWZpbmVkKF9fTUlQU0VCX18pICYmICFkZWZpbmVkKF9fTUlQU0VMX18pCisjICBkZWZpbmUgTFpPX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAxICYmIChMWk9fQVJDSF9NSVBTKSAmJiBkZWZpbmVkKF9fTUlQU0VMX18pICYmICFkZWZpbmVkKF9fTUlQU0VCX18pCisjICBkZWZpbmUgTFpPX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FCSV9CSUdfRU5ESUFOKSAmJiBkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQUJJX0JJR19FTkRJQU4pCisjICBkZWZpbmUgTFpPX0lORk9fQUJJX0VORElBTiAgICAgICAiYmUiCisjZWxpZiBkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfRU5ESUFOICAgICAgICJsZSIKKyNlbGlmIGRlZmluZWQoTFpPX0FCSV9ORVVUUkFMX0VORElBTikKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfRU5ESUFOICAgICAgICJuZXV0cmFsIgorI2VuZGlmCisjaWYgKExaT19TSVpFT0ZfSU5UID09IDEgJiYgTFpPX1NJWkVPRl9MT05HID09IDIgJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gMikKKyMgIGRlZmluZSBMWk9fQUJJX0k4TFAxNiAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfUE0gICAgICAgImk4bHAxNiIKKyNlbGlmIChMWk9fU0laRU9GX0lOVCA9PSAyICYmIExaT19TSVpFT0ZfTE9ORyA9PSAyICYmIExaT19TSVpFT0ZfVk9JRF9QID09IDIpCisjICBkZWZpbmUgTFpPX0FCSV9JTFAxNiAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfUE0gICAgICAgImlscDE2IgorI2VsaWYgKExaT19TSVpFT0ZfSU5UID09IDQgJiYgTFpPX1NJWkVPRl9MT05HID09IDQgJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gNCkKKyMgIGRlZmluZSBMWk9fQUJJX0lMUDMyICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAiaWxwMzIiCisjZWxpZiAoTFpPX1NJWkVPRl9JTlQgPT0gNCAmJiBMWk9fU0laRU9GX0xPTkcgPT0gNCAmJiBMWk9fU0laRU9GX1ZPSURfUCA9PSA4ICYmIExaT19TSVpFT0ZfU0laRV9UID09IDgpCisjICBkZWZpbmUgTFpPX0FCSV9MTFA2NCAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfUE0gICAgICAgImxscDY0IgorI2VsaWYgKExaT19TSVpFT0ZfSU5UID09IDQgJiYgTFpPX1NJWkVPRl9MT05HID09IDggJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gOCkKKyMgIGRlZmluZSBMWk9fQUJJX0xQNjQgICAgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAibHA2NCIKKyNlbGlmIChMWk9fU0laRU9GX0lOVCA9PSA4ICYmIExaT19TSVpFT0ZfTE9ORyA9PSA4ICYmIExaT19TSVpFT0ZfVk9JRF9QID09IDgpCisjICBkZWZpbmUgTFpPX0FCSV9JTFA2NCAgICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19BQklfUE0gICAgICAgImlscDY0IgorI2VsaWYgKExaT19TSVpFT0ZfSU5UID09IDQgJiYgTFpPX1NJWkVPRl9MT05HID09IDggJiYgTFpPX1NJWkVPRl9WT0lEX1AgPT0gNCkKKyMgIGRlZmluZSBMWk9fQUJJX0lQMzJMNjQgICAgICAgMQorIyAgZGVmaW5lIExaT19JTkZPX0FCSV9QTSAgICAgICAiaXAzMmw2NCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fTFpPX0xJQkNfT1ZFUlJJREUpCisjaWYgZGVmaW5lZChMWk9fTElCQ19OQUtFRCkKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgIm5ha2VkIgorI2VsaWYgZGVmaW5lZChMWk9fTElCQ19GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJmcmVlc3RhbmRpbmciCisjZWxpZiBkZWZpbmVkKExaT19MSUJDX01PU1RMWV9GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJtZnJlZXN0YW5kaW5nIgorI2VsaWYgZGVmaW5lZChMWk9fTElCQ19JU09DOTApCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJpc29jOTAiCisjZWxpZiBkZWZpbmVkKExaT19MSUJDX0lTT0M5OSkKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImlzb2M5OSIKKyNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorIyAgZGVmaW5lIExaT19MSUJDX0RJRVRMSUJDICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJkaWV0bGliYyIKKyNlbGlmIGRlZmluZWQoX05FV0xJQl9WRVJTSU9OKQorIyAgZGVmaW5lIExaT19MSUJDX05FV0xJQiAgICAgICAxCisjICBkZWZpbmUgTFpPX0lORk9fTElCQyAgICAgICAgICJuZXdsaWIiCisjZWxpZiBkZWZpbmVkKF9fVUNMSUJDX18pICYmIGRlZmluZWQoX19VQ0xJQkNfTUFKT1JfXykgJiYgZGVmaW5lZChfX1VDTElCQ19NSU5PUl9fKQorIyAgaWYgZGVmaW5lZChfX1VDTElCQ19TVUJMRVZFTF9fKQorIyAgICBkZWZpbmUgTFpPX0xJQkNfVUNMSUJDICAgICAoX19VQ0xJQkNfTUFKT1JfXyAqIDB4MTAwMDBMICsgX19VQ0xJQkNfTUlOT1JfXyAqIDB4MTAwICsgX19VQ0xJQkNfU1VCTEVWRUxfXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19MSUJDX1VDTElCQyAgICAgMHgwMDA5MGJMCisjICBlbmRpZgorIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAidWNsaWJjIgorI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19HTElCQ19NSU5PUl9fKQorIyAgZGVmaW5lIExaT19MSUJDX0dMSUJDICAgICAgICAoX19HTElCQ19fICogMHgxMDAwMEwgKyBfX0dMSUJDX01JTk9SX18gKiAweDEwMCkKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImdsaWJjIgorI2VsaWYgKExaT19DQ19NV0VSS1MpICYmIGRlZmluZWQoX19NU0xfXykKKyMgIGRlZmluZSBMWk9fTElCQ19NU0wgICAgICAgICAgX19NU0xfXworIyAgZGVmaW5lIExaT19JTkZPX0xJQkMgICAgICAgICAibXNsIgorI2VsaWYgMSAmJiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisjICBkZWZpbmUgTFpPX0xJQkNfSVNPQzkwICAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImlzb2M5MCIKKyNlbHNlCisjICBkZWZpbmUgTFpPX0xJQkNfREVGQVVMVCAgICAgIDEKKyMgIGRlZmluZSBMWk9fSU5GT19MSUJDICAgICAgICAgImRlZmF1bHQiCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2dudWNfZXh0ZW5zaW9uX18pCisjaWYgKExaT19DQ19HTlVDID49IDB4MDIwODAwdWwpCisjICBkZWZpbmUgX19sem9fZ251Y19leHRlbnNpb25fXyAgICBfX2V4dGVuc2lvbl9fCisjZWxpZiAoTFpPX0NDX0xMVk0gfHwgTFpPX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2x6b19nbnVjX2V4dGVuc2lvbl9fICAgIF9fZXh0ZW5zaW9uX18KKyNlbHNlCisjICBkZWZpbmUgX19sem9fZ251Y19leHRlbnNpb25fXworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b191YV92b2xhdGlsZSkKKyMgIGRlZmluZSBfX2x6b191YV92b2xhdGlsZSAgICAgdm9sYXRpbGUKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2FsaWdub2YpCisjaWYgKExaT19DQ19DSUxMWSB8fCBMWk9fQ0NfR05VQyB8fCBMWk9fQ0NfTExWTSB8fCBMWk9fQ0NfUEFUSFNDQUxFIHx8IExaT19DQ19QR0kpCisjICBkZWZpbmUgX19sem9fYWxpZ25vZihlKSAgICAgIF9fYWxpZ25vZl9fKGUpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA3MDApKQorIyAgZGVmaW5lIF9fbHpvX2FsaWdub2YoZSkgICAgICBfX2FsaWdub2ZfXyhlKQorI2VsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEzMDApKQorIyAgZGVmaW5lIF9fbHpvX2FsaWdub2YoZSkgICAgICBfX2FsaWdub2YoZSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19hbGlnbm9mKQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfYWxpZ25vZiAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19jb25zdHJ1Y3RvcikKKyNpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMzA0MDB1bCkKKyMgIGRlZmluZSBfX2x6b19jb25zdHJ1Y3RvciAgICAgX19hdHRyaWJ1dGVfXygoX19jb25zdHJ1Y3Rvcl9fLF9fdXNlZF9fKSkKKyNlbGlmIChMWk9fQ0NfR05VQyA+PSAweDAyMDcwMHVsKQorIyAgZGVmaW5lIF9fbHpvX2NvbnN0cnVjdG9yICAgICBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0cnVjdG9yX18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fY29uc3RydWN0b3IgICAgIF9fYXR0cmlidXRlX18oKF9fY29uc3RydWN0b3JfXykpCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fY29uc3RydWN0b3IpCisjICBkZWZpbmUgX19sem9fSEFWRV9jb25zdHJ1Y3RvciAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19kZXN0cnVjdG9yKQorI2lmIChMWk9fQ0NfR05VQyA+PSAweDAzMDQwMHVsKQorIyAgZGVmaW5lIF9fbHpvX2Rlc3RydWN0b3IgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Rlc3RydWN0b3JfXyxfX3VzZWRfXykpCisjZWxpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMjA3MDB1bCkKKyMgIGRlZmluZSBfX2x6b19kZXN0cnVjdG9yICAgICAgX19hdHRyaWJ1dGVfXygoX19kZXN0cnVjdG9yX18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fZGVzdHJ1Y3RvciAgICAgIF9fYXR0cmlidXRlX18oKF9fZGVzdHJ1Y3Rvcl9fKSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19kZXN0cnVjdG9yKQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfZGVzdHJ1Y3RvciAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX0hBVkVfZGVzdHJ1Y3RvcikgJiYgIWRlZmluZWQoX19sem9fSEFWRV9jb25zdHJ1Y3RvcikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9faW5saW5lKQorI2lmIChMWk9fQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fIDw9IDB4MDI5NSkpCisjZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIF9fbHpvX2lubGluZSAgICAgICAgICBpbmxpbmUKKyNlbGlmIChMWk9fQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA1NTApKQorIyAgZGVmaW5lIF9fbHpvX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKExaT19DQ19DSUxMWSB8fCBMWk9fQ0NfR05VQyB8fCBMWk9fQ0NfTExWTSB8fCBMWk9fQ0NfUEFUSFNDQUxFIHx8IExaT19DQ19QR0kpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lX18KKyNlbGlmIChMWk9fQ0NfRE1DKQorIyAgZGVmaW5lIF9fbHpvX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKExaT19DQ19JTlRFTEMpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiAoTFpPX0NDX01XRVJLUyAmJiAoX19NV0VSS1NfXyA+PSAweDI0MDUpKQorIyAgZGVmaW5lIF9fbHpvX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDkwMCkpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjICBkZWZpbmUgX19sem9faW5saW5lICAgICAgICAgIGlubGluZQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX2lubGluZSkKKyMgIGRlZmluZSBfX2x6b19IQVZFX2lubGluZSAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX2lubGluZQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fZm9yY2VpbmxpbmUpCisjaWYgKExaT19DQ19HTlVDID49IDB4MDMwMjAwdWwpCisjICBkZWZpbmUgX19sem9fZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNDUwKSAmJiBMWk9fQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZSAgICAgX19mb3JjZWlubGluZQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSAmJiBMWk9fQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19sem9fZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKQorIyAgZGVmaW5lIF9fbHpvX2ZvcmNlaW5saW5lICAgICBfX2ZvcmNlaW5saW5lCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fZm9yY2VpbmxpbmUpCisjICBkZWZpbmUgX19sem9fSEFWRV9mb3JjZWlubGluZSAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX2ZvcmNlaW5saW5lCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19ub2lubGluZSkKKyNpZiAxICYmIChMWk9fQVJDSF9JMzg2KSAmJiAoTFpPX0NDX0dOVUMgPj0gMHgwNDAwMDB1bCkgJiYgKExaT19DQ19HTlVDIDwgMHgwNDAwMDN1bCkKKyMgIGRlZmluZSBfX2x6b19ub2lubGluZSAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fLF9fdXNlZF9fKSkKKyNlbGlmIChMWk9fQ0NfR05VQyA+PSAweDAzMDIwMHVsKQorIyAgZGVmaW5lIF9fbHpvX25vaW5saW5lICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNjAwKSAmJiBMWk9fQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2x6b19ub2lubGluZSAgICAgICAgX19kZWNsc3BlYyhub2lubGluZSkKKyNlbGlmIChMWk9fQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDgwMCkgJiYgTFpPX0NDX1NZTlRBWF9HTlVDKQorIyAgZGVmaW5lIF9fbHpvX25vaW5saW5lICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUgICAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisjZWxpZiAoTFpPX0NDX01XRVJLUyAmJiAoX19NV0VSS1NfXyA+PSAweDMyMDApICYmIChMWk9fT1NfV0lOMzIgfHwgTFpPX09TX1dJTjY0KSkKKyMgIGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBlbHNlCisjICAgIGRlZmluZSBfX2x6b19ub2lubGluZSAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX25vaW5saW5lKQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfbm9pbmxpbmUgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2x6b19ub2lubGluZQorI2VuZGlmCisjaWYgKGRlZmluZWQoX19sem9fSEFWRV9mb3JjZWlubGluZSkgfHwgZGVmaW5lZChfX2x6b19IQVZFX25vaW5saW5lKSkgJiYgIWRlZmluZWQoX19sem9fSEFWRV9pbmxpbmUpCisjICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX25vcmV0dXJuKQorI2lmIChMWk9fQ0NfR05VQyA+PSAweDAyMDcwMHVsKQorIyAgZGVmaW5lIF9fbHpvX25vcmV0dXJuICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNDUwKSAmJiBMWk9fQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2x6b19ub3JldHVybiAgICAgICAgX19kZWNsc3BlYyhub3JldHVybikKKyNlbGlmIChMWk9fQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDYwMCkgJiYgTFpPX0NDX1NZTlRBWF9HTlVDKQorIyAgZGVmaW5lIF9fbHpvX25vcmV0dXJuICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fbm9yZXR1cm4gICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTIwMCkpCisjICBkZWZpbmUgX19sem9fbm9yZXR1cm4gICAgICAgIF9fZGVjbHNwZWMobm9yZXR1cm4pCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19sem9fbm9yZXR1cm4pCisjICBkZWZpbmUgX19sem9fSEFWRV9ub3JldHVybiAxCisjZWxzZQorIyAgZGVmaW5lIF9fbHpvX25vcmV0dXJuCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19ub3Rocm93KQorI2lmIChMWk9fQ0NfR05VQyA+PSAweDAzMDMwMHVsKQorIyAgZGVmaW5lIF9fbHpvX25vdGhyb3cgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vdGhyb3dfXykpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA0NTApICYmIExaT19DQ19TWU5UQVhfTVNDKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIF9fbHpvX25vdGhyb3cgICAgICAgICBfX2RlY2xzcGVjKG5vdGhyb3cpCisjZWxpZiAoTFpPX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA4MDApICYmIExaT19DQ19TWU5UQVhfR05VQykKKyMgIGRlZmluZSBfX2x6b19ub3Rocm93ICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub3Rocm93X18pKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fbm90aHJvdyAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm90aHJvd19fKSkKKyNlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBfX2x6b19ub3Rocm93ICAgICAgICAgX19kZWNsc3BlYyhub3Rocm93KQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX25vdGhyb3cpCisjICBkZWZpbmUgX19sem9fSEFWRV9ub3Rocm93IDEKKyNlbHNlCisjICBkZWZpbmUgX19sem9fbm90aHJvdworI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fcmVzdHJpY3QpCisjaWYgKExaT19DQ19HTlVDID49IDB4MDMwNDAwdWwpCisjICBkZWZpbmUgX19sem9fcmVzdHJpY3QgICAgICAgIF9fcmVzdHJpY3RfXworI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNjAwKSAmJiBMWk9fQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19sem9fcmVzdHJpY3QgICAgICAgIF9fcmVzdHJpY3RfXworI2VsaWYgKExaT19DQ19MTFZNKQorIyAgZGVmaW5lIF9fbHpvX3Jlc3RyaWN0ICAgICAgICBfX3Jlc3RyaWN0X18KKyNlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkKKyMgIGRlZmluZSBfX2x6b19yZXN0cmljdCAgICAgICAgX19yZXN0cmljdAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX3Jlc3RyaWN0KQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfcmVzdHJpY3QgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2x6b19yZXN0cmljdAorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fbGlrZWx5KSAmJiAhZGVmaW5lZChfX2x6b191bmxpa2VseSkKKyNpZiAoTFpPX0NDX0dOVUMgPj0gMHgwMzAyMDB1bCkKKyMgIGRlZmluZSBfX2x6b19saWtlbHkoZSkgICAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMSkpCisjICBkZWZpbmUgX19sem9fdW5saWtlbHkoZSkgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDApKQorI2VsaWYgKExaT19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSkKKyMgIGRlZmluZSBfX2x6b19saWtlbHkoZSkgICAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMSkpCisjICBkZWZpbmUgX19sem9fdW5saWtlbHkoZSkgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDApKQorI2VsaWYgKExaT19DQ19MTFZNIHx8IExaT19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19sem9fbGlrZWx5KGUpICAgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDEpKQorIyAgZGVmaW5lIF9fbHpvX3VubGlrZWx5KGUpICAgICAoX19idWlsdGluX2V4cGVjdCghIShlKSwwKSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2x6b19saWtlbHkpCisjICBkZWZpbmUgX19sem9fSEFWRV9saWtlbHkgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2x6b19saWtlbHkoZSkgICAgICAgKGUpCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fbHpvX3VubGlrZWx5KQorIyAgZGVmaW5lIF9fbHpvX0hBVkVfdW5saWtlbHkgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2x6b191bmxpa2VseShlKSAgICAgKGUpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fVU5VU0VEKQorIyAgaWYgKExaT19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDYwMCkpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICAoKHZvaWQpICZ2YXIpCisjICBlbGlmIChMWk9fQ0NfQk9STEFOREMgfHwgTFpPX0NDX0hJR0hDIHx8IExaT19DQ19ORFBDIHx8IExaT19DQ19QRUxMRVNDIHx8IExaT19DQ19UVVJCT0MpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICBpZiAoJnZhcikgOyBlbHNlCisjICBlbGlmIChMWk9fQ0NfR05VQyB8fCBMWk9fQ0NfTExWTSB8fCBMWk9fQ0NfUEFUSFNDQUxFKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSB2YXIpCisjICBlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICBpZiAoJnZhcikgOyBlbHNlCisjICBlbGlmIChMWk9fQ0NfS0VJTEMpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEKHZhcikgICAgICAgICB7ZXh0ZXJuIGludCBfX2x6b191bnVzZWRbMS0yKiEoc2l6ZW9mKHZhcik+MCldO30KKyMgIGVsaWYgKExaT19DQ19QQUNJRklDQykKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgICgodm9pZCkgc2l6ZW9mKHZhcikpCisjICBlbGlmIChMWk9fQ0NfV0FUQ09NQykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICAgZGVmaW5lIExaT19VTlVTRUQodmFyKSAgICAgICAgICgodm9pZCkgdmFyKQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSAmdmFyKQorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19VTlVTRURfRlVOQykKKyMgIGlmIChMWk9fQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA2MDApKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSBmdW5jKQorIyAgZWxpZiAoTFpPX0NDX0JPUkxBTkRDIHx8IExaT19DQ19ORFBDIHx8IExaT19DQ19UVVJCT0MpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0ZVTkMoZnVuYykgICBpZiAoZnVuYykgOyBlbHNlCisjICBlbGlmIChMWk9fQ0NfTExWTSkKKyMgICAgZGVmaW5lIExaT19VTlVTRURfRlVOQyhmdW5jKSAgICgodm9pZCkgJmZ1bmMpCisjICBlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0ZVTkMoZnVuYykgICBpZiAoZnVuYykgOyBlbHNlCisjICBlbGlmIChMWk9fQ0NfTVNDKQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSAmZnVuYykKKyMgIGVsaWYgKExaT19DQ19LRUlMQyB8fCBMWk9fQ0NfUEVMTEVTQykKKyMgICAgZGVmaW5lIExaT19VTlVTRURfRlVOQyhmdW5jKSAgIHtleHRlcm4gaW50IF9fbHpvX3VudXNlZFsxLTIqIShzaXplb2YoKGludClmdW5jKT4wKV07fQorIyAgZWxzZQorIyAgICBkZWZpbmUgTFpPX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSBmdW5jKQorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19VTlVTRURfTEFCRUwpCisjICBpZiAoTFpPX0NDX1dBVENPTUMpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgIGRlZmluZSBMWk9fVU5VU0VEX0xBQkVMKGwpICAgICBzd2l0Y2goMCkgY2FzZSAxOmdvdG8gbAorIyAgZWxpZiAoTFpPX0NDX0lOVEVMQyB8fCBMWk9fQ0NfV0FUQ09NQykKKyMgICAgZGVmaW5lIExaT19VTlVTRURfTEFCRUwobCkgICAgIGlmICgwKSBnb3RvIGwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19VTlVTRURfTEFCRUwobCkgICAgIHN3aXRjaCgwKSBjYXNlIDE6Z290byBsCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUikKKyMgIGlmIDAKKyMgICAgZGVmaW5lIExaT19ERUZJTkVfVU5JTklUSUFMSVpFRF9WQVIodHlwZSx2YXIsaW5pdCkgIHR5cGUgdmFyCisjICBlbGlmIDAgJiYgKExaT19DQ19HTlVDKQorIyAgICBkZWZpbmUgTFpPX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUih0eXBlLHZhcixpbml0KSAgdHlwZSB2YXIgPSB2YXIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19ERUZJTkVfVU5JTklUSUFMSVpFRF9WQVIodHlwZSx2YXIsaW5pdCkgIHR5cGUgdmFyID0gaW5pdAorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUikKKyMgIGlmIChMWk9fQ0NfQVpURUNDIHx8IExaT19DQ19aT1JURUNIQykKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2x6b19jdGFbMS0hKGUpXTsKKyMgIGVsaWYgKExaT19DQ19ETUMgfHwgTFpPX0NDX1NZTUFOVEVDQykKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2x6b19jdGFbMXUtMiohKGUpXTsKKyMgIGVsaWYgKExaT19DQ19UVVJCT0MgJiYgKF9fVFVSQk9DX18gPT0gMHgwMjk1KSkKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2x6b19jdGFbMS0hKGUpXTsKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2x6b19jdGFbMS0yKiEoZSldOworIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKExaT19DT01QSUxFX1RJTUVfQVNTRVJUKQorIyAgaWYgKExaT19DQ19BWlRFQ0MpCisjICAgIGRlZmluZSBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChlKSAge3R5cGVkZWYgaW50IF9fbHpvX2N0YV90WzEtIShlKV07fQorIyAgZWxpZiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfUEFDSUZJQ0MgfHwgTFpPX0NDX1NZTUFOVEVDQyB8fCBMWk9fQ0NfWk9SVEVDSEMpCisjICAgIGRlZmluZSBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbGlmIChMWk9fQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fID09IDB4MDI5NSkpCisjICAgIGRlZmluZSBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbHNlCisjICAgIGRlZmluZSBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChlKSAge3R5cGVkZWYgaW50IF9fbHpvX2N0YV90WzEtMiohKGUpXTt9CisjICBlbmRpZgorI2VuZGlmCisjaWYgKExaT19BUkNIX0kwODYgfHwgTFpPX0FSQ0hfSTM4NikgJiYgKExaT19PU19ET1MxNiB8fCBMWk9fT1NfRE9TMzIgfHwgTFpPX09TX09TMiB8fCBMWk9fT1NfT1MyMTYgfHwgTFpPX09TX1dJTjE2IHx8IExaT19PU19XSU4zMiB8fCBMWk9fT1NfV0lONjQpCisjICBpZiAoTFpPX0NDX0dOVUMgfHwgTFpPX0NDX0hJR0hDIHx8IExaT19DQ19ORFBDIHx8IExaT19DQ19QQUNJRklDQykKKyMgIGVsaWYgKExaT19DQ19ETUMgfHwgTFpPX0NDX1NZTUFOVEVDQyB8fCBMWk9fQ0NfWk9SVEVDSEMpCisjICAgIGRlZmluZSBfX2x6b19jZGVjbCAgICAgICAgICAgICAgICAgX19jZGVjbAorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfYXRleGl0CisjICAgIGRlZmluZSBfX2x6b19jZGVjbF9tYWluICAgICAgICAgICAgX19jZGVjbAorIyAgICBpZiAoTFpPX09TX09TMiAmJiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDKSkKKyMgICAgICBkZWZpbmUgX19sem9fY2RlY2xfcXNvcnQgICAgICAgICBfX3Bhc2NhbAorIyAgICBlbGlmIChMWk9fT1NfT1MyICYmIChMWk9fQ0NfWk9SVEVDSEMpKQorIyAgICAgIGRlZmluZSBfX2x6b19jZGVjbF9xc29ydCAgICAgICAgIF9zdGRjYWxsCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX19sem9fY2RlY2xfcXNvcnQgICAgICAgICBfX2NkZWNsCisjICAgIGVuZGlmCisjICBlbGlmIChMWk9fQ0NfV0FUQ09NQykKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsICAgICAgICAgICAgICAgICBfX2NkZWNsCisjICBlbHNlCisjICAgIGRlZmluZSBfX2x6b19jZGVjbCAgICAgICAgICAgICAgICAgX19jZGVjbAorIyAgICBkZWZpbmUgX19sem9fY2RlY2xfYXRleGl0ICAgICAgICAgIF9fY2RlY2wKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX21haW4gICAgICAgICAgICBfX2NkZWNsCisjICAgIGRlZmluZSBfX2x6b19jZGVjbF9xc29ydCAgICAgICAgICAgX19jZGVjbAorIyAgZW5kaWYKKyMgIGlmIChMWk9fQ0NfR05VQyB8fCBMWk9fQ0NfSElHSEMgfHwgTFpPX0NDX05EUEMgfHwgTFpPX0NDX1BBQ0lGSUNDIHx8IExaT19DQ19XQVRDT01DKQorIyAgZWxpZiAoTFpPX09TX09TMiAmJiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfU1lNQU5URUNDKSkKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfX3Bhc2NhbAorIyAgZWxpZiAoTFpPX09TX09TMiAmJiAoTFpPX0NDX1pPUlRFQ0hDKSkKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfc3RkY2FsbAorIyAgZWxpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTQwMCkpICYmIGRlZmluZWQoX01fQ0VFX1BVUkUpCisjICAgIGRlZmluZSBfX2x6b19jZGVjbF9zaWdoYW5kbGVyICAgICAgX19jbHJjYWxsCisjICBlbGlmIChMWk9fQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSA2MDAgJiYgX01TQ19WRVIgPCA3MDApKQorIyAgICBpZiBkZWZpbmVkKF9ETEwpCisjICAgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgX2ZhciBfY2RlY2wgX2xvYWRkcworIyAgICBlbGlmIGRlZmluZWQoX01UKQorIyAgICAgIGRlZmluZSBfX2x6b19jZGVjbF9zaWdoYW5kbGVyICAgIF9mYXIgX2NkZWNsCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX19sem9fY2RlY2xfc2lnaGFuZGxlciAgICBfY2RlY2wKKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfX2NkZWNsCisjICBlbmRpZgorI2VsaWYgKExaT19BUkNIX0kzODYpICYmIChMWk9fQ0NfV0FUQ09NQykKKyMgIGRlZmluZSBfX2x6b19jZGVjbCAgICAgICAgICAgICAgICAgICBfX2NkZWNsCisjZWxpZiAoTFpPX0FSQ0hfTTY4SyAmJiBMWk9fT1NfVE9TICYmIChMWk9fQ0NfUFVSRUMgfHwgTFpPX0NDX1RVUkJPQykpCisjICBkZWZpbmUgX19sem9fY2RlY2wgICAgICAgICAgICAgICAgICAgY2RlY2wKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsKQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19jZGVjbF9hdGV4aXQpCisjICBkZWZpbmUgX19sem9fY2RlY2xfYXRleGl0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19jZGVjbF9tYWluKQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsX21haW4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsX3Fzb3J0KQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsX3Fzb3J0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19jZGVjbF9zaWdoYW5kbGVyKQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsX3NpZ2hhbmRsZXIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fbHpvX2NkZWNsX3ZhKQorIyAgZGVmaW5lIF9fbHpvX2NkZWNsX3ZhICAgICAgICAgICAgICAgIF9fbHpvX2NkZWNsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fQ0ZHX05PX1dJTkRPV1NfSCkKKyNpZiAoTFpPX09TX0NZR1dJTiB8fCAoTFpPX09TX0VNWCAmJiBkZWZpbmVkKF9fUlNYTlRfXykpIHx8IExaT19PU19XSU4zMiB8fCBMWk9fT1NfV0lONjQpCisjICBpZiAoTFpPX0NDX1dBVENPTUMgJiYgKF9fV0FUQ09NQ19fIDwgMTAwMCkpCisjICBlbGlmIChMWk9fT1NfV0lOMzIgJiYgTFpPX0NDX0dOVUMpICYmIGRlZmluZWQoX19QVzMyX18pCisjICBlbGlmICgoTFpPX09TX0NZR1dJTiB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSkgJiYgKExaT19DQ19HTlVDICYmIChMWk9fQ0NfR05VQyA8IDB4MDI1ZjAwdWwpKSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIExaT19IQVZFX1dJTkRPV1NfSCAxCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAoTFpPX0FSQ0hfQUxQSEEpCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9TSE9SVCAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VU0hPUlQgICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfQU1ENjQpCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9JTlRfSU5ERVggICAxCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQxNiAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQzMiAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQ2NCAgICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfQVJNICYmIExaT19BUkNIX0FSTV9USFVNQikKKyNlbGlmIChMWk9fQVJDSF9BUk0pCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9TSE9SVCAgICAgICAxCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VU0hPUlQgICAgICAxCisjZWxpZiAoTFpPX0FSQ0hfQ1JJUykKKyMgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDE2ICAgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDMyICAgICAgIDEKKyNlbGlmIChMWk9fQVJDSF9JMzg2KQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMTYgICAgICAgMQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMzIgICAgICAgMQorI2VsaWYgKExaT19BUkNIX0lBNjQpCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9JTlRfSU5ERVggICAxCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgTFpPX09QVF9QUkVGRVJfUE9TVElOQyAgICAxCisjZWxpZiAoTFpPX0FSQ0hfTTY4SykKKyMgIGRlZmluZSBMWk9fT1BUX1BSRUZFUl9QT1NUSU5DICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX1BSRUZFUl9QUkVERUMgICAgIDEKKyMgIGlmIGRlZmluZWQoX19tYzY4MDIwX18pICYmICFkZWZpbmVkKF9fbWNvbGRmaXJlX18pCisjICAgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDE2ICAgICAxCisjICAgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDMyICAgICAxCisjICBlbmRpZgorI2VsaWYgKExaT19BUkNIX01JUFMpCisjICBkZWZpbmUgTFpPX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjZWxpZiAoTFpPX0FSQ0hfUE9XRVJQQykKKyMgIGRlZmluZSBMWk9fT1BUX1BSRUZFUl9QUkVJTkMgICAgIDEKKyMgIGRlZmluZSBMWk9fT1BUX1BSRUZFUl9QUkVERUMgICAgIDEKKyMgIGlmIGRlZmluZWQoTFpPX0FCSV9CSUdfRU5ESUFOKQorIyAgICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQxNiAgICAgMQorIyAgICBkZWZpbmUgTFpPX09QVF9VTkFMSUdORUQzMiAgICAgMQorIyAgZW5kaWYKKyNlbGlmIChMWk9fQVJDSF9TMzkwKQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMTYgICAgICAgMQorIyAgZGVmaW5lIExaT19PUFRfVU5BTElHTkVEMzIgICAgICAgMQorIyAgaWYgKExaT19TSVpFT0ZfU0laRV9UID09IDgpCisjICAgIGRlZmluZSBMWk9fT1BUX1VOQUxJR05FRDY0ICAgICAxCisjICBlbmRpZgorI2VsaWYgKExaT19BUkNIX1NIKQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BPU1RJTkMgICAgMQorIyAgZGVmaW5lIExaT19PUFRfUFJFRkVSX1BSRURFQyAgICAgMQorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX0NGR19OT19JTkxJTkVfQVNNKQorI2lmIGRlZmluZWQoTFpPX0NDX0xMVk0pCisjICBkZWZpbmUgTFpPX0NGR19OT19JTkxJTkVfQVNNIDEKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX0NGR19OT19VTkFMSUdORUQpCisjaWYgZGVmaW5lZChMWk9fQUJJX05FVVRSQUxfRU5ESUFOKSB8fCBkZWZpbmVkKExaT19BUkNIX0dFTkVSSUMpCisjICBkZWZpbmUgTFpPX0NGR19OT19VTkFMSUdORUQgMQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19DRkdfTk9fVU5BTElHTkVEKQorIyAgdW5kZWYgTFpPX09QVF9VTkFMSUdORUQxNgorIyAgdW5kZWYgTFpPX09QVF9VTkFMSUdORUQzMgorIyAgdW5kZWYgTFpPX09QVF9VTkFMSUdORUQ2NAorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQ0ZHX05PX0lOTElORV9BU00pCisjZWxpZiAoTFpPX0FSQ0hfSTM4NiAmJiAoTFpPX09TX0RPUzMyIHx8IExaT19PU19XSU4zMikgJiYgKExaT19DQ19ETUMgfHwgTFpPX0NDX0lOVEVMQyB8fCBMWk9fQ0NfTVNDIHx8IExaT19DQ19QRUxMRVNDKSkKKyMgIGRlZmluZSBMWk9fQVNNX1NZTlRBWF9NU0MgMQorI2VsaWYgKExaT19PU19XSU42NCAmJiAoTFpPX0NDX0RNQyB8fCBMWk9fQ0NfSU5URUxDIHx8IExaT19DQ19NU0MgfHwgTFpPX0NDX1BFTExFU0MpKQorI2VsaWYgKExaT19BUkNIX0kzODYgJiYgKExaT19DQ19HTlVDIHx8IExaT19DQ19JTlRFTEMgfHwgTFpPX0NDX1BBVEhTQ0FMRSkpCisjICBkZWZpbmUgTFpPX0FTTV9TWU5UQVhfR05VQyAxCisjZWxpZiAoTFpPX0FSQ0hfQU1ENjQgJiYgKExaT19DQ19HTlVDIHx8IExaT19DQ19JTlRFTEMgfHwgTFpPX0NDX1BBVEhTQ0FMRSkpCisjICBkZWZpbmUgTFpPX0FTTV9TWU5UQVhfR05VQyAxCisjZW5kaWYKKyNpZiAoTFpPX0FTTV9TWU5UQVhfR05VQykKKyNpZiAoTFpPX0FSQ0hfSTM4NiAmJiBMWk9fQ0NfR05VQyAmJiAoTFpPX0NDX0dOVUMgPCAweDAyMDAwMHVsKSkKKyMgIGRlZmluZSBfX0xaT19BU01fQ0xPQkJFUiAgICAgICAgICJheCIKKyNlbGlmIChMWk9fQ0NfSU5URUxDKQorIyAgZGVmaW5lIF9fTFpPX0FTTV9DTE9CQkVSICAgICAgICAgIm1lbW9yeSIKKyNlbHNlCisjICBkZWZpbmUgX19MWk9fQVNNX0NMT0JCRVIgICAgICAgICAiY2MiLCAibWVtb3J5IgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fTFpPX0lORk9TVFJfTU0pCisjZWxpZiAoTFpPX01NX0ZMQVQpICYmIChkZWZpbmVkKF9fTFpPX0lORk9TVFJfUE0pIHx8IGRlZmluZWQoTFpPX0lORk9fQUJJX1BNKSkKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX01NICAgICAgICAgICIiCisjZWxpZiBkZWZpbmVkKExaT19JTkZPX01NKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfTU0gICAgICAgICAgIi4iIExaT19JTkZPX01NCisjZWxzZQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfTU0gICAgICAgICAgIiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9fSU5GT1NUUl9QTSkKKyNlbGlmIGRlZmluZWQoTFpPX0lORk9fQUJJX1BNKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfUE0gICAgICAgICAgIi4iIExaT19JTkZPX0FCSV9QTQorI2Vsc2UKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX1BNICAgICAgICAgICIiCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fTFpPX0lORk9TVFJfRU5ESUFOKQorI2VsaWYgZGVmaW5lZChMWk9fSU5GT19BQklfRU5ESUFOKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfRU5ESUFOICAgICAgIi4iIExaT19JTkZPX0FCSV9FTkRJQU4KKyNlbHNlCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9FTkRJQU4gICAgICAiIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0xaT19JTkZPU1RSX09TTkFNRSkKKyNlbGlmIGRlZmluZWQoTFpPX0lORk9fT1NfQ09OU09MRSkKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX09TTkFNRSAgICAgIExaT19JTkZPX09TICIuIiBMWk9fSU5GT19PU19DT05TT0xFCisjZWxpZiBkZWZpbmVkKExaT19JTkZPX09TX1BPU0lYKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfT1NOQU1FICAgICAgTFpPX0lORk9fT1MgIi4iIExaT19JTkZPX09TX1BPU0lYCisjZWxzZQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfT1NOQU1FICAgICAgTFpPX0lORk9fT1MKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9fSU5GT1NUUl9MSUJDKQorI2VsaWYgZGVmaW5lZChMWk9fSU5GT19MSUJDKQorIyAgZGVmaW5lIF9fTFpPX0lORk9TVFJfTElCQyAgICAgICAgIi4iIExaT19JTkZPX0xJQkMKKyNlbHNlCisjICBkZWZpbmUgX19MWk9fSU5GT1NUUl9MSUJDICAgICAgICAiIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0xaT19JTkZPU1RSX0NDVkVSKQorI2VsaWYgZGVmaW5lZChMWk9fSU5GT19DQ1ZFUikKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX0NDVkVSICAgICAgICIgIiBMWk9fSU5GT19DQ1ZFUgorI2Vsc2UKKyMgIGRlZmluZSBfX0xaT19JTkZPU1RSX0NDVkVSICAgICAgICIiCisjZW5kaWYKKyNkZWZpbmUgTFpPX0lORk9fU1RSSU5HIFwKKyAgICBMWk9fSU5GT19BUkNIIF9fTFpPX0lORk9TVFJfTU0gX19MWk9fSU5GT1NUUl9QTSBfX0xaT19JTkZPU1RSX0VORElBTiBcCisgICAgIiAiIF9fTFpPX0lORk9TVFJfT1NOQU1FIF9fTFpPX0lORk9TVFJfTElCQyAiICIgTFpPX0lORk9fQ0MgX19MWk9fSU5GT1NUUl9DQ1ZFUgorCisjZW5kaWYKKworI2VuZGlmCisKKyN1bmRlZiBMWk9fSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgIm1pbmlsem8uaCIKKworI2lmICFkZWZpbmVkKE1JTklMWk9fVkVSU0lPTikgfHwgKE1JTklMWk9fVkVSU0lPTiAhPSAweDIwMzApCisjICBlcnJvciAidmVyc2lvbiBtaXNtYXRjaCBpbiBtaW5pTFpPIHNvdXJjZSBmaWxlcyIKKyNlbmRpZgorCisjaWZkZWYgTUlOSUxaT19IQVZFX0NPTkZJR19ICisjICBkZWZpbmUgTFpPX0hBVkVfQ09ORklHX0gKKyNlbmRpZgorCisjaWZuZGVmIF9fTFpPX0NPTkZfSAorI2RlZmluZSBfX0xaT19DT05GX0gKKworI2lmICFkZWZpbmVkKF9fTFpPX0lOX01JTklMWk8pCisjaWYgZGVmaW5lZChMWk9fQ0ZHX0ZSRUVTVEFORElORykKKyMgIGRlZmluZSBMWk9fTElCQ19GUkVFU1RBTkRJTkcgMQorIyAgZGVmaW5lIExaT19PU19GUkVFU1RBTkRJTkcgMQorIyAgZGVmaW5lIEFDQ19MSUJDX0ZSRUVTVEFORElORyAxCisjICBkZWZpbmUgQUNDX09TX0ZSRUVTVEFORElORyAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19DRkdfTk9fVU5BTElHTkVEKQorIyAgZGVmaW5lIEFDQ19DRkdfTk9fVU5BTElHTkVEIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FSQ0hfR0VORVJJQykKKyMgIGRlZmluZSBBQ0NfQVJDSF9HRU5FUklDIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0FCSV9ORVVUUkFMX0VORElBTikKKyMgIGRlZmluZSBBQ0NfQUJJX05FVVRSQUxfRU5ESUFOIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0hBVkVfQ09ORklHX0gpCisjICBkZWZpbmUgQUNDX0NPTkZJR19OT19IRUFERVIgMQorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQ0ZHX0VYVFJBX0NPTkZJR19IRUFERVIpCisjICBpbmNsdWRlIExaT19DRkdfRVhUUkFfQ09ORklHX0hFQURFUgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0xaT0NPTkZfSCkgfHwgZGVmaW5lZChfX0xaT0NPTkZfSF9JTkNMVURFRCkKKyMgIGVycm9yICJpbmNsdWRlIHRoaXMgZmlsZSBmaXJzdCIKKyNlbmRpZgorI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisjZW5kaWYKKworI2lmIChMWk9fVkVSU0lPTiA8IDB4MDIwMDApIHx8ICFkZWZpbmVkKF9fTFpPQ09ORl9IX0lOQ0xVREVEKQorIyAgZXJyb3IgInZlcnNpb24gbWlzbWF0Y2giCisjZW5kaWYKKworI2lmIChMWk9fQ0NfQk9STEFOREMgJiYgTFpPX0FSQ0hfSTA4NikKKyMgIHByYWdtYSBvcHRpb24gLWgKKyNlbmRpZgorCisjaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEwMDApKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDEyNyA0NzAxKQorI2VuZGlmCisjaWYgKExaT19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEzMDApKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDgyMCkKKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ1MTQgNDcxMCA0NzExKQorI2VuZGlmCisKKyNpZiAoTFpPX0NDX1NVTlBST0MpCisjICBwcmFnbWEgZXJyb3JfbWVzc2FnZXMob2ZmLEVfRU5EX09GX0xPT1BfQ09ERV9OT1RfUkVBQ0hFRCkKKyMgIHByYWdtYSBlcnJvcl9tZXNzYWdlcyhvZmYsRV9MT09QX05PVF9FTlRFUkVEX0FUX1RPUCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkgJiYgKCFMWk9fSEFWRV9NTV9IVUdFX1BUUikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIC0gY2hlY2sgZGVmaW5lcyBmb3IgX19odWdlIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTFpPX0lOX01JTklMWk8pIHx8IGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjZWxpZiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0VfSCAxCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0lfSCAxCisjZWxpZiAxCisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjZW5kaWYKKworI2lmIChMWk9fQVJDSF9JMDg2KQorIyAgZGVmaW5lIEFDQ19NTV9BSFNISUZUICAgICAgICBMWk9fTU1fQUhTSElGVAorIyAgZGVmaW5lIEFDQ19QVFJfRlBfT0ZGKHgpICAgICAoKChjb25zdCB1bnNpZ25lZCBfX2ZhciopJih4KSlbMF0pCisjICBkZWZpbmUgQUNDX1BUUl9GUF9TRUcoeCkgICAgICgoKGNvbnN0IHVuc2lnbmVkIF9fZmFyKikmKHgpKVsxXSkKKyMgIGRlZmluZSBBQ0NfUFRSX01LX0ZQKHMsbykgICAgKCh2b2lkIF9fZmFyKikoKCh1bnNpZ25lZCBsb25nKShzKTw8MTYpKyh1bnNpZ25lZCkobykpKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChsem9fdWludHB0cl90KQorIyAgaWYgZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgICAgZGVmaW5lIGx6b191aW50cHRyX3QgICAgICAgdW5zaWduZWQgbG9uZworIyAgZWxpZiAxICYmIGRlZmluZWQoTFpPX09TX09TNDAwKSAmJiAoTFpPX1NJWkVPRl9WT0lEX1AgPT0gMTYpCisjICAgIGRlZmluZSBfX0xaT19VSU5UUFRSX1RfSVNfUE9JTlRFUiAxCisgICAgIHR5cGVkZWYgY2hhciogICAgICAgICAgICAgIGx6b191aW50cHRyX3Q7CisjICAgIGRlZmluZSBsem9fdWludHB0cl90ICAgICAgIGx6b191aW50cHRyX3QKKyMgIGVsaWYgKExaT19TSVpFT0ZfU0laRV9UID09IExaT19TSVpFT0ZfVk9JRF9QKQorIyAgICBkZWZpbmUgbHpvX3VpbnRwdHJfdCAgICAgICBzaXplX3QKKyMgIGVsaWYgKExaT19TSVpFT0ZfTE9ORyA9PSBMWk9fU0laRU9GX1ZPSURfUCkKKyMgICAgZGVmaW5lIGx6b191aW50cHRyX3QgICAgICAgdW5zaWduZWQgbG9uZworIyAgZWxpZiAoTFpPX1NJWkVPRl9JTlQgPT0gTFpPX1NJWkVPRl9WT0lEX1ApCisjICAgIGRlZmluZSBsem9fdWludHB0cl90ICAgICAgIHVuc2lnbmVkIGludAorIyAgZWxpZiAoTFpPX1NJWkVPRl9MT05HX0xPTkcgPT0gTFpPX1NJWkVPRl9WT0lEX1ApCisjICAgIGRlZmluZSBsem9fdWludHB0cl90ICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZworIyAgZWxzZQorIyAgICBkZWZpbmUgbHpvX3VpbnRwdHJfdCAgICAgICBzaXplX3QKKyMgIGVuZGlmCisjZW5kaWYKK0xaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YobHpvX3VpbnRwdHJfdCkgPj0gc2l6ZW9mKGx6b192b2lkcCkpCisKKyNpZiAxICYmICFkZWZpbmVkKExaT19DRkdfRlJFRVNUQU5ESU5HKQorI2lmIDEgJiYgIWRlZmluZWQoSEFWRV9TVFJJTkdfSCkKKyNkZWZpbmUgSEFWRV9TVFJJTkdfSCAxCisjZW5kaWYKKyNpZiAxICYmICFkZWZpbmVkKEhBVkVfTUVNQ01QKQorI2RlZmluZSBIQVZFX01FTUNNUCAxCisjZW5kaWYKKyNpZiAxICYmICFkZWZpbmVkKEhBVkVfTUVNQ1BZKQorI2RlZmluZSBIQVZFX01FTUNQWSAxCisjZW5kaWYKKyNpZiAxICYmICFkZWZpbmVkKEhBVkVfTUVNTU9WRSkKKyNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKKyNlbmRpZgorI2lmIDEgJiYgIWRlZmluZWQoSEFWRV9NRU1TRVQpCisjZGVmaW5lIEhBVkVfTUVNU0VUIDEKKyNlbmRpZgorI2VuZGlmCisKKyNpZiAxICYmIGRlZmluZWQoSEFWRV9TVFJJTkdfSCkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fQ0ZHX0ZSRUVTVEFORElORykKKyMgIHVuZGVmIEhBVkVfTUVNQ01QCisjICB1bmRlZiBIQVZFX01FTUNQWQorIyAgdW5kZWYgSEFWRV9NRU1NT1ZFCisjICB1bmRlZiBIQVZFX01FTVNFVAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChIQVZFX01FTUNNUCkKKyMgIHVuZGVmIG1lbWNtcAorIyAgZGVmaW5lIG1lbWNtcChhLGIsYykgICAgICAgICBsem9fbWVtY21wKGEsYixjKQorI2VsaWYgIWRlZmluZWQoX19MWk9fTU1PREVMX0hVR0UpCisjICBkZWZpbmUgbHpvX21lbWNtcChhLGIsYykgICAgIG1lbWNtcChhLGIsYykKKyNlbmRpZgorI2lmICFkZWZpbmVkKEhBVkVfTUVNQ1BZKQorIyAgdW5kZWYgbWVtY3B5CisjICBkZWZpbmUgbWVtY3B5KGEsYixjKSAgICAgICAgIGx6b19tZW1jcHkoYSxiLGMpCisjZWxpZiAhZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgIGRlZmluZSBsem9fbWVtY3B5KGEsYixjKSAgICAgbWVtY3B5KGEsYixjKQorI2VuZGlmCisjaWYgIWRlZmluZWQoSEFWRV9NRU1NT1ZFKQorIyAgdW5kZWYgbWVtbW92ZQorIyAgZGVmaW5lIG1lbW1vdmUoYSxiLGMpICAgICAgICBsem9fbWVtbW92ZShhLGIsYykKKyNlbGlmICFkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgZGVmaW5lIGx6b19tZW1tb3ZlKGEsYixjKSAgICBtZW1tb3ZlKGEsYixjKQorI2VuZGlmCisjaWYgIWRlZmluZWQoSEFWRV9NRU1TRVQpCisjICB1bmRlZiBtZW1zZXQKKyMgIGRlZmluZSBtZW1zZXQoYSxiLGMpICAgICAgICAgbHpvX21lbXNldChhLGIsYykKKyNlbGlmICFkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgZGVmaW5lIGx6b19tZW1zZXQoYSxiLGMpICAgICBtZW1zZXQoYSxiLGMpCisjZW5kaWYKKworI3VuZGVmIE5ERUJVRworI2lmIGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjICB1bmRlZiBMWk9fREVCVUcKKyMgIGRlZmluZSBOREVCVUcgMQorIyAgdW5kZWYgYXNzZXJ0CisjICBkZWZpbmUgYXNzZXJ0KGUpICgodm9pZCkwKQorI2Vsc2UKKyMgIGlmICFkZWZpbmVkKExaT19ERUJVRykKKyMgICAgZGVmaW5lIE5ERUJVRyAxCisjICBlbmRpZgorIyAgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI2lmIDAgJiYgZGVmaW5lZChfX0JPVU5EU19DSEVDS0lOR19PTikKKyMgIGluY2x1ZGUgPHVuY2hlY2tlZC5oPgorI2Vsc2UKKyMgIGRlZmluZSBCT1VORFNfQ0hFQ0tJTkdfT0ZGX0RVUklORyhzdG10KSAgICAgIHN0bXQKKyMgIGRlZmluZSBCT1VORFNfQ0hFQ0tJTkdfT0ZGX0lOX0VYUFIoZXhwcikgICAgIChleHByKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2x6b19pbmxpbmUpCisjICBkZWZpbmUgX19sem9faW5saW5lCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19mb3JjZWlubGluZSkKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fbm9pbmxpbmUpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUKKyNlbmRpZgorCisjaWYgMQorIyAgZGVmaW5lIExaT19CWVRFKHgpICAgICAgICgodW5zaWduZWQgY2hhcikgKHgpKQorI2Vsc2UKKyMgIGRlZmluZSBMWk9fQllURSh4KSAgICAgICAoKHVuc2lnbmVkIGNoYXIpICgoeCkgJiAweGZmKSkKKyNlbmRpZgorCisjZGVmaW5lIExaT19NQVgoYSxiKSAgICAgICAgKChhKSA+PSAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIExaT19NSU4oYSxiKSAgICAgICAgKChhKSA8PSAoYikgPyAoYSkgOiAoYikpCisjZGVmaW5lIExaT19NQVgzKGEsYixjKSAgICAgKChhKSA+PSAoYikgPyBMWk9fTUFYKGEsYykgOiBMWk9fTUFYKGIsYykpCisjZGVmaW5lIExaT19NSU4zKGEsYixjKSAgICAgKChhKSA8PSAoYikgPyBMWk9fTUlOKGEsYykgOiBMWk9fTUlOKGIsYykpCisKKyNkZWZpbmUgbHpvX3NpemVvZih0eXBlKSAgICAoKGx6b191aW50KSAoc2l6ZW9mKHR5cGUpKSkKKworI2RlZmluZSBMWk9fSElHSChhcnJheSkgICAgICgobHpvX3VpbnQpIChzaXplb2YoYXJyYXkpL3NpemVvZigqKGFycmF5KSkpKQorCisjZGVmaW5lIExaT19TSVpFKGJpdHMpICAgICAgKDF1IDw8IChiaXRzKSkKKyNkZWZpbmUgTFpPX01BU0soYml0cykgICAgICAoTFpPX1NJWkUoYml0cykgLSAxKQorCisjZGVmaW5lIExaT19MU0laRShiaXRzKSAgICAgKDF1bCA8PCAoYml0cykpCisjZGVmaW5lIExaT19MTUFTSyhiaXRzKSAgICAgKExaT19MU0laRShiaXRzKSAtIDEpCisKKyNkZWZpbmUgTFpPX1VTSVpFKGJpdHMpICAgICAoKGx6b191aW50KSAxIDw8IChiaXRzKSkKKyNkZWZpbmUgTFpPX1VNQVNLKGJpdHMpICAgICAoTFpPX1VTSVpFKGJpdHMpIC0gMSkKKworI2lmICFkZWZpbmVkKERNVUwpCisjaWYgMAorCisjICBkZWZpbmUgRE1VTChhLGIpICgobHpvX3hpbnQpICgobHpvX3VpbnQzMikoYSkgKiAobHpvX3VpbnQzMikoYikpKQorI2Vsc2UKKyMgIGRlZmluZSBETVVMKGEsYikgKChsem9feGludCkgKChhKSAqIChiKSkpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgMSAmJiAhZGVmaW5lZChMWk9fQ0ZHX05PX1VOQUxJR05FRCkKKyNpZiAxICYmIChMWk9fQVJDSF9BTUQ2NCB8fCBMWk9fQVJDSF9JMzg2KQorIyAgaWYgKExaT19TSVpFT0ZfU0hPUlQgPT0gMikKKyMgICAgZGVmaW5lIExaT19VTkFMSUdORURfT0tfMgorIyAgZW5kaWYKKyMgIGlmIChMWk9fU0laRU9GX0lOVCA9PSA0KQorIyAgICBkZWZpbmUgTFpPX1VOQUxJR05FRF9PS180CisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKQorICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoc2l6ZW9mKHNob3J0KSA9PSAyKQorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YobHpvX3VpbnQzMikgPT0gNCkKKyNlbGlmIGRlZmluZWQoTFpPX0FMSUdORURfT0tfNCkKKyAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZihsem9fdWludDMyKSA9PSA0KQorI2VuZGlmCisKKyNkZWZpbmUgTUVNQ1BZOF9EUyhkZXN0LHNyYyxsZW4pIFwKKyAgICBsem9fbWVtY3B5KGRlc3Qsc3JjLGxlbik7IGRlc3QgKz0gbGVuOyBzcmMgKz0gbGVuCisKKyNkZWZpbmUgQlpFUk84X1BUUihzLGwsbikgXAorICAgIGx6b19tZW1zZXQoKGx6b192b2lkcCkocyksMCwobHpvX3VpbnQpKGwpKihuKSkKKworI2RlZmluZSBNRU1DUFlfRFMoZGVzdCxzcmMsbGVuKSBcCisgICAgZG8gKmRlc3QrKyA9ICpzcmMrKzsgd2hpbGUgKC0tbGVuID4gMCkKKworX19MWk9fRVhURVJOX0MgaW50IF9fbHpvX2luaXRfZG9uZTsKK19fTFpPX0VYVEVSTl9DIGNvbnN0IGNoYXIgX19sem9fY29weXJpZ2h0W107CitMWk9fRVhURVJOKGNvbnN0IGx6b19ieXRlcCkgbHpvX2NvcHlyaWdodCh2b2lkKTsKKworI2lmbmRlZiBfX0xaT19QVFJfSAorI2RlZmluZSBfX0xaT19QVFJfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChsem9fdWludHB0cl90KQorIyAgaWYgZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgICAgZGVmaW5lIGx6b191aW50cHRyX3QgICB1bnNpZ25lZCBsb25nCisjICBlbHNlCisjICAgIGRlZmluZSBsem9fdWludHB0cl90ICAgYWNjX3VpbnRwdHJfdAorIyAgICBpZmRlZiBfX0FDQ19JTlRQVFJfVF9JU19QT0lOVEVSCisjICAgICAgZGVmaW5lIF9fTFpPX1VJTlRQVFJfVF9JU19QT0lOVEVSIDEKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIChMWk9fQVJDSF9JMDg2KQorI2RlZmluZSBQVFIoYSkgICAgICAgICAgICAgICgobHpvX2J5dGVwKSAoYSkpCisjZGVmaW5lIFBUUl9BTElHTkVEXzQoYSkgICAgKChBQ0NfUFRSX0ZQX09GRihhKSAmIDMpID09IDApCisjZGVmaW5lIFBUUl9BTElHTkVEMl80KGEsYikgKCgoQUNDX1BUUl9GUF9PRkYoYSkgfCBBQ0NfUFRSX0ZQX09GRihiKSkgJiAzKSA9PSAwKQorI2VsaWYgKExaT19NTV9QVlApCisjZGVmaW5lIFBUUihhKSAgICAgICAgICAgICAgKChsem9fYnl0ZXApIChhKSkKKyNkZWZpbmUgUFRSX0FMSUdORURfOChhKSAgICAoKCgobHpvX3VpbnRwdHJfdCkoYSkpID4+IDYxKSA9PSAwKQorI2RlZmluZSBQVFJfQUxJR05FRDJfOChhLGIpICgoKChsem9fdWludHB0cl90KShhKXwobHpvX3VpbnRwdHJfdCkoYikpID4+IDYxKSA9PSAwKQorI2Vsc2UKKyNkZWZpbmUgUFRSKGEpICAgICAgICAgICAgICAoKGx6b191aW50cHRyX3QpIChhKSkKKyNkZWZpbmUgUFRSX0xJTkVBUihhKSAgICAgICBQVFIoYSkKKyNkZWZpbmUgUFRSX0FMSUdORURfNChhKSAgICAoKFBUUl9MSU5FQVIoYSkgJiAzKSA9PSAwKQorI2RlZmluZSBQVFJfQUxJR05FRF84KGEpICAgICgoUFRSX0xJTkVBUihhKSAmIDcpID09IDApCisjZGVmaW5lIFBUUl9BTElHTkVEMl80KGEsYikgKCgoUFRSX0xJTkVBUihhKSB8IFBUUl9MSU5FQVIoYikpICYgMykgPT0gMCkKKyNkZWZpbmUgUFRSX0FMSUdORUQyXzgoYSxiKSAoKChQVFJfTElORUFSKGEpIHwgUFRSX0xJTkVBUihiKSkgJiA3KSA9PSAwKQorI2VuZGlmCisKKyNkZWZpbmUgUFRSX0xUKGEsYikgICAgICAgICAoUFRSKGEpIDwgUFRSKGIpKQorI2RlZmluZSBQVFJfR0UoYSxiKSAgICAgICAgIChQVFIoYSkgPj0gUFRSKGIpKQorI2RlZmluZSBQVFJfRElGRihhLGIpICAgICAgIChQVFIoYSkgLSBQVFIoYikpCisjZGVmaW5lIHBkKGEsYikgICAgICAgICAgICAgKChsem9fdWludCkgKChhKS0oYikpKQorCitMWk9fRVhURVJOKGx6b191aW50cHRyX3QpCitfX2x6b19wdHJfbGluZWFyKGNvbnN0IGx6b192b2lkcCBwdHIpOworCit0eXBlZGVmIHVuaW9uCit7CisgICAgY2hhciAgICAgICAgICAgIGFfY2hhcjsKKyAgICB1bnNpZ25lZCBjaGFyICAgYV91Y2hhcjsKKyAgICBzaG9ydCAgICAgICAgICAgYV9zaG9ydDsKKyAgICB1bnNpZ25lZCBzaG9ydCAgYV91c2hvcnQ7CisgICAgaW50ICAgICAgICAgICAgIGFfaW50OworICAgIHVuc2lnbmVkIGludCAgICBhX3VpbnQ7CisgICAgbG9uZyAgICAgICAgICAgIGFfbG9uZzsKKyAgICB1bnNpZ25lZCBsb25nICAgYV91bG9uZzsKKyAgICBsem9faW50ICAgICAgICAgYV9sem9faW50OworICAgIGx6b191aW50ICAgICAgICBhX2x6b191aW50OworICAgIGx6b19pbnQzMiAgICAgICBhX2x6b19pbnQzMjsKKyAgICBsem9fdWludDMyICAgICAgYV9sem9fdWludDMyOworICAgIHB0cmRpZmZfdCAgICAgICBhX3B0cmRpZmZfdDsKKyAgICBsem9fdWludHB0cl90ICAgYV9sem9fdWludHB0cl90OworICAgIGx6b192b2lkcCAgICAgICBhX2x6b192b2lkcDsKKyAgICB2b2lkICogICAgICAgICAgYV92b2lkX3A7CisgICAgbHpvX2J5dGVwICAgICAgIGFfbHpvX2J5dGVwOworICAgIGx6b19ieXRlcHAgICAgICBhX2x6b19ieXRlcHA7CisgICAgbHpvX3VpbnRwICAgICAgIGFfbHpvX3VpbnRwOworICAgIGx6b191aW50ICogICAgICBhX2x6b191aW50X3A7CisgICAgbHpvX3VpbnQzMnAgICAgIGFfbHpvX3VpbnQzMnA7CisgICAgbHpvX3VpbnQzMiAqICAgIGFfbHpvX3VpbnQzMl9wOworICAgIHVuc2lnbmVkIGNoYXIgKiBhX3VjaGFyX3A7CisgICAgY2hhciAqICAgICAgICAgIGFfY2hhcl9wOworfQorbHpvX2Z1bGxfYWxpZ25fdDsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUgTFpPX0RFVEVSTUlOSVNUSUMKKworI2RlZmluZSBMWk9fRElDVF9VU0VfUFRSCisjaWYgMCAmJiAoTFpPX0FSQ0hfSTA4NikKKyMgIHVuZGVmIExaT19ESUNUX1VTRV9QVFIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fRElDVF9VU0VfUFRSKQorIyAgZGVmaW5lIGx6b19kaWN0X3QgICAgY29uc3QgbHpvX2J5dGVwCisjICBkZWZpbmUgbHpvX2RpY3RfcCAgICBsem9fZGljdF90IF9fTFpPX01NT0RFTCAqCisjZWxzZQorIyAgZGVmaW5lIGx6b19kaWN0X3QgICAgbHpvX3VpbnQKKyMgIGRlZmluZSBsem9fZGljdF9wICAgIGx6b19kaWN0X3QgX19MWk9fTU1PREVMICoKKyNlbmRpZgorCisjZW5kaWYKKworI2lmICFkZWZpbmVkKE1JTklMWk9fQ0ZHX1NLSVBfTFpPX1BUUikKKworTFpPX1BVQkxJQyhsem9fdWludHB0cl90KQorX19sem9fcHRyX2xpbmVhcihjb25zdCBsem9fdm9pZHAgcHRyKQoreworICAgIGx6b191aW50cHRyX3QgcDsKKworI2lmIChMWk9fQVJDSF9JMDg2KQorICAgIHAgPSAoKChsem9fdWludHB0cl90KShBQ0NfUFRSX0ZQX1NFRyhwdHIpKSkgPDwgKDE2IC0gQUNDX01NX0FIU0hJRlQpKSArIChBQ0NfUFRSX0ZQX09GRihwdHIpKTsKKyNlbGlmIChMWk9fTU1fUFZQKQorICAgIHAgPSAobHpvX3VpbnRwdHJfdCkgKHB0cik7CisgICAgcCA9IChwIDw8IDMpIHwgKHAgPj4gNjEpOworI2Vsc2UKKyAgICBwID0gKGx6b191aW50cHRyX3QpIFBUUl9MSU5FQVIocHRyKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHA7Cit9CisKK0xaT19QVUJMSUModW5zaWduZWQpCitfX2x6b19hbGlnbl9nYXAoY29uc3QgbHpvX3ZvaWRwIHB0ciwgbHpvX3VpbnQgc2l6ZSkKK3sKKyNpZiBkZWZpbmVkKF9fTFpPX1VJTlRQVFJfVF9JU19QT0lOVEVSKQorICAgIHNpemVfdCBuID0gKHNpemVfdCkgcHRyOworICAgIG4gPSAoKChuICsgc2l6ZSAtIDEpIC8gc2l6ZSkgKiBzaXplKSAtIG47CisjZWxzZQorICAgIGx6b191aW50cHRyX3QgcCwgbjsKKyAgICBwID0gX19sem9fcHRyX2xpbmVhcihwdHIpOworICAgIG4gPSAoKChwICsgc2l6ZSAtIDEpIC8gc2l6ZSkgKiBzaXplKSAtIHA7CisjZW5kaWYKKworICAgIGFzc2VydChzaXplID4gMCk7CisgICAgYXNzZXJ0KChsb25nKW4gPj0gMCk7CisgICAgYXNzZXJ0KG4gPD0gc2l6ZSk7CisgICAgcmV0dXJuICh1bnNpZ25lZCluOworfQorCisjZW5kaWYKKworLyogSWYgeW91IHVzZSB0aGUgTFpPIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBJIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3UKKyAqIGtlZXAgdGhpcyBjb3B5cmlnaHQgc3RyaW5nIGluIHRoZSBleGVjdXRhYmxlIG9mIHlvdXIgcHJvZHVjdC4KKyAqLworCitjb25zdCBjaGFyIF9fbHpvX2NvcHlyaWdodFtdID0KKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5MWk8pCisgICAgTFpPX1ZFUlNJT05fU1RSSU5HOworI2Vsc2UKKyAgICAiXHJcblxuIgorICAgICJMWk8gZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LlxuIgorICAgICIkQ29weXJpZ2h0OiBMWk8gKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lclxuIgorICAgICI8bWFya3VzQG9iZXJodW1lci5jb20+XG4iCisgICAgImh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbSAkXG5cbiIKKyAgICAiJElkOiBMWk8gdmVyc2lvbjogdiIgTFpPX1ZFUlNJT05fU1RSSU5HICIsICIgTFpPX1ZFUlNJT05fREFURSAiICRcbiIKKyAgICAiJEJ1aWx0OiAiIF9fREFURV9fICIgIiBfX1RJTUVfXyAiICRcbiIKKyAgICAiJEluZm86ICIgTFpPX0lORk9fU1RSSU5HICIgJFxuIjsKKyNlbmRpZgorCitMWk9fUFVCTElDKGNvbnN0IGx6b19ieXRlcCkKK2x6b19jb3B5cmlnaHQodm9pZCkKK3sKKyNpZiAoTFpPX09TX0RPUzE2ICYmIExaT19DQ19UVVJCT0MpCisgICAgcmV0dXJuIChsem9fdm9pZHApIF9fbHpvX2NvcHlyaWdodDsKKyNlbHNlCisgICAgcmV0dXJuIChjb25zdCBsem9fYnl0ZXApIF9fbHpvX2NvcHlyaWdodDsKKyNlbmRpZgorfQorCitMWk9fUFVCTElDKHVuc2lnbmVkKQorbHpvX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gTFpPX1ZFUlNJT047Cit9CisKK0xaT19QVUJMSUMoY29uc3QgY2hhciAqKQorbHpvX3ZlcnNpb25fc3RyaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIExaT19WRVJTSU9OX1NUUklORzsKK30KKworTFpPX1BVQkxJQyhjb25zdCBjaGFyICopCitsem9fdmVyc2lvbl9kYXRlKHZvaWQpCit7CisgICAgcmV0dXJuIExaT19WRVJTSU9OX0RBVEU7Cit9CisKK0xaT19QVUJMSUMoY29uc3QgbHpvX2NoYXJwKQorX2x6b192ZXJzaW9uX3N0cmluZyh2b2lkKQoreworICAgIHJldHVybiBMWk9fVkVSU0lPTl9TVFJJTkc7Cit9CisKK0xaT19QVUJMSUMoY29uc3QgbHpvX2NoYXJwKQorX2x6b192ZXJzaW9uX2RhdGUodm9pZCkKK3sKKyAgICByZXR1cm4gTFpPX1ZFUlNJT05fREFURTsKK30KKworI2RlZmluZSBMWk9fQkFTRSA2NTUyMXUKKyNkZWZpbmUgTFpPX05NQVggNTU1MgorCisjZGVmaW5lIExaT19ETzEoYnVmLGkpICBzMSArPSBidWZbaV07IHMyICs9IHMxCisjZGVmaW5lIExaT19ETzIoYnVmLGkpICBMWk9fRE8xKGJ1ZixpKTsgTFpPX0RPMShidWYsaSsxKTsKKyNkZWZpbmUgTFpPX0RPNChidWYsaSkgIExaT19ETzIoYnVmLGkpOyBMWk9fRE8yKGJ1ZixpKzIpOworI2RlZmluZSBMWk9fRE84KGJ1ZixpKSAgTFpPX0RPNChidWYsaSk7IExaT19ETzQoYnVmLGkrNCk7CisjZGVmaW5lIExaT19ETzE2KGJ1ZixpKSBMWk9fRE84KGJ1ZixpKTsgTFpPX0RPOChidWYsaSs4KTsKKworTFpPX1BVQkxJQyhsem9fdWludDMyKQorbHpvX2FkbGVyMzIobHpvX3VpbnQzMiBhZGxlciwgY29uc3QgbHpvX2J5dGVwIGJ1ZiwgbHpvX3VpbnQgbGVuKQoreworICAgIGx6b191aW50MzIgczEgPSBhZGxlciAmIDB4ZmZmZjsKKyAgICBsem9fdWludDMyIHMyID0gKGFkbGVyID4+IDE2KSAmIDB4ZmZmZjsKKyAgICB1bnNpZ25lZCBrOworCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHdoaWxlIChsZW4gPiAwKQorICAgIHsKKyAgICAgICAgayA9IGxlbiA8IExaT19OTUFYID8gKHVuc2lnbmVkKSBsZW4gOiBMWk9fTk1BWDsKKyAgICAgICAgbGVuIC09IGs7CisgICAgICAgIGlmIChrID49IDE2KSBkbworICAgICAgICB7CisgICAgICAgICAgICBMWk9fRE8xNihidWYsMCk7CisgICAgICAgICAgICBidWYgKz0gMTY7CisgICAgICAgICAgICBrIC09IDE2OworICAgICAgICB9IHdoaWxlIChrID49IDE2KTsKKyAgICAgICAgaWYgKGsgIT0gMCkgZG8KKyAgICAgICAgeworICAgICAgICAgICAgczEgKz0gKmJ1ZisrOworICAgICAgICAgICAgczIgKz0gczE7CisgICAgICAgIH0gd2hpbGUgKC0tayA+IDApOworICAgICAgICBzMSAlPSBMWk9fQkFTRTsKKyAgICAgICAgczIgJT0gTFpPX0JBU0U7CisgICAgfQorICAgIHJldHVybiAoczIgPDwgMTYpIHwgczE7Cit9CisKKyN1bmRlZiBMWk9fRE8xCisjdW5kZWYgTFpPX0RPMgorI3VuZGVmIExaT19ETzQKKyN1bmRlZiBMWk9fRE84CisjdW5kZWYgTFpPX0RPMTYKKworI2lmICFkZWZpbmVkKE1JTklMWk9fQ0ZHX1NLSVBfTFpPX1NUUklORykKKyN1bmRlZiBsem9fbWVtY21wCisjdW5kZWYgbHpvX21lbWNweQorI3VuZGVmIGx6b19tZW1tb3ZlCisjdW5kZWYgbHpvX21lbXNldAorI2lmICFkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgdW5kZWYgTFpPX0hBVkVfTU1fSFVHRV9QVFIKKyNlbmRpZgorI2RlZmluZSBsem9faHNpemVfdCAgICAgICAgICAgICBsem9fdWludAorI2RlZmluZSBsem9faHZvaWRfcCAgICAgICAgICAgICBsem9fdm9pZHAKKyNkZWZpbmUgbHpvX2hieXRlX3AgICAgICAgICAgICAgbHpvX2J5dGVwCisjZGVmaW5lIExaT0xJQl9QVUJMSUMocixmKSAgICAgIExaT19QVUJMSUMocikgZgorI2RlZmluZSBsem9faG1lbWNtcCAgICAgICAgICAgICBsem9fbWVtY21wCisjZGVmaW5lIGx6b19obWVtY3B5ICAgICAgICAgICAgIGx6b19tZW1jcHkKKyNkZWZpbmUgbHpvX2htZW1tb3ZlICAgICAgICAgICAgbHpvX21lbW1vdmUKKyNkZWZpbmUgbHpvX2htZW1zZXQgICAgICAgICAgICAgbHpvX21lbXNldAorI2RlZmluZSBfX0xaT0xJQl9ITUVNQ1BZX0NIX0lOQ0xVREVEIDEKKyNpZiAhZGVmaW5lZChMWk9MSUJfUFVCTElDKQorIyAgZGVmaW5lIExaT0xJQl9QVUJMSUMocixmKSAgICByIF9fTFpPTElCX0ZVTkNOQU1FKGYpCisjZW5kaWYKK0xaT0xJQl9QVUJMSUMoaW50LCBsem9faG1lbWNtcCkgKGNvbnN0IGx6b19odm9pZF9wIHMxLCBjb25zdCBsem9faHZvaWRfcCBzMiwgbHpvX2hzaXplX3QgbGVuKQoreworI2lmIChMWk9fSEFWRV9NTV9IVUdFX1BUUikgfHwgIWRlZmluZWQoSEFWRV9NRU1DTVApCisgICAgY29uc3QgbHpvX2hieXRlX3AgcDEgPSAoY29uc3QgbHpvX2hieXRlX3ApIHMxOworICAgIGNvbnN0IGx6b19oYnl0ZV9wIHAyID0gKGNvbnN0IGx6b19oYnl0ZV9wKSBzMjsKKyAgICBpZiBfX2x6b19saWtlbHkobGVuID4gMCkgZG8KKyAgICB7CisgICAgICAgIGludCBkID0gKnAxIC0gKnAyOworICAgICAgICBpZiAoZCAhPSAwKQorICAgICAgICAgICAgcmV0dXJuIGQ7CisgICAgICAgIHAxKys7IHAyKys7CisgICAgfSB3aGlsZSBfX2x6b19saWtlbHkoLS1sZW4gPiAwKTsKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIG1lbWNtcChzMSwgczIsIGxlbik7CisjZW5kaWYKK30KK0xaT0xJQl9QVUJMSUMobHpvX2h2b2lkX3AsIGx6b19obWVtY3B5KSAobHpvX2h2b2lkX3AgZGVzdCwgY29uc3QgbHpvX2h2b2lkX3Agc3JjLCBsem9faHNpemVfdCBsZW4pCit7CisjaWYgKExaT19IQVZFX01NX0hVR0VfUFRSKSB8fCAhZGVmaW5lZChIQVZFX01FTUNQWSkKKyAgICBsem9faGJ5dGVfcCBwMSA9IChsem9faGJ5dGVfcCkgZGVzdDsKKyAgICBjb25zdCBsem9faGJ5dGVfcCBwMiA9IChjb25zdCBsem9faGJ5dGVfcCkgc3JjOworICAgIGlmICghKGxlbiA+IDApIHx8IHAxID09IHAyKQorICAgICAgICByZXR1cm4gZGVzdDsKKyAgICBkbworICAgICAgICAqcDErKyA9ICpwMisrOworICAgIHdoaWxlIF9fbHpvX2xpa2VseSgtLWxlbiA+IDApOworICAgIHJldHVybiBkZXN0OworI2Vsc2UKKyAgICByZXR1cm4gbWVtY3B5KGRlc3QsIHNyYywgbGVuKTsKKyNlbmRpZgorfQorTFpPTElCX1BVQkxJQyhsem9faHZvaWRfcCwgbHpvX2htZW1tb3ZlKSAobHpvX2h2b2lkX3AgZGVzdCwgY29uc3QgbHpvX2h2b2lkX3Agc3JjLCBsem9faHNpemVfdCBsZW4pCit7CisjaWYgKExaT19IQVZFX01NX0hVR0VfUFRSKSB8fCAhZGVmaW5lZChIQVZFX01FTU1PVkUpCisgICAgbHpvX2hieXRlX3AgcDEgPSAobHpvX2hieXRlX3ApIGRlc3Q7CisgICAgY29uc3QgbHpvX2hieXRlX3AgcDIgPSAoY29uc3QgbHpvX2hieXRlX3ApIHNyYzsKKyAgICBpZiAoIShsZW4gPiAwKSB8fCBwMSA9PSBwMikKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgaWYgKHAxIDwgcDIpCisgICAgeworICAgICAgICBkbworICAgICAgICAgICAgKnAxKysgPSAqcDIrKzsKKyAgICAgICAgd2hpbGUgX19sem9fbGlrZWx5KC0tbGVuID4gMCk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHAxICs9IGxlbjsKKyAgICAgICAgcDIgKz0gbGVuOworICAgICAgICBkbworICAgICAgICAgICAgKi0tcDEgPSAqLS1wMjsKKyAgICAgICAgd2hpbGUgX19sem9fbGlrZWx5KC0tbGVuID4gMCk7CisgICAgfQorICAgIHJldHVybiBkZXN0OworI2Vsc2UKKyAgICByZXR1cm4gbWVtbW92ZShkZXN0LCBzcmMsIGxlbik7CisjZW5kaWYKK30KK0xaT0xJQl9QVUJMSUMobHpvX2h2b2lkX3AsIGx6b19obWVtc2V0KSAobHpvX2h2b2lkX3AgcywgaW50IGMsIGx6b19oc2l6ZV90IGxlbikKK3sKKyNpZiAoTFpPX0hBVkVfTU1fSFVHRV9QVFIpIHx8ICFkZWZpbmVkKEhBVkVfTUVNU0VUKQorICAgIGx6b19oYnl0ZV9wIHAgPSAobHpvX2hieXRlX3ApIHM7CisgICAgaWYgX19sem9fbGlrZWx5KGxlbiA+IDApIGRvCisgICAgICAgICpwKysgPSAodW5zaWduZWQgY2hhcikgYzsKKyAgICB3aGlsZSBfX2x6b19saWtlbHkoLS1sZW4gPiAwKTsKKyAgICByZXR1cm4gczsKKyNlbHNlCisgICAgcmV0dXJuIG1lbXNldChzLCBjLCBsZW4pOworI2VuZGlmCit9CisjdW5kZWYgTFpPTElCX1BVQkxJQworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorCisjZGVmaW5lIEFDQ19XQU5UX0FDQ19DSEtfQ0ggMQorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKworICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QobHpvX2ludCkKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QobHpvX3VpbnQpCisKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1NJR05FRF9UKGx6b19pbnQzMikKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QobHpvX3VpbnQzMikKKyAgICBBQ0NDSEtfQVNTRVJUKChMWk9fVUlOVDMyX0MoMSkgPDwgKGludCkoOCpzaXplb2YoTFpPX1VJTlQzMl9DKDEpKS0xKSkgPiAwKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGx6b191aW50MzIpID49IDQpCisKKyNpZiAhZGVmaW5lZChfX0xaT19VSU5UUFRSX1RfSVNfUE9JTlRFUikKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QobHpvX3VpbnRwdHJfdCkKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGx6b191aW50cHRyX3QpID49IHNpemVvZihsem9fdm9pZHApKQorCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKGx6b194aW50KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGx6b194aW50KSA+PSBzaXplb2YobHpvX3VpbnQzMikpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobHpvX3hpbnQpID49IHNpemVvZihsem9fdWludCkpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobHpvX3hpbnQpID09IHNpemVvZihsem9fdWludDMyKSB8fCBzaXplb2YobHpvX3hpbnQpID09IHNpemVvZihsem9fdWludCkpCisKKyNlbmRpZgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKworTFpPX1BVQkxJQyhpbnQpCitfbHpvX2NvbmZpZ19jaGVjayh2b2lkKQoreworICAgIGx6b19ib29sIHIgPSAxOworICAgIHVuaW9uIHsgdW5zaWduZWQgY2hhciBjWzIqc2l6ZW9mKGx6b194aW50KV07IGx6b194aW50IGxbMl07IH0gdTsKKyAgICBsem9fdWludHB0cl90IHA7CisKKyNpZiAhZGVmaW5lZChMWk9fQ0ZHX05PX0NPTkZJR19DSEVDSykKKyNpZiBkZWZpbmVkKExaT19BQklfQklHX0VORElBTikKKyAgICB1LmxbMF0gPSB1LmxbMV0gPSAwOyB1LmNbc2l6ZW9mKGx6b194aW50KSAtIDFdID0gMTI4OworICAgIHIgJj0gKHUubFswXSA9PSAxMjgpOworI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisgICAgdS5sWzBdID0gdS5sWzFdID0gMDsgdS5jWzBdID0gMTI4OworICAgIHIgJj0gKHUubFswXSA9PSAxMjgpOworI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzIpCisgICAgcCA9IChsem9fdWludHB0cl90KSAoY29uc3QgbHpvX3ZvaWRwKSAmdS5jWzBdOworICAgIHUubFswXSA9IHUubFsxXSA9IDA7CisgICAgciAmPSAoKCogKGNvbnN0IGx6b191c2hvcnRwKSAocCsxKSkgPT0gMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkKKyAgICBwID0gKGx6b191aW50cHRyX3QpIChjb25zdCBsem9fdm9pZHApICZ1LmNbMF07CisgICAgdS5sWzBdID0gdS5sWzFdID0gMDsKKyAgICByICY9ICgoKiAoY29uc3QgbHpvX3VpbnQzMnApIChwKzEpKSA9PSAwKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKHUpOyBMWk9fVU5VU0VEKHApOworICAgIHJldHVybiByID09IDEgPyBMWk9fRV9PSyA6IExaT19FX0VSUk9SOworfQorCitpbnQgX19sem9faW5pdF9kb25lID0gMDsKKworTFpPX1BVQkxJQyhpbnQpCitfX2x6b19pbml0X3YyKHVuc2lnbmVkIHYsIGludCBzMSwgaW50IHMyLCBpbnQgczMsIGludCBzNCwgaW50IHM1LAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgczYsIGludCBzNywgaW50IHM4LCBpbnQgczkpCit7CisgICAgaW50IHI7CisKKyNpZiBkZWZpbmVkKF9fTFpPX0lOX01JTklMWk8pCisjZWxpZiAoTFpPX0NDX01TQyAmJiAoKF9NU0NfVkVSKSA8IDcwMCkpCisjZWxzZQorI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKGV4cHIpCisjZW5kaWYKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisKKyAgICBfX2x6b19pbml0X2RvbmUgPSAxOworCisgICAgaWYgKHYgPT0gMCkKKyAgICAgICAgcmV0dXJuIExaT19FX0VSUk9SOworCisgICAgciA9IChzMSA9PSAtMSB8fCBzMSA9PSAoaW50KSBzaXplb2Yoc2hvcnQpKSAmJgorICAgICAgICAoczIgPT0gLTEgfHwgczIgPT0gKGludCkgc2l6ZW9mKGludCkpICYmCisgICAgICAgIChzMyA9PSAtMSB8fCBzMyA9PSAoaW50KSBzaXplb2YobG9uZykpICYmCisgICAgICAgIChzNCA9PSAtMSB8fCBzNCA9PSAoaW50KSBzaXplb2YobHpvX3VpbnQzMikpICYmCisgICAgICAgIChzNSA9PSAtMSB8fCBzNSA9PSAoaW50KSBzaXplb2YobHpvX3VpbnQpKSAmJgorICAgICAgICAoczYgPT0gLTEgfHwgczYgPT0gKGludCkgbHpvX3NpemVvZl9kaWN0X3QpICYmCisgICAgICAgIChzNyA9PSAtMSB8fCBzNyA9PSAoaW50KSBzaXplb2YoY2hhciAqKSkgJiYKKyAgICAgICAgKHM4ID09IC0xIHx8IHM4ID09IChpbnQpIHNpemVvZihsem9fdm9pZHApKSAmJgorICAgICAgICAoczkgPT0gLTEgfHwgczkgPT0gKGludCkgc2l6ZW9mKGx6b19jYWxsYmFja190KSk7CisgICAgaWYgKCFyKQorICAgICAgICByZXR1cm4gTFpPX0VfRVJST1I7CisKKyAgICByID0gX2x6b19jb25maWdfY2hlY2soKTsKKyAgICBpZiAociAhPSBMWk9fRV9PSykKKyAgICAgICAgcmV0dXJuIHI7CisKKyAgICByZXR1cm4gcjsKK30KKworI2lmICFkZWZpbmVkKF9fTFpPX0lOX01JTklMWk8pCisKKyNpZiAoTFpPX09TX1dJTjE2ICYmIExaT19DQ19XQVRDT01DKSAmJiBkZWZpbmVkKF9fU1dfQkQpCisKKyNpZiAwCitCT09MIEZBUiBQQVNDQUwgTGliTWFpbiAoIEhBTkRMRSBoSW5zdGFuY2UsIFdPUkQgd0RhdGFTZWdtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICBXT1JEIHdIZWFwU2l6ZSwgTFBTVFIgbHBzekNtZExpbmUgKQorI2Vsc2UKK2ludCBfX2ZhciBfX3Bhc2NhbCBMaWJNYWluICggaW50IGEsIHNob3J0IGIsIHNob3J0IGMsIGxvbmcgZCApCisjZW5kaWYKK3sKKyAgICBMWk9fVU5VU0VEKGEpOyBMWk9fVU5VU0VEKGIpOyBMWk9fVU5VU0VEKGMpOyBMWk9fVU5VU0VEKGQpOworICAgIHJldHVybiAxOworfQorCisjZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUgZG9fY29tcHJlc3MgICAgICAgICBfbHpvMXhfMV9kb19jb21wcmVzcworCisjaWYgIWRlZmluZWQoTUlOSUxaT19DRkdfU0tJUF9MWk8xWF8xX0NPTVBSRVNTKQorCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2RlZmluZSBEX0JJVFMgICAgICAgICAgMTQKKyNkZWZpbmUgRF9JTkRFWDEoZCxwKSAgICAgICBkID0gRE0oRE1VTCgweDIxLERYMyhwLDUsNSw2KSkgPj4gNSkKKyNkZWZpbmUgRF9JTkRFWDIoZCxwKSAgICAgICBkID0gKGQgJiAoRF9NQVNLICYgMHg3ZmYpKSBeIChEX0hJR0ggfCAweDFmKQorCisjaWZuZGVmIF9fTFpPX0NPTkZJRzFYX0gKKyNkZWZpbmUgX19MWk9fQ09ORklHMVhfSAorCisjaWYgIWRlZmluZWQoTFpPMVgpICYmICFkZWZpbmVkKExaTzFZKSAmJiAhZGVmaW5lZChMWk8xWikKKyMgIGRlZmluZSBMWk8xWAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorI2luY2x1ZGUgImx6by9sem8xeC5oIgorI2VuZGlmCisKKyNkZWZpbmUgTFpPX0VPRl9DT0RFCisjdW5kZWYgTFpPX0RFVEVSTUlOSVNUSUMKKworI2RlZmluZSBNMV9NQVhfT0ZGU0VUICAgMHgwNDAwCisjaWZuZGVmIE0yX01BWF9PRkZTRVQKKyNkZWZpbmUgTTJfTUFYX09GRlNFVCAgIDB4MDgwMAorI2VuZGlmCisjZGVmaW5lIE0zX01BWF9PRkZTRVQgICAweDQwMDAKKyNkZWZpbmUgTTRfTUFYX09GRlNFVCAgIDB4YmZmZgorCisjZGVmaW5lIE1YX01BWF9PRkZTRVQgICAoTTFfTUFYX09GRlNFVCArIE0yX01BWF9PRkZTRVQpCisKKyNkZWZpbmUgTTFfTUlOX0xFTiAgICAgIDIKKyNkZWZpbmUgTTFfTUFYX0xFTiAgICAgIDIKKyNkZWZpbmUgTTJfTUlOX0xFTiAgICAgIDMKKyNpZm5kZWYgTTJfTUFYX0xFTgorI2RlZmluZSBNMl9NQVhfTEVOICAgICAgOAorI2VuZGlmCisjZGVmaW5lIE0zX01JTl9MRU4gICAgICAzCisjZGVmaW5lIE0zX01BWF9MRU4gICAgICAzMworI2RlZmluZSBNNF9NSU5fTEVOICAgICAgMworI2RlZmluZSBNNF9NQVhfTEVOICAgICAgOQorCisjZGVmaW5lIE0xX01BUktFUiAgICAgICAwCisjZGVmaW5lIE0yX01BUktFUiAgICAgICA2NAorI2RlZmluZSBNM19NQVJLRVIgICAgICAgMzIKKyNkZWZpbmUgTTRfTUFSS0VSICAgICAgIDE2CisKKyNpZm5kZWYgTUlOX0xPT0tBSEVBRAorI2RlZmluZSBNSU5fTE9PS0FIRUFEICAgICAgIChNMl9NQVhfTEVOICsgMSkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fTkVFRF9ESUNUX0gpCisKKyNpZm5kZWYgTFpPX0hBU0gKKyNkZWZpbmUgTFpPX0hBU0ggICAgICAgICAgICBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQgorI2VuZGlmCisjZGVmaW5lIERMX01JTl9MRU4gICAgICAgICAgTTJfTUlOX0xFTgorCisjaWZuZGVmIF9fTFpPX0RJQ1RfSAorI2RlZmluZSBfX0xaT19ESUNUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRF9CSVRTKSAmJiBkZWZpbmVkKERCSVRTKQorIyAgZGVmaW5lIERfQklUUyAgICAgICAgREJJVFMKKyNlbmRpZgorI2lmICFkZWZpbmVkKERfQklUUykKKyMgIGVycm9yICJEX0JJVFMgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiAoRF9CSVRTIDwgMTYpCisjICBkZWZpbmUgRF9TSVpFICAgICAgICBMWk9fU0laRShEX0JJVFMpCisjICBkZWZpbmUgRF9NQVNLICAgICAgICBMWk9fTUFTSyhEX0JJVFMpCisjZWxzZQorIyAgZGVmaW5lIERfU0laRSAgICAgICAgTFpPX1VTSVpFKERfQklUUykKKyMgIGRlZmluZSBEX01BU0sgICAgICAgIExaT19VTUFTSyhEX0JJVFMpCisjZW5kaWYKKyNkZWZpbmUgRF9ISUdIICAgICAgICAgICgoRF9NQVNLID4+IDEpICsgMSkKKworI2lmICFkZWZpbmVkKEREX0JJVFMpCisjICBkZWZpbmUgRERfQklUUyAgICAgICAwCisjZW5kaWYKKyNkZWZpbmUgRERfU0laRSAgICAgICAgIExaT19TSVpFKEREX0JJVFMpCisjZGVmaW5lIEREX01BU0sgICAgICAgICBMWk9fTUFTSyhERF9CSVRTKQorCisjaWYgIWRlZmluZWQoRExfQklUUykKKyMgIGRlZmluZSBETF9CSVRTICAgICAgIChEX0JJVFMgLSBERF9CSVRTKQorI2VuZGlmCisjaWYgKERMX0JJVFMgPCAxNikKKyMgIGRlZmluZSBETF9TSVpFICAgICAgIExaT19TSVpFKERMX0JJVFMpCisjICBkZWZpbmUgRExfTUFTSyAgICAgICBMWk9fTUFTSyhETF9CSVRTKQorI2Vsc2UKKyMgIGRlZmluZSBETF9TSVpFICAgICAgIExaT19VU0laRShETF9CSVRTKQorIyAgZGVmaW5lIERMX01BU0sgICAgICAgTFpPX1VNQVNLKERMX0JJVFMpCisjZW5kaWYKKworI2lmIChEX0JJVFMgIT0gRExfQklUUyArIEREX0JJVFMpCisjICBlcnJvciAiRF9CSVRTIGRvZXMgbm90IG1hdGNoIgorI2VuZGlmCisjaWYgKERfQklUUyA8IDggfHwgRF9CSVRTID4gMTgpCisjICBlcnJvciAiaW52YWxpZCBEX0JJVFMiCisjZW5kaWYKKyNpZiAoRExfQklUUyA8IDggfHwgRExfQklUUyA+IDIwKQorIyAgZXJyb3IgImludmFsaWQgRExfQklUUyIKKyNlbmRpZgorI2lmIChERF9CSVRTIDwgMCB8fCBERF9CSVRTID4gNikKKyMgIGVycm9yICJpbnZhbGlkIEREX0JJVFMiCisjZW5kaWYKKworI2lmICFkZWZpbmVkKERMX01JTl9MRU4pCisjICBkZWZpbmUgRExfTUlOX0xFTiAgICAzCisjZW5kaWYKKyNpZiAhZGVmaW5lZChETF9TSElGVCkKKyMgIGRlZmluZSBETF9TSElGVCAgICAgICgoRExfQklUUyArIChETF9NSU5fTEVOIC0gMSkpIC8gRExfTUlOX0xFTikKKyNlbmRpZgorCisjZGVmaW5lIExaT19IQVNIX0daSVAgICAgICAgICAgICAgICAgICAgMQorI2RlZmluZSBMWk9fSEFTSF9HWklQX0lOQ1JFTUVOVEFMICAgICAgIDIKKyNkZWZpbmUgTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0EgICAgICAzCisjZGVmaW5lIExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9CICAgICAgNAorCisjaWYgIWRlZmluZWQoTFpPX0hBU0gpCisjICBlcnJvciAiY2hvb3NlIGEgaGFzaGluZyBzdHJhdGVneSIKKyNlbmRpZgorCisjdW5kZWYgRE0KKyN1bmRlZiBEWAorCisjaWYgKERMX01JTl9MRU4gPT0gMykKKyMgIGRlZmluZSBfRFYyX0EocCxzaGlmdDEsc2hpZnQyKSBcCisgICAgICAgICgoKCggKGx6b194aW50KSgocClbMF0pIDw8IHNoaWZ0MSkgXiAocClbMV0pIDw8IHNoaWZ0MikgXiAocClbMl0pCisjICBkZWZpbmUgX0RWMl9CKHAsc2hpZnQxLHNoaWZ0MikgXAorICAgICAgICAoKCgoIChsem9feGludCkoKHApWzJdKSA8PCBzaGlmdDEpIF4gKHApWzFdKSA8PCBzaGlmdDIpIF4gKHApWzBdKQorIyAgZGVmaW5lIF9EVjNfQihwLHNoaWZ0MSxzaGlmdDIsc2hpZnQzKSBcCisgICAgICAgICgoX0RWMl9CKChwKSsxLHNoaWZ0MSxzaGlmdDIpIDw8IChzaGlmdDMpKSBeIChwKVswXSkKKyNlbGlmIChETF9NSU5fTEVOID09IDIpCisjICBkZWZpbmUgX0RWMl9BKHAsc2hpZnQxLHNoaWZ0MikgXAorICAgICAgICAoKCAobHpvX3hpbnQpKHBbMF0pIDw8IHNoaWZ0MSkgXiBwWzFdKQorIyAgZGVmaW5lIF9EVjJfQihwLHNoaWZ0MSxzaGlmdDIpIFwKKyAgICAgICAgKCggKGx6b194aW50KShwWzFdKSA8PCBzaGlmdDEpIF4gcFsyXSkKKyNlbHNlCisjICBlcnJvciAiaW52YWxpZCBETF9NSU5fTEVOIgorI2VuZGlmCisjZGVmaW5lIF9EVl9BKHAsc2hpZnQpICAgICAgX0RWMl9BKHAsc2hpZnQsc2hpZnQpCisjZGVmaW5lIF9EVl9CKHAsc2hpZnQpICAgICAgX0RWMl9CKHAsc2hpZnQsc2hpZnQpCisjZGVmaW5lIERBMihwLHMxLHMyKSBcCisgICAgICAgICgoKCgobHpvX3hpbnQpKChwKVsyXSkgPDwgKHMyKSkgKyAocClbMV0pIDw8IChzMSkpICsgKHApWzBdKQorI2RlZmluZSBEUzIocCxzMSxzMikgXAorICAgICAgICAoKCgoKGx6b194aW50KSgocClbMl0pIDw8IChzMikpIC0gKHApWzFdKSA8PCAoczEpKSAtIChwKVswXSkKKyNkZWZpbmUgRFgyKHAsczEsczIpIFwKKyAgICAgICAgKCgoKChsem9feGludCkoKHApWzJdKSA8PCAoczIpKSBeIChwKVsxXSkgPDwgKHMxKSkgXiAocClbMF0pCisjZGVmaW5lIERBMyhwLHMxLHMyLHMzKSAoKERBMigocCkrMSxzMixzMykgPDwgKHMxKSkgKyAocClbMF0pCisjZGVmaW5lIERTMyhwLHMxLHMyLHMzKSAoKERTMigocCkrMSxzMixzMykgPDwgKHMxKSkgLSAocClbMF0pCisjZGVmaW5lIERYMyhwLHMxLHMyLHMzKSAoKERYMigocCkrMSxzMixzMykgPDwgKHMxKSkgXiAocClbMF0pCisjZGVmaW5lIERNUyh2LHMpICAgICAgICAoKGx6b191aW50KSAoKCh2KSAmIChEX01BU0sgPj4gKHMpKSkgPDwgKHMpKSkKKyNkZWZpbmUgRE0odikgICAgICAgICAgIERNUyh2LDApCisKKyNpZiAoTFpPX0hBU0ggPT0gTFpPX0hBU0hfR1pJUCkKKyMgIGRlZmluZSBfRElOREVYKGR2LHApICAgICAoX0RWX0EoKHApLERMX1NISUZUKSkKKworI2VsaWYgKExaT19IQVNIID09IExaT19IQVNIX0daSVBfSU5DUkVNRU5UQUwpCisjICBkZWZpbmUgX19MWk9fSEFTSF9JTkNSRU1FTlRBTAorIyAgZGVmaW5lIERWQUxfRklSU1QoZHYscCkgIGR2ID0gX0RWX0EoKHApLERMX1NISUZUKQorIyAgZGVmaW5lIERWQUxfTkVYVChkdixwKSAgIGR2ID0gKCgoZHYpIDw8IERMX1NISUZUKSBeIHBbMl0pCisjICBkZWZpbmUgX0RJTkRFWChkdixwKSAgICAgKGR2KQorIyAgZGVmaW5lIERWQUxfTE9PS0FIRUFEICAgIERMX01JTl9MRU4KKworI2VsaWYgKExaT19IQVNIID09IExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9BKQorIyAgZGVmaW5lIF9fTFpPX0hBU0hfSU5DUkVNRU5UQUwKKyMgIGRlZmluZSBEVkFMX0ZJUlNUKGR2LHApICBkdiA9IF9EVl9BKChwKSw1KQorIyAgZGVmaW5lIERWQUxfTkVYVChkdixwKSBcCisgICAgICAgICAgICAgICAgZHYgXj0gKGx6b194aW50KShwWy0xXSkgPDwgKDIqNSk7IGR2ID0gKCgoZHYpIDw8IDUpIF4gcFsyXSkKKyMgIGRlZmluZSBfRElOREVYKGR2LHApICAgICAoKERNVUwoMHg5ZjVmLGR2KSkgPj4gNSkKKyMgIGRlZmluZSBEVkFMX0xPT0tBSEVBRCAgICBETF9NSU5fTEVOCisKKyNlbGlmIChMWk9fSEFTSCA9PSBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQikKKyMgIGRlZmluZSBfX0xaT19IQVNIX0lOQ1JFTUVOVEFMCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgZHYgPSBfRFZfQigocCksNSkKKyMgIGRlZmluZSBEVkFMX05FWFQoZHYscCkgXAorICAgICAgICAgICAgICAgIGR2IF49IHBbLTFdOyBkdiA9ICgoKGR2KSA+PiA1KSBeICgobHpvX3hpbnQpKHBbMl0pIDw8ICgyKjUpKSkKKyMgIGRlZmluZSBfRElOREVYKGR2LHApICAgICAoKERNVUwoMHg5ZjVmLGR2KSkgPj4gNSkKKyMgIGRlZmluZSBEVkFMX0xPT0tBSEVBRCAgICBETF9NSU5fTEVOCisKKyNlbHNlCisjICBlcnJvciAiY2hvb3NlIGEgaGFzaGluZyBzdHJhdGVneSIKKyNlbmRpZgorCisjaWZuZGVmIERJTkRFWAorI2RlZmluZSBESU5ERVgoZHYscCkgICAgICAgICgobHpvX3VpbnQpKChfRElOREVYKGR2LHApKSAmIERMX01BU0spIDw8IEREX0JJVFMpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChESU5ERVgxKSAmJiBkZWZpbmVkKERfSU5ERVgxKQorI2RlZmluZSBESU5ERVgxICAgICAgICAgICAgIERfSU5ERVgxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChESU5ERVgyKSAmJiBkZWZpbmVkKERfSU5ERVgyKQorI2RlZmluZSBESU5ERVgyICAgICAgICAgICAgIERfSU5ERVgyCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fTFpPX0hBU0hfSU5DUkVNRU5UQUwpCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgKCh2b2lkKSAwKQorIyAgZGVmaW5lIERWQUxfTkVYVChkdixwKSAgICgodm9pZCkgMCkKKyMgIGRlZmluZSBEVkFMX0xPT0tBSEVBRCAgICAwCisjZW5kaWYKKworI2lmICFkZWZpbmVkKERWQUxfQVNTRVJUKQorI2lmIGRlZmluZWQoX19MWk9fSEFTSF9JTkNSRU1FTlRBTCkgJiYgIWRlZmluZWQoTkRFQlVHKQorc3RhdGljIHZvaWQgRFZBTF9BU1NFUlQobHpvX3hpbnQgZHYsIGNvbnN0IGx6b19ieXRlcCBwKQoreworICAgIGx6b194aW50IGRmOworICAgIERWQUxfRklSU1QoZGYsKHApKTsKKyAgICBhc3NlcnQoRElOREVYKGR2LHApID09IERJTkRFWChkZixwKSk7Cit9CisjZWxzZQorIyAgZGVmaW5lIERWQUxfQVNTRVJUKGR2LHApICgodm9pZCkgMCkKKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19ESUNUX1VTRV9QVFIpCisjICBkZWZpbmUgREVOVFJZKHAsaW4pICAgICAgICAgICAgICAgICAgICAgICAgICAocCkKKyMgIGRlZmluZSBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pICAgIG1fcG9zID0gZGljdFtkaW5kZXhdCisjZWxzZQorIyAgZGVmaW5lIERFTlRSWShwLGluKSAgICAgICAgICAgICAgICAgICAgICAgICAgKChsem9fdWludCkgKChwKS0oaW4pKSkKKyMgIGRlZmluZSBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pICAgIG1fb2ZmID0gZGljdFtkaW5kZXhdCisjZW5kaWYKKworI2lmIChERF9CSVRTID09IDApCisKKyMgIGRlZmluZSBVUERBVEVfRChkaWN0LGRydW4sZHYscCxpbikgICAgICAgZGljdFsgRElOREVYKGR2LHApIF0gPSBERU5UUlkocCxpbikKKyMgIGRlZmluZSBVUERBVEVfSShkaWN0LGRydW4saW5kZXgscCxpbikgICAgZGljdFtpbmRleF0gPSBERU5UUlkocCxpbikKKyMgIGRlZmluZSBVUERBVEVfUChwdHIsZHJ1bixwLGluKSAgICAgICAgICAgKHB0cilbMF0gPSBERU5UUlkocCxpbikKKworI2Vsc2UKKworIyAgZGVmaW5lIFVQREFURV9EKGRpY3QsZHJ1bixkdixwLGluKSAgIFwKKyAgICAgICAgZGljdFsgRElOREVYKGR2LHApICsgZHJ1bisrIF0gPSBERU5UUlkocCxpbik7IGRydW4gJj0gRERfTUFTSworIyAgZGVmaW5lIFVQREFURV9JKGRpY3QsZHJ1bixpbmRleCxwLGluKSAgICBcCisgICAgICAgIGRpY3RbIChpbmRleCkgKyBkcnVuKysgXSA9IERFTlRSWShwLGluKTsgZHJ1biAmPSBERF9NQVNLCisjICBkZWZpbmUgVVBEQVRFX1AocHRyLGRydW4scCxpbikgICBcCisgICAgICAgIChwdHIpIFsgZHJ1bisrIF0gPSBERU5UUlkocCxpbik7IGRydW4gJj0gRERfTUFTSworCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX0RJQ1RfVVNFX1BUUikKKworI2RlZmluZSBMWk9fQ0hFQ0tfTVBPU19ERVQobV9wb3MsbV9vZmYsaW4saXAsbWF4X29mZnNldCkgXAorICAgICAgICAobV9wb3MgPT0gTlVMTCB8fCAobV9vZmYgPSBwZChpcCwgbV9wb3MpKSA+IG1heF9vZmZzZXQpCisKKyNkZWZpbmUgTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxtYXhfb2Zmc2V0KSBcCisgICAgKEJPVU5EU19DSEVDS0lOR19PRkZfSU5fRVhQUigoIFwKKyAgICAgICAgbV9wb3MgPSBpcCAtIChsem9fdWludCkgUFRSX0RJRkYoaXAsbV9wb3MpLCBcCisgICAgICAgIFBUUl9MVChtX3BvcyxpbikgfHwgXAorICAgICAgICAobV9vZmYgPSAobHpvX3VpbnQpIFBUUl9ESUZGKGlwLG1fcG9zKSkgPD0gMCB8fCBcCisgICAgICAgICBtX29mZiA+IG1heF9vZmZzZXQgKSkpCisKKyNlbHNlCisKKyNkZWZpbmUgTFpPX0NIRUNLX01QT1NfREVUKG1fcG9zLG1fb2ZmLGluLGlwLG1heF9vZmZzZXQpIFwKKyAgICAgICAgKG1fb2ZmID09IDAgfHwgXAorICAgICAgICAgKChtX29mZiA9IHBkKGlwLCBpbikgLSBtX29mZikgPiBtYXhfb2Zmc2V0KSB8fCBcCisgICAgICAgICAobV9wb3MgPSAoaXApIC0gKG1fb2ZmKSwgMCkgKQorCisjZGVmaW5lIExaT19DSEVDS19NUE9TX05PTl9ERVQobV9wb3MsbV9vZmYsaW4saXAsbWF4X29mZnNldCkgXAorICAgICAgICAocGQoaXAsIGluKSA8PSBtX29mZiB8fCBcCisgICAgICAgICAoKG1fb2ZmID0gcGQoaXAsIGluKSAtIG1fb2ZmKSA+IG1heF9vZmZzZXQpIHx8IFwKKyAgICAgICAgIChtX3BvcyA9IChpcCkgLSAobV9vZmYpLCAwKSApCisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fREVURVJNSU5JU1RJQykKKyMgIGRlZmluZSBMWk9fQ0hFQ0tfTVBPUyAgICBMWk9fQ0hFQ0tfTVBPU19ERVQKKyNlbHNlCisjICBkZWZpbmUgTFpPX0NIRUNLX01QT1MgICAgTFpPX0NIRUNLX01QT1NfTk9OX0RFVAorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKworI2VuZGlmCisKKyNkZWZpbmUgRE9fQ09NUFJFU1MgICAgIGx6bzF4XzFfY29tcHJlc3MKKworc3RhdGljIF9fbHpvX25vaW5saW5lIGx6b191aW50Citkb19jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisgICAgbHpvX2J5dGVwIG9wOworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW4gLSBNMl9NQVhfTEVOIC0gNTsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX2RpY3RfcCBjb25zdCBkaWN0ID0gKGx6b19kaWN0X3ApIHdya21lbTsKKworICAgIG9wID0gb3V0OworICAgIGlwID0gaW47CisgICAgaWkgPSBpcDsKKworICAgIGlwICs9IDQ7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyAgICAgICAgbHpvX3VpbnQgbV9vZmY7CisgICAgICAgIGx6b191aW50IG1fbGVuOworICAgICAgICBsem9fdWludCBkaW5kZXg7CisKKyAgICAgICAgRElOREVYMShkaW5kZXgsaXApOworICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNNF9NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyNpZiAxCisgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUIHx8IG1fcG9zWzNdID09IGlwWzNdKQorICAgICAgICAgICAgZ290byB0cnlfbWF0Y2g7CisgICAgICAgIERJTkRFWDIoZGluZGV4LGlwKTsKKyNlbmRpZgorICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNNF9NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQgfHwgbV9wb3NbM10gPT0gaXBbM10pCisgICAgICAgICAgICBnb3RvIHRyeV9tYXRjaDsKKyAgICAgICAgZ290byBsaXRlcmFsOworCit0cnlfbWF0Y2g6CisjaWYgMSAmJiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfMikKKyAgICAgICAgaWYgKCogKGNvbnN0IGx6b191c2hvcnRwKSBtX3BvcyAhPSAqIChjb25zdCBsem9fdXNob3J0cCkgaXApCisjZWxzZQorICAgICAgICBpZiAobV9wb3NbMF0gIT0gaXBbMF0gfHwgbV9wb3NbMV0gIT0gaXBbMV0pCisjZW5kaWYKKyAgICAgICAgeworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaWYgX19sem9fbGlrZWx5KG1fcG9zWzJdID09IGlwWzJdKQorICAgICAgICAgICAgeworI2lmIDAKKyAgICAgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgICBpZiAobGl0IDw9IDMpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICAgICAgaWYgKGxpdCA9PSAzKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG9wIC0gMiA+IG91dCk7IG9wWy0yXSB8PSBMWk9fQllURSgzKTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAqaWkrKzsgKm9wKysgPSAqaWkrKzsgKm9wKysgPSAqaWkrKzsKKyAgICAgICAgICAgICAgICAgICAgZ290byBjb2RlX21hdGNoOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobV9wb3NbM10gPT0gaXBbM10pCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiAwCisjaWYgMAorICAgICAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMV9NQVhfT0ZGU0VUICYmIGxpdCA+IDAgJiYgbGl0IDw9IDMpCisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMV9NQVhfT0ZGU0VUICYmIGxpdCA9PSAzKQorI2VuZGlmCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBsem9fdWludCB0OworCisgICAgICAgICAgICAgICAgICAgIHQgPSBsaXQ7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvcCAtIDIgPiBvdXQpOyBvcFstMl0gfD0gTFpPX0JZVEUodCk7CisgICAgICAgICAgICAgICAgICAgIGRvICpvcCsrID0gKmlpKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNMV9NQVJLRVIgfCAoKG1fb2ZmICYgMykgPDwgMikpOworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDIpOworICAgICAgICAgICAgICAgICAgICBpcCArPSAyOworICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworbGl0ZXJhbDoKKyAgICAgICAgVVBEQVRFX0koZGljdCwwLGRpbmRleCxpcCxpbik7CisgICAgICAgICsraXA7CisgICAgICAgIGlmIF9fbHpvX3VubGlrZWx5KGlwID49IGlwX2VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjb250aW51ZTsKKworbWF0Y2g6CisgICAgICAgIFVQREFURV9JKGRpY3QsMCxkaW5kZXgsaXAsaW4pOworICAgICAgICBpZiAocGQoaXAsaWkpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgcmVnaXN0ZXIgbHpvX3VpbnQgdCA9IHBkKGlwLGlpKTsKKworICAgICAgICAgICAgaWYgKHQgPD0gMykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQob3AgLSAyID4gb3V0KTsKKyAgICAgICAgICAgICAgICBvcFstMl0gfD0gTFpPX0JZVEUodCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0IDw9IDE4KQorICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUodCAtIDMpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGx6b191aW50IHR0ID0gdCAtIDE4OworCisgICAgICAgICAgICAgICAgKm9wKysgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICh0dCA+IDI1NSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR0IC09IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3NlcnQodHQgPiAwKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHR0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvICpvcCsrID0gKmlpKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGFzc2VydChpaSA9PSBpcCk7CisgICAgICAgIGlwICs9IDM7CisgICAgICAgIGlmIChtX3Bvc1szXSAhPSAqaXArKyB8fCBtX3Bvc1s0XSAhPSAqaXArKyB8fCBtX3Bvc1s1XSAhPSAqaXArKyB8fAorICAgICAgICAgICAgbV9wb3NbNl0gIT0gKmlwKysgfHwgbV9wb3NbN10gIT0gKmlwKysgfHwgbV9wb3NbOF0gIT0gKmlwKysKKyNpZmRlZiBMWk8xWQorICAgICAgICAgICAgfHwgbV9wb3NbIDldICE9ICppcCsrIHx8IG1fcG9zWzEwXSAhPSAqaXArKyB8fCBtX3Bvc1sxMV0gIT0gKmlwKysKKyAgICAgICAgICAgIHx8IG1fcG9zWzEyXSAhPSAqaXArKyB8fCBtX3Bvc1sxM10gIT0gKmlwKysgfHwgbV9wb3NbMTRdICE9ICppcCsrCisjZW5kaWYKKyAgICAgICAgICAgKQorICAgICAgICB7CisgICAgICAgICAgICAtLWlwOworICAgICAgICAgICAgbV9sZW4gPSBwZChpcCwgaWkpOworICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IDMpOyBhc3NlcnQobV9sZW4gPD0gTTJfTUFYX0xFTik7CisKKyAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb2ZmIC09IDE7CisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSAxKSA8PCA1KSB8ICgobV9vZmYgJiA3KSA8PCAyKSk7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiAzKTsKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgoKG1fbGVuICsgMSkgPDwgNCkgfCAoKG1fb2ZmICYgMykgPDwgMikpOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMik7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG1fb2ZmIDw9IE0zX01BWF9PRkZTRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0zX01BUktFUiB8IChtX2xlbiAtIDIpKTsKKyAgICAgICAgICAgICAgICBnb3RvIG0zX200X29mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb2ZmIC09IDB4NDAwMDsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9vZmYgPiAwKTsgYXNzZXJ0KG1fb2ZmIDw9IDB4N2ZmZik7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNNF9NQVJLRVIgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChtX29mZiAmIDB4NDAwMCkgPj4gMTEpIHwgKG1fbGVuIC0gMikpOworICAgICAgICAgICAgICAgIGdvdG8gbTNfbTRfb2Zmc2V0OworICAgICAgICAgICAgfQorI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICAgICAgICAgICAgICBnb3RvIG00X21hdGNoOworI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGVuZCA9IGluX2VuZDsKKyAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgbSA9IG1fcG9zICsgTTJfTUFYX0xFTiArIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlwIDwgZW5kICYmICptID09ICppcCkKKyAgICAgICAgICAgICAgICAgICAgbSsrLCBpcCsrOworICAgICAgICAgICAgICAgIG1fbGVuID0gcGQoaXAsIGlpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IE0yX01BWF9MRU4pOworCisgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTNfTUFYX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAxOworICAgICAgICAgICAgICAgIGlmIChtX2xlbiA8PSAzMykKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAyKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sZW4gLT0gMzM7CisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gTTNfTUFSS0VSIHwgMDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBtM19tNF9sZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQoTFpPMVkpCittNF9tYXRjaDoKKyNlbmRpZgorICAgICAgICAgICAgICAgIG1fb2ZmIC09IDB4NDAwMDsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9vZmYgPiAwKTsgYXNzZXJ0KG1fb2ZmIDw9IDB4N2ZmZik7CisgICAgICAgICAgICAgICAgaWYgKG1fbGVuIDw9IE00X01BWF9MRU4pCisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTRfTUFSS0VSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG1fb2ZmICYgMHg0MDAwKSA+PiAxMSkgfCAobV9sZW4gLSAyKSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sZW4gLT0gTTRfTUFYX0xFTjsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNNF9NQVJLRVIgfCAoKG1fb2ZmICYgMHg0MDAwKSA+PiAxMSkpOworbTNfbTRfbGVuOgorICAgICAgICAgICAgICAgICAgICB3aGlsZSAobV9sZW4gPiAyNTUpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVuIC09IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCittM19tNF9vZmZzZXQ6CisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKChtX29mZiAmIDYzKSA8PCAyKTsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gNik7CisgICAgICAgIH0KKworI2lmIDAKK21hdGNoX2RvbmU6CisjZW5kaWYKKyAgICAgICAgaWkgPSBpcDsKKyAgICAgICAgaWYgX19sem9fdW5saWtlbHkoaXAgPj0gaXBfZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gcGQoaW5fZW5kLGlpKTsKK30KKworTFpPX1BVQkxJQyhpbnQpCitET19DT01QUkVTUyAgICAgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBsem9fYnl0ZXAgb3AgPSBvdXQ7CisgICAgbHpvX3VpbnQgdDsKKworICAgIGlmIF9fbHpvX3VubGlrZWx5KGluX2xlbiA8PSBNMl9NQVhfTEVOICsgNSkKKyAgICAgICAgdCA9IGluX2xlbjsKKyAgICBlbHNlCisgICAgeworICAgICAgICB0ID0gZG9fY29tcHJlc3MoaW4saW5fbGVuLG9wLG91dF9sZW4sd3JrbWVtKTsKKyAgICAgICAgb3AgKz0gKm91dF9sZW47CisgICAgfQorCisgICAgaWYgKHQgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgbHpvX2J5dGVwIGlpID0gaW4gKyBpbl9sZW4gLSB0OworCisgICAgICAgIGlmIChvcCA9PSBvdXQgJiYgdCA8PSAyMzgpCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKDE3ICsgdCk7CisgICAgICAgIGVsc2UgaWYgKHQgPD0gMykKKyAgICAgICAgICAgIG9wWy0yXSB8PSBMWk9fQllURSh0KTsKKyAgICAgICAgZWxzZSBpZiAodCA8PSAxOCkKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUodCAtIDMpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGx6b191aW50IHR0ID0gdCAtIDE4OworCisgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICB3aGlsZSAodHQgPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHQgLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCh0dCA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSh0dCk7CisgICAgICAgIH0KKyAgICAgICAgZG8gKm9wKysgPSAqaWkrKzsgd2hpbGUgKC0tdCA+IDApOworICAgIH0KKworICAgICpvcCsrID0gTTRfTUFSS0VSIHwgMTsKKyAgICAqb3ArKyA9IDA7CisgICAgKm9wKysgPSAwOworCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfT0s7Cit9CisKKyNlbmRpZgorCisjdW5kZWYgZG9fY29tcHJlc3MKKyN1bmRlZiBET19DT01QUkVTUworI3VuZGVmIExaT19IQVNICisKKyN1bmRlZiBMWk9fVEVTVF9PVkVSUlVOCisjdW5kZWYgRE9fREVDT01QUkVTUworI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzF4X2RlY29tcHJlc3MKKworI2lmICFkZWZpbmVkKE1JTklMWk9fQ0ZHX1NLSVBfTFpPMVhfREVDT01QUkVTUykKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTikKKyMgIGlmICFkZWZpbmVkKExaT19URVNUX09WRVJSVU5fSU5QVVQpCisjICAgIGRlZmluZSBMWk9fVEVTVF9PVkVSUlVOX0lOUFVUICAgICAgIDIKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOX09VVFBVVCkKKyMgICAgZGVmaW5lIExaT19URVNUX09WRVJSVU5fT1VUUFVUICAgICAgMgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKKyMgICAgZGVmaW5lIExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORAorIyAgZW5kaWYKKyNlbmRpZgorCisjdW5kZWYgVEVTVF9JUAorI3VuZGVmIFRFU1RfT1AKKyN1bmRlZiBURVNUX0xCCisjdW5kZWYgVEVTVF9MQk8KKyN1bmRlZiBORUVEX0lQCisjdW5kZWYgTkVFRF9PUAorI3VuZGVmIEhBVkVfVEVTVF9JUAorI3VuZGVmIEhBVkVfVEVTVF9PUAorI3VuZGVmIEhBVkVfTkVFRF9JUAorI3VuZGVmIEhBVkVfTkVFRF9PUAorI3VuZGVmIEhBVkVfQU5ZX0lQCisjdW5kZWYgSEFWRV9BTllfT1AKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9JTlBVVCkKKyMgIGlmIChMWk9fVEVTVF9PVkVSUlVOX0lOUFVUID49IDEpCisjICAgIGRlZmluZSBURVNUX0lQICAgICAgICAgICAgIChpcCA8IGlwX2VuZCkKKyMgIGVuZGlmCisjICBpZiAoTFpPX1RFU1RfT1ZFUlJVTl9JTlBVVCA+PSAyKQorIyAgICBkZWZpbmUgTkVFRF9JUCh4KSBcCisgICAgICAgICAgICBpZiAoKGx6b191aW50KShpcF9lbmQgLSBpcCkgPCAobHpvX3VpbnQpKHgpKSAgZ290byBpbnB1dF9vdmVycnVuCisjICBlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fT1VUUFVUKQorIyAgaWYgKExaT19URVNUX09WRVJSVU5fT1VUUFVUID49IDEpCisjICAgIGRlZmluZSBURVNUX09QICAgICAgICAgICAgIChvcCA8PSBvcF9lbmQpCisjICBlbmRpZgorIyAgaWYgKExaT19URVNUX09WRVJSVU5fT1VUUFVUID49IDIpCisjICAgIHVuZGVmIFRFU1RfT1AKKyMgICAgZGVmaW5lIE5FRURfT1AoeCkgXAorICAgICAgICAgICAgaWYgKChsem9fdWludCkob3BfZW5kIC0gb3ApIDwgKGx6b191aW50KSh4KSkgIGdvdG8gb3V0cHV0X292ZXJydW4KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5EKQorIyAgZGVmaW5lIFRFU1RfTEIobV9wb3MpICAgICAgICBpZiAobV9wb3MgPCBvdXQgfHwgbV9wb3MgPj0gb3ApIGdvdG8gbG9va2JlaGluZF9vdmVycnVuCisjICBkZWZpbmUgVEVTVF9MQk8obV9wb3MsbykgICAgIGlmIChtX3BvcyA8IG91dCB8fCBtX3BvcyA+PSBvcCAtIChvKSkgZ290byBsb29rYmVoaW5kX292ZXJydW4KKyNlbHNlCisjICBkZWZpbmUgVEVTVF9MQihtX3BvcykgICAgICAgICgodm9pZCkgMCkKKyMgIGRlZmluZSBURVNUX0xCTyhtX3BvcyxvKSAgICAgKCh2b2lkKSAwKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChMWk9fRU9GX0NPREUpICYmICFkZWZpbmVkKFRFU1RfSVApCisjICBkZWZpbmUgVEVTVF9JUCAgICAgICAgICAgICAgIChpcCA8IGlwX2VuZCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChURVNUX0lQKQorIyAgZGVmaW5lIEhBVkVfVEVTVF9JUAorI2Vsc2UKKyMgIGRlZmluZSBURVNUX0lQICAgICAgICAgICAgICAgMQorI2VuZGlmCisjaWYgZGVmaW5lZChURVNUX09QKQorIyAgZGVmaW5lIEhBVkVfVEVTVF9PUAorI2Vsc2UKKyMgIGRlZmluZSBURVNUX09QICAgICAgICAgICAgICAgMQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKE5FRURfSVApCisjICBkZWZpbmUgSEFWRV9ORUVEX0lQCisjZWxzZQorIyAgZGVmaW5lIE5FRURfSVAoeCkgICAgICAgICAgICAoKHZvaWQpIDApCisjZW5kaWYKKyNpZiBkZWZpbmVkKE5FRURfT1ApCisjICBkZWZpbmUgSEFWRV9ORUVEX09QCisjZWxzZQorIyAgZGVmaW5lIE5FRURfT1AoeCkgICAgICAgICAgICAoKHZvaWQpIDApCisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9URVNUX0lQKSB8fCBkZWZpbmVkKEhBVkVfTkVFRF9JUCkKKyMgIGRlZmluZSBIQVZFX0FOWV9JUAorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1RFU1RfT1ApIHx8IGRlZmluZWQoSEFWRV9ORUVEX09QKQorIyAgZGVmaW5lIEhBVkVfQU5ZX09QCisjZW5kaWYKKworI3VuZGVmIF9fQ09QWTQKKyNkZWZpbmUgX19DT1BZNChkc3Qsc3JjKSAgICAqIChsem9fdWludDMycCkoZHN0KSA9ICogKGNvbnN0IGx6b191aW50MzJwKShzcmMpCisKKyN1bmRlZiBDT1BZNAorI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorIyAgZGVmaW5lIENPUFk0KGRzdCxzcmMpICAgIF9fQ09QWTQoZHN0LHNyYykKKyNlbGlmIGRlZmluZWQoTFpPX0FMSUdORURfT0tfNCkKKyMgIGRlZmluZSBDT1BZNChkc3Qsc3JjKSAgICBfX0NPUFk0KChsem9fdWludHB0cl90KShkc3QpLChsem9fdWludHB0cl90KShzcmMpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKERPX0RFQ09NUFJFU1MpCitMWk9fUFVCTElDKGludCkKK0RPX0RFQ09NUFJFU1MgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQorI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgbHpvX2J5dGVwIG9wOworICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBpcDsKKyAgICByZWdpc3RlciBsem9fdWludCB0OworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorICAgIGx6b191aW50IG1fb2ZmOworICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0X2VuZDsKKyNlbHNlCisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIG1fcG9zOworI2VuZGlmCisKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW47CisjaWYgZGVmaW5lZChIQVZFX0FOWV9PUCkKKyAgICBsem9fYnl0ZXAgY29uc3Qgb3BfZW5kID0gb3V0ICsgKm91dF9sZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgIGx6b191aW50IGxhc3RfbV9vZmYgPSAwOworI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKHdya21lbSk7CisKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyAgICBpZiAoZGljdCkKKyAgICB7CisgICAgICAgIGlmIChkaWN0X2xlbiA+IE00X01BWF9PRkZTRVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpY3QgKz0gZGljdF9sZW4gLSBNNF9NQVhfT0ZGU0VUOworICAgICAgICAgICAgZGljdF9sZW4gPSBNNF9NQVhfT0ZGU0VUOworICAgICAgICB9CisgICAgICAgIGRpY3RfZW5kID0gZGljdCArIGRpY3RfbGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkaWN0X2xlbiA9IDA7CisgICAgICAgIGRpY3RfZW5kID0gTlVMTDsKKyAgICB9CisjZW5kaWYKKworICAgICpvdXRfbGVuID0gMDsKKworICAgIG9wID0gb3V0OworICAgIGlwID0gaW47CisKKyAgICBpZiAoKmlwID4gMTcpCisgICAgeworICAgICAgICB0ID0gKmlwKysgLSAxNzsKKyAgICAgICAgaWYgKHQgPCA0KQorICAgICAgICAgICAgZ290byBtYXRjaF9uZXh0OworICAgICAgICBhc3NlcnQodCA+IDApOyBORUVEX09QKHQpOyBORUVEX0lQKHQrMSk7CisgICAgICAgIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgZ290byBmaXJzdF9saXRlcmFsX3J1bjsKKyAgICB9CisKKyAgICB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKQorICAgIHsKKyAgICAgICAgdCA9ICppcCsrOworICAgICAgICBpZiAodCA+PSAxNikKKyAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgIGlmICh0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICB3aGlsZSAoKmlwID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCArPSAyNTU7CisgICAgICAgICAgICAgICAgaXArKzsKKyAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdCArPSAxNSArICppcCsrOworICAgICAgICB9CisgICAgICAgIGFzc2VydCh0ID4gMCk7IE5FRURfT1AodCszKTsgTkVFRF9JUCh0KzQpOworI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KSB8fCBkZWZpbmVkKExaT19BTElHTkVEX09LXzQpCisjaWYgIWRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICBpZiAoUFRSX0FMSUdORUQyXzQob3AsaXApKQorICAgICAgICB7CisjZW5kaWYKKyAgICAgICAgQ09QWTQob3AsaXApOworICAgICAgICBvcCArPSA0OyBpcCArPSA0OworICAgICAgICBpZiAoLS10ID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHQgPj0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIENPUFk0KG9wLGlwKTsKKyAgICAgICAgICAgICAgICAgICAgb3AgKz0gNDsgaXAgKz0gNDsgdCAtPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHQgPj0gNCk7CisgICAgICAgICAgICAgICAgaWYgKHQgPiAwKSBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgZG8gKm9wKysgPSAqaXArKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICB9CisjaWYgIWRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICB9CisgICAgICAgIGVsc2UKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICB7CisgICAgICAgICAgICAqb3ArKyA9ICppcCsrOyAqb3ArKyA9ICppcCsrOyAqb3ArKyA9ICppcCsrOworICAgICAgICAgICAgZG8gKm9wKysgPSAqaXArKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICB9CisjZW5kaWYKKworZmlyc3RfbGl0ZXJhbF9ydW46CisKKyAgICAgICAgdCA9ICppcCsrOworICAgICAgICBpZiAodCA+PSAxNikKKyAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgbV9vZmYgPSAoMSArIE0yX01BWF9PRkZTRVQpICsgKHQgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgIGxhc3RfbV9vZmYgPSBtX29mZjsKKyNlbHNlCisgICAgICAgIG1fb2ZmID0gKDEgKyBNMl9NQVhfT0ZGU0VUKSArICh0ID4+IDIpICsgKCppcCsrIDw8IDIpOworI2VuZGlmCisgICAgICAgIE5FRURfT1AoMyk7CisgICAgICAgIHQgPSAzOyBDT1BZX0RJQ1QodCxtX29mZikKKyNlbHNlCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgdCA9ICgxICsgTTJfTUFYX09GRlNFVCkgKyAodCA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgbV9wb3MgPSBvcCAtIHQ7CisgICAgICAgIGxhc3RfbV9vZmYgPSB0OworI2Vsc2UKKyAgICAgICAgbV9wb3MgPSBvcCAtICgxICsgTTJfTUFYX09GRlNFVCk7CisgICAgICAgIG1fcG9zIC09IHQgPj4gMjsKKyAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMjsKKyNlbmRpZgorICAgICAgICBURVNUX0xCKG1fcG9zKTsgTkVFRF9PUCgzKTsKKyAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3M7CisjZW5kaWYKKyAgICAgICAgZ290byBtYXRjaF9kb25lOworCisgICAgICAgIGRvIHsKK21hdGNoOgorICAgICAgICAgICAgaWYgKHQgPj0gNjQpCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAoKHQgPj4gMikgJiA3KSArICgqaXArKyA8PCAzKTsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNSkgLSAxOworI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAoKHQgPj4gMikgJiAzKSArICgqaXArKyA8PCAyKTsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNCkgLSAzOworI2VsaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX29mZiA9IHQgJiAweDFmOworICAgICAgICAgICAgICAgIGlmIChtX29mZiA+PSAweDFjKQorICAgICAgICAgICAgICAgICAgICBtX29mZiA9IGxhc3RfbV9vZmY7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKG1fb2ZmIDw8IDYpICsgKCppcCsrID4+IDIpOworICAgICAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gbV9vZmY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSAodCA+PiA1KSAtIDE7CisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCA+PiAyKSAmIDc7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMzsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNSkgLSAxOworI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCA+PiAyKSAmIDM7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMjsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNCkgLSAzOworI2VsaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG9mZiA9IHQgJiAweDFmOworICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wOworICAgICAgICAgICAgICAgICAgICBpZiAob2ZmID49IDB4MWMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChsYXN0X21fb2ZmID4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSBsYXN0X21fb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb2ZmID0gMSArIChvZmYgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSBvZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSAodCA+PiA1KSAtIDE7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMtMSk7CisgICAgICAgICAgICAgICAgZ290byBjb3B5X21hdGNoOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0ID49IDMyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHQgJj0gMzE7CisgICAgICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBpcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0ICs9IDMxICsgKmlwKys7CisgICAgICAgICAgICAgICAgfQorI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKGlwWzBdIDw8IDYpICsgKGlwWzFdID4+IDIpOworICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBtX29mZjsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKGlwWzBdID4+IDIpICsgKGlwWzFdIDw8IDYpOworI2VuZGlmCisjZWxzZQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsem9fdWludCBvZmYgPSAxICsgKGlwWzBdIDw8IDYpICsgKGlwWzFdID4+IDIpOworICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gb2ZmOworICAgICAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gb2ZmOworICAgICAgICAgICAgICAgIH0KKyNlbGlmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKSAmJiBkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoKiAoY29uc3QgbHpvX3VzaG9ydHApIGlwKSA+PiAyOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoaXBbMF0gPj4gMikgKyAoaXBbMV0gPDwgNik7CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlwICs9IDI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmICh0ID49IDE2KQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorICAgICAgICAgICAgICAgIG1fb2ZmID0gKHQgJiA4KSA8PCAxMTsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcDsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCAmIDgpIDw8IDExOworI2VuZGlmCisgICAgICAgICAgICAgICAgdCAmPSA3OworICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKmlwID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdCArPSA3ICsgKmlwKys7CisgICAgICAgICAgICAgICAgfQorI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbV9vZmYgKz0gKGlwWzBdIDw8IDYpICsgKGlwWzFdID4+IDIpOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX29mZiArPSAoaXBbMF0gPj4gMikgKyAoaXBbMV0gPDwgNik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpcCArPSAyOworICAgICAgICAgICAgICAgIGlmIChtX29mZiA9PSAwKQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVvZl9mb3VuZDsKKyAgICAgICAgICAgICAgICBtX29mZiArPSAweDQwMDA7CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gbV9vZmY7CisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoaXBbMF0gPDwgNikgKyAoaXBbMV0gPj4gMik7CisjZWxpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfMikgJiYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKCogKGNvbnN0IGx6b191c2hvcnRwKSBpcCkgPj4gMjsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKGlwWzBdID4+IDIpICsgKGlwWzFdIDw8IDYpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaXAgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9wb3MgPT0gb3ApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW9mX2ZvdW5kOworICAgICAgICAgICAgICAgIG1fcG9zIC09IDB4NDAwMDsKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBwZCgoY29uc3QgbHpvX2J5dGVwKW9wLCBtX3Bvcyk7CisjZW5kaWYKKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKHQgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAodCA+PiAyKSArICgqaXArKyA8PCAyKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIE5FRURfT1AoMik7CisgICAgICAgICAgICAgICAgdCA9IDI7IENPUFlfRElDVCh0LG1fb2ZmKQorI2Vsc2UKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIHQgPSAxICsgKHQgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcCAtIHQ7CisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IHQ7CisjZWxzZQorICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgIG1fcG9zIC09IHQgPj4gMjsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAyOworI2VuZGlmCisgICAgICAgICAgICAgICAgVEVTVF9MQihtX3Bvcyk7IE5FRURfT1AoMik7CisgICAgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3M7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisgICAgICAgICAgICB9CisKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKworICAgICAgICAgICAgTkVFRF9PUCh0KzMtMSk7CisgICAgICAgICAgICB0ICs9IDMtMTsgQ09QWV9ESUNUKHQsbV9vZmYpCisKKyNlbHNlCisKKyAgICAgICAgICAgIFRFU1RfTEIobV9wb3MpOyBhc3NlcnQodCA+IDApOyBORUVEX09QKHQrMy0xKTsKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkgfHwgZGVmaW5lZChMWk9fQUxJR05FRF9PS180KQorI2lmICFkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkKKyAgICAgICAgICAgIGlmICh0ID49IDIgKiA0IC0gKDMgLSAxKSAmJiBQVFJfQUxJR05FRDJfNChvcCxtX3BvcykpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KChvcCAtIG1fcG9zKSA+PSA0KTsKKyNlbHNlCisgICAgICAgICAgICBpZiAodCA+PSAyICogNCAtICgzIC0gMSkgJiYgKG9wIC0gbV9wb3MpID49IDQpCisgICAgICAgICAgICB7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBDT1BZNChvcCxtX3Bvcyk7CisgICAgICAgICAgICAgICAgb3AgKz0gNDsgbV9wb3MgKz0gNDsgdCAtPSA0IC0gKDMgLSAxKTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIENPUFk0KG9wLG1fcG9zKTsKKyAgICAgICAgICAgICAgICAgICAgb3AgKz0gNDsgbV9wb3MgKz0gNDsgdCAtPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHQgPj0gNCk7CisgICAgICAgICAgICAgICAgaWYgKHQgPiAwKSBkbyAqb3ArKyA9ICptX3BvcysrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKK2NvcHlfbWF0Y2g6CisgICAgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3MrKzsKKyAgICAgICAgICAgICAgICBkbyAqb3ArKyA9ICptX3BvcysrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgICAgICB9CisKKyNlbmRpZgorCittYXRjaF9kb25lOgorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICB0ID0gaXBbLTFdICYgMzsKKyNlbHNlCisgICAgICAgICAgICB0ID0gaXBbLTJdICYgMzsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworbWF0Y2hfbmV4dDoKKyAgICAgICAgICAgIGFzc2VydCh0ID4gMCk7IGFzc2VydCh0IDwgNCk7IE5FRURfT1AodCk7IE5FRURfSVAodCsxKTsKKyNpZiAwCisgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisjZWxzZQorICAgICAgICAgICAgKm9wKysgPSAqaXArKzsKKyAgICAgICAgICAgIGlmICh0ID4gMSkgeyAqb3ArKyA9ICppcCsrOyBpZiAodCA+IDIpIHsgKm9wKysgPSAqaXArKzsgfSB9CisjZW5kaWYKKyAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgfSB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfVEVTVF9JUCkgfHwgZGVmaW5lZChIQVZFX1RFU1RfT1ApCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfRU9GX05PVF9GT1VORDsKKyNlbmRpZgorCitlb2ZfZm91bmQ6CisgICAgYXNzZXJ0KHQgPT0gMSk7CisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gKGlwID09IGlwX2VuZCA/IExaT19FX09LIDoKKyAgICAgICAgICAgKGlwIDwgaXBfZW5kICA/IExaT19FX0lOUFVUX05PVF9DT05TVU1FRCA6IExaT19FX0lOUFVUX09WRVJSVU4pKTsKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX0lQKQoraW5wdXRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9JTlBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTkVFRF9PUCkKK291dHB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09VVFBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKK2xvb2tiZWhpbmRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9MT09LQkVISU5EX09WRVJSVU47CisjZW5kaWYKK30KKworI2VuZGlmCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI3VuZGVmIERPX0RFQ09NUFJFU1MKKyNkZWZpbmUgRE9fREVDT01QUkVTUyAgICAgICBsem8xeF9kZWNvbXByZXNzX3NhZmUKKworI2lmICFkZWZpbmVkKE1JTklMWk9fQ0ZHX1NLSVBfTFpPMVhfREVDT01QUkVTU19TQUZFKQorCisjaWYgZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOKQorIyAgaWYgIWRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9JTlBVVCkKKyMgICAgZGVmaW5lIExaT19URVNUX09WRVJSVU5fSU5QVVQgICAgICAgMgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkKExaT19URVNUX09WRVJSVU5fT1VUUFVUKQorIyAgICBkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTl9PVVRQVVQgICAgICAyCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5EKQorIyAgICBkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5ECisjICBlbmRpZgorI2VuZGlmCisKKyN1bmRlZiBURVNUX0lQCisjdW5kZWYgVEVTVF9PUAorI3VuZGVmIFRFU1RfTEIKKyN1bmRlZiBURVNUX0xCTworI3VuZGVmIE5FRURfSVAKKyN1bmRlZiBORUVEX09QCisjdW5kZWYgSEFWRV9URVNUX0lQCisjdW5kZWYgSEFWRV9URVNUX09QCisjdW5kZWYgSEFWRV9ORUVEX0lQCisjdW5kZWYgSEFWRV9ORUVEX09QCisjdW5kZWYgSEFWRV9BTllfSVAKKyN1bmRlZiBIQVZFX0FOWV9PUAorCisjaWYgZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOX0lOUFVUKQorIyAgaWYgKExaT19URVNUX09WRVJSVU5fSU5QVVQgPj0gMSkKKyMgICAgZGVmaW5lIFRFU1RfSVAgICAgICAgICAgICAgKGlwIDwgaXBfZW5kKQorIyAgZW5kaWYKKyMgIGlmIChMWk9fVEVTVF9PVkVSUlVOX0lOUFVUID49IDIpCisjICAgIGRlZmluZSBORUVEX0lQKHgpIFwKKyAgICAgICAgICAgIGlmICgobHpvX3VpbnQpKGlwX2VuZCAtIGlwKSA8IChsem9fdWludCkoeCkpICBnb3RvIGlucHV0X292ZXJydW4KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9PVVRQVVQpCisjICBpZiAoTFpPX1RFU1RfT1ZFUlJVTl9PVVRQVVQgPj0gMSkKKyMgICAgZGVmaW5lIFRFU1RfT1AgICAgICAgICAgICAgKG9wIDw9IG9wX2VuZCkKKyMgIGVuZGlmCisjICBpZiAoTFpPX1RFU1RfT1ZFUlJVTl9PVVRQVVQgPj0gMikKKyMgICAgdW5kZWYgVEVTVF9PUAorIyAgICBkZWZpbmUgTkVFRF9PUCh4KSBcCisgICAgICAgICAgICBpZiAoKGx6b191aW50KShvcF9lbmQgLSBvcCkgPCAobHpvX3VpbnQpKHgpKSAgZ290byBvdXRwdXRfb3ZlcnJ1bgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOX0xPT0tCRUhJTkQpCisjICBkZWZpbmUgVEVTVF9MQihtX3BvcykgICAgICAgIGlmIChtX3BvcyA8IG91dCB8fCBtX3BvcyA+PSBvcCkgZ290byBsb29rYmVoaW5kX292ZXJydW4KKyMgIGRlZmluZSBURVNUX0xCTyhtX3BvcyxvKSAgICAgaWYgKG1fcG9zIDwgb3V0IHx8IG1fcG9zID49IG9wIC0gKG8pKSBnb3RvIGxvb2tiZWhpbmRfb3ZlcnJ1bgorI2Vsc2UKKyMgIGRlZmluZSBURVNUX0xCKG1fcG9zKSAgICAgICAgKCh2b2lkKSAwKQorIyAgZGVmaW5lIFRFU1RfTEJPKG1fcG9zLG8pICAgICAoKHZvaWQpIDApCisjZW5kaWYKKworI2lmICFkZWZpbmVkKExaT19FT0ZfQ09ERSkgJiYgIWRlZmluZWQoVEVTVF9JUCkKKyMgIGRlZmluZSBURVNUX0lQICAgICAgICAgICAgICAgKGlwIDwgaXBfZW5kKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKFRFU1RfSVApCisjICBkZWZpbmUgSEFWRV9URVNUX0lQCisjZWxzZQorIyAgZGVmaW5lIFRFU1RfSVAgICAgICAgICAgICAgICAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKFRFU1RfT1ApCisjICBkZWZpbmUgSEFWRV9URVNUX09QCisjZWxzZQorIyAgZGVmaW5lIFRFU1RfT1AgICAgICAgICAgICAgICAxCisjZW5kaWYKKworI2lmIGRlZmluZWQoTkVFRF9JUCkKKyMgIGRlZmluZSBIQVZFX05FRURfSVAKKyNlbHNlCisjICBkZWZpbmUgTkVFRF9JUCh4KSAgICAgICAgICAgICgodm9pZCkgMCkKKyNlbmRpZgorI2lmIGRlZmluZWQoTkVFRF9PUCkKKyMgIGRlZmluZSBIQVZFX05FRURfT1AKKyNlbHNlCisjICBkZWZpbmUgTkVFRF9PUCh4KSAgICAgICAgICAgICgodm9pZCkgMCkKKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1RFU1RfSVApIHx8IGRlZmluZWQoSEFWRV9ORUVEX0lQKQorIyAgZGVmaW5lIEhBVkVfQU5ZX0lQCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfVEVTVF9PUCkgfHwgZGVmaW5lZChIQVZFX05FRURfT1ApCisjICBkZWZpbmUgSEFWRV9BTllfT1AKKyNlbmRpZgorCisjdW5kZWYgX19DT1BZNAorI2RlZmluZSBfX0NPUFk0KGRzdCxzcmMpICAgICogKGx6b191aW50MzJwKShkc3QpID0gKiAoY29uc3QgbHpvX3VpbnQzMnApKHNyYykKKworI3VuZGVmIENPUFk0CisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisjICBkZWZpbmUgQ09QWTQoZHN0LHNyYykgICAgX19DT1BZNChkc3Qsc3JjKQorI2VsaWYgZGVmaW5lZChMWk9fQUxJR05FRF9PS180KQorIyAgZGVmaW5lIENPUFk0KGRzdCxzcmMpICAgIF9fQ09QWTQoKGx6b191aW50cHRyX3QpKGRzdCksKGx6b191aW50cHRyX3QpKHNyYykpCisjZW5kaWYKKworI2lmIGRlZmluZWQoRE9fREVDT01QUkVTUykKK0xaT19QVUJMSUMoaW50KQorRE9fREVDT01QUkVTUyAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCisjZW5kaWYKK3sKKyAgICByZWdpc3RlciBsem9fYnl0ZXAgb3A7CisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIHJlZ2lzdGVyIGx6b191aW50IHQ7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisgICAgbHpvX3VpbnQgbV9vZmY7CisgICAgY29uc3QgbHpvX2J5dGVwIGRpY3RfZW5kOworI2Vsc2UKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgbV9wb3M7CisjZW5kaWYKKworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpcF9lbmQgPSBpbiArIGluX2xlbjsKKyNpZiBkZWZpbmVkKEhBVkVfQU5ZX09QKQorICAgIGx6b19ieXRlcCBjb25zdCBvcF9lbmQgPSBvdXQgKyAqb3V0X2xlbjsKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPMVopCisgICAgbHpvX3VpbnQgbGFzdF9tX29mZiA9IDA7CisjZW5kaWYKKworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorICAgIGlmIChkaWN0KQorICAgIHsKKyAgICAgICAgaWYgKGRpY3RfbGVuID4gTTRfTUFYX09GRlNFVCkKKyAgICAgICAgeworICAgICAgICAgICAgZGljdCArPSBkaWN0X2xlbiAtIE00X01BWF9PRkZTRVQ7CisgICAgICAgICAgICBkaWN0X2xlbiA9IE00X01BWF9PRkZTRVQ7CisgICAgICAgIH0KKyAgICAgICAgZGljdF9lbmQgPSBkaWN0ICsgZGljdF9sZW47CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRpY3RfbGVuID0gMDsKKyAgICAgICAgZGljdF9lbmQgPSBOVUxMOworICAgIH0KKyNlbmRpZgorCisgICAgKm91dF9sZW4gPSAwOworCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKworICAgIGlmICgqaXAgPiAxNykKKyAgICB7CisgICAgICAgIHQgPSAqaXArKyAtIDE3OworICAgICAgICBpZiAodCA8IDQpCisgICAgICAgICAgICBnb3RvIG1hdGNoX25leHQ7CisgICAgICAgIGFzc2VydCh0ID4gMCk7IE5FRURfT1AodCk7IE5FRURfSVAodCsxKTsKKyAgICAgICAgZG8gKm9wKysgPSAqaXArKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICBnb3RvIGZpcnN0X2xpdGVyYWxfcnVuOworICAgIH0KKworICAgIHdoaWxlIChURVNUX0lQICYmIFRFU1RfT1ApCisgICAgeworICAgICAgICB0ID0gKmlwKys7CisgICAgICAgIGlmICh0ID49IDE2KQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ICs9IDI1NTsKKyAgICAgICAgICAgICAgICBpcCsrOworICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ICs9IDE1ICsgKmlwKys7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMpOyBORUVEX0lQKHQrNCk7CisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpIHx8IGRlZmluZWQoTFpPX0FMSUdORURfT0tfNCkKKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIGlmIChQVFJfQUxJR05FRDJfNChvcCxpcCkpCisgICAgICAgIHsKKyNlbmRpZgorICAgICAgICBDT1BZNChvcCxpcCk7CisgICAgICAgIG9wICs9IDQ7IGlwICs9IDQ7CisgICAgICAgIGlmICgtLXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgQ09QWTQob3AsaXApOworICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBpcCArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAodCA+PSA0KTsKKyAgICAgICAgICAgICAgICBpZiAodCA+IDApIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpvcCsrID0gKmlwKys7ICpvcCsrID0gKmlwKys7ICpvcCsrID0gKmlwKys7CisgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKyNlbmRpZgorCitmaXJzdF9saXRlcmFsX3J1bjoKKworICAgICAgICB0ID0gKmlwKys7CisgICAgICAgIGlmICh0ID49IDE2KQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICBtX29mZiA9ICgxICsgTTJfTUFYX09GRlNFVCkgKyAodCA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworI2Vsc2UKKyAgICAgICAgbV9vZmYgPSAoMSArIE0yX01BWF9PRkZTRVQpICsgKHQgPj4gMikgKyAoKmlwKysgPDwgMik7CisjZW5kaWYKKyAgICAgICAgTkVFRF9PUCgzKTsKKyAgICAgICAgdCA9IDM7IENPUFlfRElDVCh0LG1fb2ZmKQorI2Vsc2UKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICB0ID0gKDEgKyBNMl9NQVhfT0ZGU0VUKSArICh0IDw8IDYpICsgKCppcCsrID4+IDIpOworICAgICAgICBtX3BvcyA9IG9wIC0gdDsKKyAgICAgICAgbGFzdF9tX29mZiA9IHQ7CisjZWxzZQorICAgICAgICBtX3BvcyA9IG9wIC0gKDEgKyBNMl9NQVhfT0ZGU0VUKTsKKyAgICAgICAgbV9wb3MgLT0gdCA+PiAyOworICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAyOworI2VuZGlmCisgICAgICAgIFRFU1RfTEIobV9wb3MpOyBORUVEX09QKDMpOworICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvczsKKyNlbmRpZgorICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisKKyAgICAgICAgZG8geworbWF0Y2g6CisgICAgICAgICAgICBpZiAodCA+PSA2NCkKKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArICgodCA+PiAyKSAmIDcpICsgKCppcCsrIDw8IDMpOworICAgICAgICAgICAgICAgIHQgPSAodCA+PiA1KSAtIDE7CisjZWxpZiBkZWZpbmVkKExaTzFZKQorICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArICgodCA+PiAyKSAmIDMpICsgKCppcCsrIDw8IDIpOworICAgICAgICAgICAgICAgIHQgPSAodCA+PiA0KSAtIDM7CisjZWxpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIG1fb2ZmID0gdCAmIDB4MWY7CisgICAgICAgICAgICAgICAgaWYgKG1fb2ZmID49IDB4MWMpCisgICAgICAgICAgICAgICAgICAgIG1fb2ZmID0gbGFzdF9tX29mZjsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAobV9vZmYgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBtX29mZjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDUpIC0gMTsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICh0ID4+IDIpICYgNzsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAzOworICAgICAgICAgICAgICAgIHQgPSAodCA+PiA1KSAtIDE7CisjZWxpZiBkZWZpbmVkKExaTzFZKQorICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICh0ID4+IDIpICYgMzsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAyOworICAgICAgICAgICAgICAgIHQgPSAodCA+PiA0KSAtIDM7CisjZWxpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgb2ZmID0gdCAmIDB4MWY7CisgICAgICAgICAgICAgICAgICAgIG1fcG9zID0gb3A7CisgICAgICAgICAgICAgICAgICAgIGlmIChvZmYgPj0gMHgxYykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGxhc3RfbV9vZmYgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09IGxhc3RfbV9vZmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBvZmYgPSAxICsgKG9mZiA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09IG9mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBvZmY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDUpIC0gMTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIFRFU1RfTEIobV9wb3MpOyBhc3NlcnQodCA+IDApOyBORUVEX09QKHQrMy0xKTsKKyAgICAgICAgICAgICAgICBnb3RvIGNvcHlfbWF0Y2g7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHQgPj0gMzIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCAmPSAzMTsKKyAgICAgICAgICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCppcCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ICs9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHQgKz0gMzEgKyAqaXArKzsKKyAgICAgICAgICAgICAgICB9CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAoaXBbMF0gPDwgNikgKyAoaXBbMV0gPj4gMik7CisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAoaXBbMF0gPj4gMikgKyAoaXBbMV0gPDwgNik7CisjZW5kaWYKKyNlbHNlCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG9mZiA9IDEgKyAoaXBbMF0gPDwgNikgKyAoaXBbMV0gPj4gMik7CisgICAgICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSBvZmY7CisgICAgICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBvZmY7CisgICAgICAgICAgICAgICAgfQorI2VsaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzIpICYmIGRlZmluZWQoTFpPX0FCSV9MSVRUTEVfRU5ESUFOKQorICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICgqIChjb25zdCBsem9fdXNob3J0cCkgaXApID4+IDI7CisjZWxzZQorICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgIG1fcG9zIC09IChpcFswXSA+PiAyKSArIChpcFsxXSA8PCA2KTsKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICAgICAgaXAgKz0gMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHQgPj0gMTYpCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisgICAgICAgICAgICAgICAgbV9vZmYgPSAodCAmIDgpIDw8IDExOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICh0ICYgOCkgPDwgMTE7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB0ICY9IDc7CisgICAgICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICBpcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB0ICs9IDcgKyAqaXArKzsKKyAgICAgICAgICAgICAgICB9CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX29mZiArPSAoaXBbMF0gPDwgNikgKyAoaXBbMV0gPj4gMik7CisjZWxzZQorICAgICAgICAgICAgICAgIG1fb2ZmICs9IChpcFswXSA+PiAyKSArIChpcFsxXSA8PCA2KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGlwICs9IDI7CisgICAgICAgICAgICAgICAgaWYgKG1fb2ZmID09IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW9mX2ZvdW5kOworICAgICAgICAgICAgICAgIG1fb2ZmICs9IDB4NDAwMDsKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBtX29mZjsKKyNlbmRpZgorI2Vsc2UKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIG1fcG9zIC09IChpcFswXSA8PCA2KSArIChpcFsxXSA+PiAyKTsKKyNlbGlmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKSAmJiBkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoKiAoY29uc3QgbHpvX3VzaG9ydHApIGlwKSA+PiAyOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoaXBbMF0gPj4gMikgKyAoaXBbMV0gPDwgNik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBpcCArPSAyOworICAgICAgICAgICAgICAgIGlmIChtX3BvcyA9PSBvcCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlb2ZfZm91bmQ7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gMHg0MDAwOworI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IHBkKChjb25zdCBsem9fYnl0ZXApb3AsIG1fcG9zKTsKKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAodCA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gbV9vZmY7CisjZWxzZQorICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArICh0ID4+IDIpICsgKCppcCsrIDw8IDIpOworI2VuZGlmCisgICAgICAgICAgICAgICAgTkVFRF9PUCgyKTsKKyAgICAgICAgICAgICAgICB0ID0gMjsgQ09QWV9ESUNUKHQsbV9vZmYpCisjZWxzZQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgdCA9IDEgKyAodCA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gdDsKKyAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gdDsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcCAtIDE7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gdCA+PiAyOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICppcCsrIDw8IDI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgTkVFRF9PUCgyKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvczsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2hfZG9uZTsKKyAgICAgICAgICAgIH0KKworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorCisgICAgICAgICAgICBORUVEX09QKHQrMy0xKTsKKyAgICAgICAgICAgIHQgKz0gMy0xOyBDT1BZX0RJQ1QodCxtX29mZikKKworI2Vsc2UKKworICAgICAgICAgICAgVEVTVF9MQihtX3Bvcyk7IGFzc2VydCh0ID4gMCk7IE5FRURfT1AodCszLTEpOworI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KSB8fCBkZWZpbmVkKExaT19BTElHTkVEX09LXzQpCisjaWYgIWRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICAgICAgaWYgKHQgPj0gMiAqIDQgLSAoMyAtIDEpICYmIFBUUl9BTElHTkVEMl80KG9wLG1fcG9zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoKG9wIC0gbV9wb3MpID49IDQpOworI2Vsc2UKKyAgICAgICAgICAgIGlmICh0ID49IDIgKiA0IC0gKDMgLSAxKSAmJiAob3AgLSBtX3BvcykgPj0gNCkKKyAgICAgICAgICAgIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIENPUFk0KG9wLG1fcG9zKTsKKyAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQgLSAoMyAtIDEpOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgQ09QWTQob3AsbV9wb3MpOworICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAodCA+PSA0KTsKKyAgICAgICAgICAgICAgICBpZiAodCA+IDApIGRvICpvcCsrID0gKm1fcG9zKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworY29weV9tYXRjaDoKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgIGRvICpvcCsrID0gKm1fcG9zKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKworI2VuZGlmCisKK21hdGNoX2RvbmU6CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgIHQgPSBpcFstMV0gJiAzOworI2Vsc2UKKyAgICAgICAgICAgIHQgPSBpcFstMl0gJiAzOworI2VuZGlmCisgICAgICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworCittYXRjaF9uZXh0OgorICAgICAgICAgICAgYXNzZXJ0KHQgPiAwKTsgYXNzZXJ0KHQgPCA0KTsgTkVFRF9PUCh0KTsgTkVFRF9JUCh0KzEpOworI2lmIDAKKyAgICAgICAgICAgIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKyNlbHNlCisgICAgICAgICAgICAqb3ArKyA9ICppcCsrOworICAgICAgICAgICAgaWYgKHQgPiAxKSB7ICpvcCsrID0gKmlwKys7IGlmICh0ID4gMikgeyAqb3ArKyA9ICppcCsrOyB9IH0KKyNlbmRpZgorICAgICAgICAgICAgdCA9ICppcCsrOworICAgICAgICB9IHdoaWxlIChURVNUX0lQICYmIFRFU1RfT1ApOworICAgIH0KKworI2lmIGRlZmluZWQoSEFWRV9URVNUX0lQKSB8fCBkZWZpbmVkKEhBVkVfVEVTVF9PUCkKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9FT0ZfTk9UX0ZPVU5EOworI2VuZGlmCisKK2VvZl9mb3VuZDoKKyAgICBhc3NlcnQodCA9PSAxKTsKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiAoaXAgPT0gaXBfZW5kID8gTFpPX0VfT0sgOgorICAgICAgICAgICAoaXAgPCBpcF9lbmQgID8gTFpPX0VfSU5QVVRfTk9UX0NPTlNVTUVEIDogTFpPX0VfSU5QVVRfT1ZFUlJVTikpOworCisjaWYgZGVmaW5lZChIQVZFX05FRURfSVApCitpbnB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX0lOUFVUX09WRVJSVU47CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX09QKQorb3V0cHV0X292ZXJydW46CisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfT1VUUFVUX09WRVJSVU47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5EKQorbG9va2JlaGluZF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX0xPT0tCRUhJTkRfT1ZFUlJVTjsKKyNlbmRpZgorfQorCisjZW5kaWYKKworLyoqKioqIEVuZCBvZiBtaW5pbHpvLmMgKioqKiovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL21pbmlsem8vbWluaWx6by5oIGIvbHpvLTIuMDMvbWluaWx6by9taW5pbHpvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFmZjUwZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL21pbmlsem8vbWluaWx6by5oCkBAIC0wLDAgKzEsMTA2IEBACisvKiBtaW5pbHpvLmggLS0gbWluaSBzdWJzZXQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisvKgorICogTk9URToKKyAqICAgdGhlIGZ1bGwgTFpPIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGF0CisgKiAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZm5kZWYgX19NSU5JTFpPX0gKKyNkZWZpbmUgX19NSU5JTFpPX0gKKworI2RlZmluZSBNSU5JTFpPX1ZFUlNJT04gICAgICAgICAweDIwMzAKKworI2lmZGVmIF9fTFpPQ09ORl9ICisjICBlcnJvciAieW91IGNhbm5vdCB1c2UgYm90aCBMWk8gYW5kIG1pbmlMWk8iCisjZW5kaWYKKworI3VuZGVmIExaT19IQVZFX0NPTkZJR19ICisjaW5jbHVkZSAibHpvY29uZi5oIgorCisjaWYgIWRlZmluZWQoTFpPX1ZFUlNJT04pIHx8IChMWk9fVkVSU0lPTiAhPSBNSU5JTFpPX1ZFUlNJT04pCisjICBlcnJvciAidmVyc2lvbiBtaXNtYXRjaCBpbiBoZWFkZXIgZmlsZXMiCisjZW5kaWYKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNZW1vcnkgcmVxdWlyZWQgZm9yIHRoZSB3cmttZW0gcGFyYW1ldGVyLgorICogV2hlbiB0aGUgcmVxdWlyZWQgc2l6ZSBpcyAwLCB5b3UgY2FuIGFsc28gcGFzcyBhIE5VTEwgcG9pbnRlci4KKyAqLworCisjZGVmaW5lIExaTzFYX01FTV9DT01QUkVTUyAgICAgIExaTzFYXzFfTUVNX0NPTVBSRVNTCisjZGVmaW5lIExaTzFYXzFfTUVNX0NPTVBSRVNTICAgICgobHpvX3VpbnQzMikgKDE2Mzg0TCAqIGx6b19zaXplb2ZfZGljdF90KSkKKyNkZWZpbmUgTFpPMVhfTUVNX0RFQ09NUFJFU1MgICAgKDApCisKKworLyogY29tcHJlc3Npb24gKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMXhfMV9jb21wcmVzcyAgICAgICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKTsKKworLyogZGVjb21wcmVzc2lvbiAqLworTFpPX0VYVEVSTihpbnQpCitsem8xeF9kZWNvbXByZXNzICAgICAgICAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSAvKiBOT1QgVVNFRCAqLyApOworCisvKiBzYWZlIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcgKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMXhfZGVjb21wcmVzc19zYWZlICAgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8gKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL21pbmlsem8vdGVzdG1pbmkuYyBiL2x6by0yLjAzL21pbmlsem8vdGVzdG1pbmkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjJlZGFmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvbWluaWx6by90ZXN0bWluaS5jCkBAIC0wLDAgKzEsMTY4IEBACisvKiB0ZXN0bWluaS5jIC0tIHZlcnkgc2ltcGxlIHRlc3QgcHJvZ3JhbSBmb3IgdGhlIG1pbmlMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGhpcyBwcm9ncmFtIHNob3dzIHRoZSBiYXNpYyB1c2FnZSBvZiB0aGUgTFpPIGxpYnJhcnkuCisvLyBXZSB3aWxsIGNvbXByZXNzIGEgYmxvY2sgb2YgZGF0YSBhbmQgZGVjb21wcmVzcyBhZ2Fpbi4KKy8vCisvLyBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgZG9jdW1lbnRhdGlvbiwgZXhhbXBsZSBwcm9ncmFtcyBhbmQgb3RoZXIgc3VwcG9ydAorLy8gZmlsZXMgKGxpa2UgTWFrZWZpbGVzIGFuZCBidWlsZCBzY3JpcHRzKSBwbGVhc2UgZG93bmxvYWQgdGhlIGZ1bGwgTFpPCisvLyBwYWNrYWdlIGZyb20KKy8vICAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBGaXJzdCBsZXQncyBpbmNsdWRlICJtaW5pem8uaCIuICovCisKKyNpbmNsdWRlICJtaW5pbHpvLmgiCisKKworLyogV2Ugd2FudCB0byBjb21wcmVzcyB0aGUgZGF0YSBibG9jayBhdCBgaW4nIHdpdGggbGVuZ3RoIGBJTl9MRU4nIHRvCisgKiB0aGUgYmxvY2sgYXQgYG91dCcuIEJlY2F1c2UgdGhlIGlucHV0IGJsb2NrIG1heSBiZSBpbmNvbXByZXNzaWJsZSwKKyAqIHdlIG11c3QgcHJvdmlkZSBhIGxpdHRsZSBtb3JlIG91dHB1dCBzcGFjZSBpbiBjYXNlIHRoYXQgY29tcHJlc3Npb24KKyAqIGlzIG5vdCBwb3NzaWJsZS4KKyAqLworCisjaWYgZGVmaW5lZChfX0xaT19TVFJJQ1RfMTZCSVQpCisjZGVmaW5lIElOX0xFTiAgICAgICg4KjEwMjR1KQorI2VsaWYgZGVmaW5lZChMWk9fQVJDSF9JMDg2KSAmJiAhZGVmaW5lZChMWk9fSEFWRV9NTV9IVUdFX0FSUkFZKQorI2RlZmluZSBJTl9MRU4gICAgICAoNjAqMTAyNHUpCisjZWxzZQorI2RlZmluZSBJTl9MRU4gICAgICAoMTI4KjEwMjR1bCkKKyNlbmRpZgorI2RlZmluZSBPVVRfTEVOICAgICAoSU5fTEVOICsgSU5fTEVOIC8gMTYgKyA2NCArIDMpCisKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fTFpPX01NT0RFTCBpbiAgWyBJTl9MRU4gXTsKK3N0YXRpYyB1bnNpZ25lZCBjaGFyIF9fTFpPX01NT0RFTCBvdXQgWyBPVVRfTEVOIF07CisKKworLyogV29yay1tZW1vcnkgbmVlZGVkIGZvciBjb21wcmVzc2lvbi4gQWxsb2NhdGUgbWVtb3J5IGluIHVuaXRzCisgKiBvZiBgbHpvX2FsaWduX3QnIChpbnN0ZWFkIG9mIGBjaGFyJykgdG8gbWFrZSBzdXJlIGl0IGlzIHByb3Blcmx5IGFsaWduZWQuCisgKi8KKworI2RlZmluZSBIRUFQX0FMTE9DKHZhcixzaXplKSBcCisgICAgbHpvX2FsaWduX3QgX19MWk9fTU1PREVMIHZhciBbICgoc2l6ZSkgKyAoc2l6ZW9mKGx6b19hbGlnbl90KSAtIDEpKSAvIHNpemVvZihsem9fYWxpZ25fdCkgXQorCitzdGF0aWMgSEVBUF9BTExPQyh3cmttZW0sTFpPMVhfMV9NRU1fQ09NUFJFU1MpOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IHI7CisgICAgbHpvX3VpbnQgaW5fbGVuOworICAgIGx6b191aW50IG91dF9sZW47CisgICAgbHpvX3VpbnQgbmV3X2xlbjsKKworICAgIGlmIChhcmdjIDwgMCAmJiBhcmd2ID09IE5VTEwpICAgLyogYXZvaWQgd2FybmluZyBhYm91dCB1bnVzZWQgYXJncyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIHByaW50ZigiXG5MWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeSAodiVzLCAlcykuXG4iLAorICAgICAgICAgICBsem9fdmVyc2lvbl9zdHJpbmcoKSwgbHpvX3ZlcnNpb25fZGF0ZSgpKTsKKyAgICBwcmludGYoIkNvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXJcbkFsbCBSaWdodHMgUmVzZXJ2ZWQuXG5cbiIpOworCisKKy8qCisgKiBTdGVwIDE6IGluaXRpYWxpemUgdGhlIExaTyBsaWJyYXJ5CisgKi8KKyAgICBpZiAobHpvX2luaXQoKSAhPSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBsem9faW5pdCgpIGZhaWxlZCAhISFcbiIpOworICAgICAgICBwcmludGYoIih0aGlzIHVzdWFsbHkgaW5kaWNhdGVzIGEgY29tcGlsZXIgYnVnIC0gdHJ5IHJlY29tcGlsaW5nXG53aXRob3V0IG9wdGltaXphdGlvbnMsIGFuZCBlbmFibGUgYC1ETFpPX0RFQlVHJyBmb3IgZGlhZ25vc3RpY3MpXG4iKTsKKyAgICAgICAgcmV0dXJuIDM7CisgICAgfQorCisvKgorICogU3RlcCAyOiBwcmVwYXJlIHRoZSBpbnB1dCBibG9jayB0aGF0IHdpbGwgZ2V0IGNvbXByZXNzZWQuCisgKiAgICAgICAgIFdlIGp1c3QgZmlsbCBpdCB3aXRoIHplcm9zIGluIHRoaXMgZXhhbXBsZSBwcm9ncmFtLAorICogICAgICAgICBidXQgeW91IHdvdWxkIHVzZSB5b3VyIHJlYWwtd29ybGQgZGF0YSBoZXJlLgorICovCisgICAgaW5fbGVuID0gSU5fTEVOOworICAgIGx6b19tZW1zZXQoaW4sMCxpbl9sZW4pOworCisvKgorICogU3RlcCAzOiBjb21wcmVzcyBmcm9tIGBpbicgdG8gYG91dCcgd2l0aCBMWk8xWC0xCisgKi8KKyAgICByID0gbHpvMXhfMV9jb21wcmVzcyhpbixpbl9sZW4sb3V0LCZvdXRfbGVuLHdya21lbSk7CisgICAgaWYgKHIgPT0gTFpPX0VfT0spCisgICAgICAgIHByaW50ZigiY29tcHJlc3NlZCAlbHUgYnl0ZXMgaW50byAlbHUgYnl0ZXNcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgaW5fbGVuLCAodW5zaWduZWQgbG9uZykgb3V0X2xlbik7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBjb21wcmVzc2lvbiBmYWlsZWQ6ICVkXG4iLCByKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorICAgIC8qIGNoZWNrIGZvciBhbiBpbmNvbXByZXNzaWJsZSBibG9jayAqLworICAgIGlmIChvdXRfbGVuID49IGluX2xlbikKKyAgICB7CisgICAgICAgIHByaW50ZigiVGhpcyBibG9jayBjb250YWlucyBpbmNvbXByZXNzaWJsZSBkYXRhLlxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworLyoKKyAqIFN0ZXAgNDogZGVjb21wcmVzcyBhZ2Fpbiwgbm93IGdvaW5nIGZyb20gYG91dCcgdG8gYGluJworICovCisgICAgbmV3X2xlbiA9IGluX2xlbjsKKyAgICByID0gbHpvMXhfZGVjb21wcmVzcyhvdXQsb3V0X2xlbixpbiwmbmV3X2xlbixOVUxMKTsKKyAgICBpZiAociA9PSBMWk9fRV9PSyAmJiBuZXdfbGVuID09IGluX2xlbikKKyAgICAgICAgcHJpbnRmKCJkZWNvbXByZXNzZWQgJWx1IGJ5dGVzIGJhY2sgaW50byAlbHUgYnl0ZXNcbiIsCisgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgb3V0X2xlbiwgKHVuc2lnbmVkIGxvbmcpIGluX2xlbik7CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgLyogdGhpcyBzaG91bGQgTkVWRVIgaGFwcGVuICovCisgICAgICAgIHByaW50ZigiaW50ZXJuYWwgZXJyb3IgLSBkZWNvbXByZXNzaW9uIGZhaWxlZDogJWRcbiIsIHIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBwcmludGYoIlxubWluaUxaTyBzaW1wbGUgY29tcHJlc3Npb24gdGVzdCBwYXNzZWQuXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9NYWtlZmlsZS5hbSBiL2x6by0yLjAzL3NyYy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNWY2Y2EwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEsNjggQEAKKyMjIFByb2Nlc3MgdGhpcyBmaWxlIHdpdGggYXV0b21ha2UgdG8gY3JlYXRlIE1ha2VmaWxlLmluCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisjCisKK1ZQQVRIID0gQHNyY2RpckBATFpPX0FTTV9WUEFUSEAKK1NVRkZJWEVTID0gLlMKKworSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKK0NQUEZMQUdTID0gJChMWk9fQ1BQRkxBR1MpICQoY29uZmlndXJlX0NQUEZMQUdTKSAkKExaT19FWFRSQV9DUFBGTEFHUykKK0NGTEFHUyA9ICQoTFpPX0NGTEFHUykgJChjb25maWd1cmVfQ0ZMQUdTKSAkKExaT19FWFRSQV9DRkxBR1MpCisKK2xpYl9MVExJQlJBUklFUyA9IGxpYmx6bzIubGEKKworbGlibHpvMl9sYV9MREZMQUdTID0gLXZlcnNpb24taW5mbyAyOjA6MAorCitsaWJsem8yX2xhX1NPVVJDRVMgPSBcCisgICAgbHpvX2NyYy5jIGx6b19pbml0LmMgbHpvX3B0ci5jIGx6b19zdHIuYyBsem9fdXRpbC5jIFwKKyAgICBsem8xLmMgbHpvMV85OS5jIFwKKyAgICBsem8xYS5jIGx6bzFhXzk5LmMgXAorICAgIGx6bzFiXzEuYyBsem8xYl8yLmMgbHpvMWJfMy5jIGx6bzFiXzQuYyBsem8xYl81LmMgbHpvMWJfNi5jIFwKKyAgICBsem8xYl83LmMgbHpvMWJfOC5jIGx6bzFiXzkuYyBsem8xYl85OS5jIGx6bzFiXzl4LmMgXAorICAgIGx6bzFiX2NjLmMgbHpvMWJfZDEuYyBsem8xYl9kMi5jIGx6bzFiX3JyLmMgbHpvMWJfeHguYyBcCisgICAgbHpvMWNfMS5jIGx6bzFjXzIuYyBsem8xY18zLmMgbHpvMWNfNC5jIGx6bzFjXzUuYyBsem8xY182LmMgXAorICAgIGx6bzFjXzcuYyBsem8xY184LmMgbHpvMWNfOS5jIGx6bzFjXzk5LmMgbHpvMWNfOXguYyBcCisgICAgbHpvMWNfY2MuYyBsem8xY19kMS5jIGx6bzFjX2QyLmMgbHpvMWNfcnIuYyBsem8xY194eC5jIFwKKyAgICBsem8xZl8xLmMgbHpvMWZfOXguYyBsem8xZl9kMS5jIGx6bzFmX2QyLmMgXAorICAgIGx6bzF4XzEuYyBsem8xeF85eC5jIGx6bzF4X2QxLmMgbHpvMXhfZDIuYyBsem8xeF9kMy5jIFwKKyAgICBsem8xeF9vLmMgbHpvMXhfMWsuYyBsem8xeF8xbC5jIGx6bzF4XzFvLmMgXAorICAgIGx6bzF5XzEuYyBsem8xeV85eC5jIGx6bzF5X2QxLmMgbHpvMXlfZDIuYyBsem8xeV9kMy5jIGx6bzF5X28uYyBcCisgICAgbHpvMXpfOXguYyBsem8xel9kMS5jIGx6bzF6X2QyLmMgbHpvMXpfZDMuYyBcCisgICAgbHpvMmFfOXguYyBsem8yYV9kMS5jIGx6bzJhX2QyLmMKKworRVhUUkFfRElTVCA9IFwKKyAgICBsem8xX2NtLmNoIGx6bzFfZC5jaCBsem8xYV9jbS5jaCBsem8xYV9jci5jaCBsem8xYl9jLmNoIFwKKyAgICBsem8xYl9jbS5jaCBsem8xYl9jci5jaCBsem8xYl9kLmNoIGx6bzFiX3IuY2ggXAorICAgIGx6bzFiX3NtLmNoIGx6bzFiX3RtLmNoIGx6bzFmX2QuY2ggbHpvMXhfYy5jaCBcCisgICAgbHpvMXhfZC5jaCBsem8xeF9vby5jaCBsem8yYV9kLmNoIFwKKyAgICBsem9fZGxsLmNoIGx6b19tY2h3LmNoIGx6b19zd2QuY2ggXAorICAgIGNvbXByMWIuaCBjb21wcjFjLmggY29uZmlnMS5oIGNvbmZpZzFhLmggY29uZmlnMWIuaCBjb25maWcxYy5oIFwKKyAgICBjb25maWcxZi5oIGNvbmZpZzF4LmggY29uZmlnMXkuaCBjb25maWcxei5oIGNvbmZpZzJhLmggXAorICAgIGx6bzFhX2RlLmggbHpvMWJfY2MuaCBsem8xYl9kZS5oIGx6bzFjX2NjLmggbHpvX2NvbmYuaCBsem9fZGljdC5oIFwKKyAgICBsem9fcHRyLmggc3RhdHMxYS5oIHN0YXRzMWIuaCBzdGF0czFjLmggbWluaWFjYy5oCisKK2xpYmx6bzJfbGFfTElCQUREID0gJChMWk9fQVNNX09CSkVDVFMpCitsaWJsem8yX2xhX0RFUEVOREVOQ0lFUyA9ICQobGlibHpvMl9sYV9MSUJBREQpCisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gYXNzZW1ibGVyIHN1cHBvcnQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpZiBMWk9fVVNFX0FTTQorCitMWk9fQVNNX09CSkVDVFMgPSBcCisJbHpvMWNfczEubG8gbHpvMWNfczIubG8gXAorCWx6bzFmX2YxLmxvIGx6bzFmX2YyLmxvIFwKKwlsem8xeF9mMS5sbyBsem8xeF9mMi5sbyBsem8xeF9zMS5sbyBsem8xeF9zMi5sbyBcCisJbHpvMXlfZjEubG8gbHpvMXlfZjIubG8gbHpvMXlfczEubG8gbHpvMXlfczIubG8KKworLlMubzoKKwkkKENDKSAtYyAkPAorCisuUy5sbzoKKwkkKExJQlRPT0wpIC0tbW9kZT1jb21waWxlICQoQ0MpIC1jICQ8CisKK2VuZGlmCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9NYWtlZmlsZS5pbiBiL2x6by0yLjAzL3NyYy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGNmNGUyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL01ha2VmaWxlLmluCkBAIC0wLDAgKzEsNjAwIEBACisjIE1ha2VmaWxlLmluIGdlbmVyYXRlZCBieSBhdXRvbWFrZSAxLjkuNiBmcm9tIE1ha2VmaWxlLmFtLgorIyBAY29uZmlndXJlX2lucHV0QAorCisjIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwKKyMgMjAwMywgMjAwNCwgMjAwNSAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjIFRoaXMgTWFrZWZpbGUuaW4gaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgorIyBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LAorIyB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisjIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3OyB3aXRob3V0CisjIGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEKKyMgUEFSVElDVUxBUiBQVVJQT1NFLgorCitAU0VUX01BS0VACisKKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworc3JjZGlyID0gQHNyY2RpckAKK3RvcF9zcmNkaXIgPSBAdG9wX3NyY2RpckAKK3BrZ2RhdGFkaXIgPSAkKGRhdGFkaXIpL0BQQUNLQUdFQAorcGtnbGliZGlyID0gJChsaWJkaXIpL0BQQUNLQUdFQAorcGtnaW5jbHVkZWRpciA9ICQoaW5jbHVkZWRpcikvQFBBQ0tBR0VACit0b3BfYnVpbGRkaXIgPSAuLgorYW1fX2NkID0gQ0RQQVRIPSIkJHtaU0hfVkVSU0lPTisufSQoUEFUSF9TRVBBUkFUT1IpIiAmJiBjZAorSU5TVEFMTCA9IEBJTlNUQUxMQAoraW5zdGFsbF9zaF9EQVRBID0gJChpbnN0YWxsX3NoKSAtYyAtbSA2NDQKK2luc3RhbGxfc2hfUFJPR1JBTSA9ICQoaW5zdGFsbF9zaCkgLWMKK2luc3RhbGxfc2hfU0NSSVBUID0gJChpbnN0YWxsX3NoKSAtYworSU5TVEFMTF9IRUFERVIgPSAkKElOU1RBTExfREFUQSkKK3RyYW5zZm9ybSA9ICQocHJvZ3JhbV90cmFuc2Zvcm1fbmFtZSkKK05PUk1BTF9JTlNUQUxMID0gOgorUFJFX0lOU1RBTEwgPSA6CitQT1NUX0lOU1RBTEwgPSA6CitOT1JNQUxfVU5JTlNUQUxMID0gOgorUFJFX1VOSU5TVEFMTCA9IDoKK1BPU1RfVU5JTlNUQUxMID0gOgorYnVpbGRfdHJpcGxldCA9IEBidWlsZEAKK2hvc3RfdHJpcGxldCA9IEBob3N0QAordGFyZ2V0X3RyaXBsZXQgPSBAdGFyZ2V0QAorc3ViZGlyID0gc3JjCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorYW1fX3ZwYXRoX2Fkal9zZXR1cCA9IHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7CithbV9fdnBhdGhfYWRqID0gY2FzZSAkJHAgaW4gXAorICAgICQoc3JjZGlyKS8qKSBmPWBlY2hvICIkJHAiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisgICAgKikgZj0kJHA7OyBcCisgIGVzYWM7CithbV9fc3RyaXBfZGlyID0gYGVjaG8gJCRwIHwgc2VkIC1lICdzfF4uKi98fCdgOworYW1fX2luc3RhbGxkaXJzID0gIiQoREVTVERJUikkKGxpYmRpcikiCitsaWJMVExJQlJBUklFU19JTlNUQUxMID0gJChJTlNUQUxMKQorTFRMSUJSQVJJRVMgPSAkKGxpYl9MVExJQlJBUklFUykKK0BMWk9fVVNFX0FTTV9UUlVFQGFtX19ERVBFTkRFTkNJRVNfMSA9IGx6bzFjX3MxLmxvIGx6bzFjX3MyLmxvIFwKK0BMWk9fVVNFX0FTTV9UUlVFQAlsem8xZl9mMS5sbyBsem8xZl9mMi5sbyBsem8xeF9mMS5sbyBcCitATFpPX1VTRV9BU01fVFJVRUAJbHpvMXhfZjIubG8gbHpvMXhfczEubG8gbHpvMXhfczIubG8gXAorQExaT19VU0VfQVNNX1RSVUVACWx6bzF5X2YxLmxvIGx6bzF5X2YyLmxvIGx6bzF5X3MxLmxvIFwKK0BMWk9fVVNFX0FTTV9UUlVFQAlsem8xeV9zMi5sbworYW1fbGlibHpvMl9sYV9PQkpFQ1RTID0gbHpvX2NyYy5sbyBsem9faW5pdC5sbyBsem9fcHRyLmxvIGx6b19zdHIubG8gXAorCWx6b191dGlsLmxvIGx6bzEubG8gbHpvMV85OS5sbyBsem8xYS5sbyBsem8xYV85OS5sbyBsem8xYl8xLmxvIFwKKwlsem8xYl8yLmxvIGx6bzFiXzMubG8gbHpvMWJfNC5sbyBsem8xYl81LmxvIGx6bzFiXzYubG8gXAorCWx6bzFiXzcubG8gbHpvMWJfOC5sbyBsem8xYl85LmxvIGx6bzFiXzk5LmxvIGx6bzFiXzl4LmxvIFwKKwlsem8xYl9jYy5sbyBsem8xYl9kMS5sbyBsem8xYl9kMi5sbyBsem8xYl9yci5sbyBsem8xYl94eC5sbyBcCisJbHpvMWNfMS5sbyBsem8xY18yLmxvIGx6bzFjXzMubG8gbHpvMWNfNC5sbyBsem8xY181LmxvIFwKKwlsem8xY182LmxvIGx6bzFjXzcubG8gbHpvMWNfOC5sbyBsem8xY185LmxvIGx6bzFjXzk5LmxvIFwKKwlsem8xY185eC5sbyBsem8xY19jYy5sbyBsem8xY19kMS5sbyBsem8xY19kMi5sbyBsem8xY19yci5sbyBcCisJbHpvMWNfeHgubG8gbHpvMWZfMS5sbyBsem8xZl85eC5sbyBsem8xZl9kMS5sbyBsem8xZl9kMi5sbyBcCisJbHpvMXhfMS5sbyBsem8xeF85eC5sbyBsem8xeF9kMS5sbyBsem8xeF9kMi5sbyBsem8xeF9kMy5sbyBcCisJbHpvMXhfby5sbyBsem8xeF8xay5sbyBsem8xeF8xbC5sbyBsem8xeF8xby5sbyBsem8xeV8xLmxvIFwKKwlsem8xeV85eC5sbyBsem8xeV9kMS5sbyBsem8xeV9kMi5sbyBsem8xeV9kMy5sbyBsem8xeV9vLmxvIFwKKwlsem8xel85eC5sbyBsem8xel9kMS5sbyBsem8xel9kMi5sbyBsem8xel9kMy5sbyBsem8yYV85eC5sbyBcCisJbHpvMmFfZDEubG8gbHpvMmFfZDIubG8KK2xpYmx6bzJfbGFfT0JKRUNUUyA9ICQoYW1fbGlibHpvMl9sYV9PQkpFQ1RTKQorREVGQVVMVF9JTkNMVURFUyA9IC1JLiAtSSQoc3JjZGlyKSAtSSQodG9wX2J1aWxkZGlyKQorZGVwY29tcCA9ICQoU0hFTEwpICQodG9wX3NyY2RpcikvYXV0b2NvbmYvZGVwY29tcAorYW1fX2RlcGZpbGVzX21heWJlID0gZGVwZmlsZXMKK0NPTVBJTEUgPSAkKENDKSAkKERFRlMpICQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgXAorCSQoQ1BQRkxBR1MpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0xUQ09NUElMRSA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWNvbXBpbGUgJChDQykgJChERUZTKSBcCisJJChERUZBVUxUX0lOQ0xVREVTKSAkKElOQ0xVREVTKSAkKEFNX0NQUEZMQUdTKSAkKENQUEZMQUdTKSBcCisJJChBTV9DRkxBR1MpICQoQ0ZMQUdTKQorQ0NMRCA9ICQoQ0MpCitMSU5LID0gJChMSUJUT09MKSAtLXRhZz1DQyAtLW1vZGU9bGluayAkKENDTEQpICQoQU1fQ0ZMQUdTKSAkKENGTEFHUykgXAorCSQoQU1fTERGTEFHUykgJChMREZMQUdTKSAtbyAkQAorU09VUkNFUyA9ICQobGlibHpvMl9sYV9TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChsaWJsem8yX2xhX1NPVVJDRVMpCitFVEFHUyA9IGV0YWdzCitDVEFHUyA9IGN0YWdzCitESVNURklMRVMgPSAkKERJU1RfQ09NTU9OKSAkKERJU1RfU09VUkNFUykgJChURVhJTkZPUykgJChFWFRSQV9ESVNUKQorVlBBVEggPSBAc3JjZGlyQEBMWk9fQVNNX1ZQQVRIQAorQUNMT0NBTCA9IEBBQ0xPQ0FMQAorQU1ERVBfRkFMU0UgPSBAQU1ERVBfRkFMU0VACitBTURFUF9UUlVFID0gQEFNREVQX1RSVUVACitBTVRBUiA9IEBBTVRBUkAKK0FSID0gQEFSQAorQVVUT0NPTkYgPSBAQVVUT0NPTkZACitBVVRPSEVBREVSID0gQEFVVE9IRUFERVJACitBVVRPTUFLRSA9IEBBVVRPTUFLRUAKK0FXSyA9IEBBV0tACitDQyA9IEBDQ0AKK0NDREVQTU9ERSA9IEBDQ0RFUE1PREVACitDRkxBR1MgPSAkKExaT19DRkxBR1MpICQoY29uZmlndXJlX0NGTEFHUykgJChMWk9fRVhUUkFfQ0ZMQUdTKQorQ1BQID0gQENQUEAKK0NQUEZMQUdTID0gJChMWk9fQ1BQRkxBR1MpICQoY29uZmlndXJlX0NQUEZMQUdTKSAkKExaT19FWFRSQV9DUFBGTEFHUykKK0NYWCA9IEBDWFhACitDWFhDUFAgPSBAQ1hYQ1BQQAorQ1hYREVQTU9ERSA9IEBDWFhERVBNT0RFQAorQ1hYRkxBR1MgPSBAQ1hYRkxBR1NACitDWUdQQVRIX1cgPSBAQ1lHUEFUSF9XQAorREVGUyA9IEBERUZTQAorREVQRElSID0gQERFUERJUkAKK0VDSE8gPSBARUNIT0AKK0VDSE9fQyA9IEBFQ0hPX0NACitFQ0hPX04gPSBARUNIT19OQAorRUNIT19UID0gQEVDSE9fVEAKK0VHUkVQID0gQEVHUkVQQAorRVhFRVhUID0gQEVYRUVYVEAKK0Y3NyA9IEBGNzdACitGRkxBR1MgPSBARkZMQUdTQAorSU5TVEFMTF9EQVRBID0gQElOU1RBTExfREFUQUAKK0lOU1RBTExfUFJPR1JBTSA9IEBJTlNUQUxMX1BST0dSQU1ACitJTlNUQUxMX1NDUklQVCA9IEBJTlNUQUxMX1NDUklQVEAKK0lOU1RBTExfU1RSSVBfUFJPR1JBTSA9IEBJTlNUQUxMX1NUUklQX1BST0dSQU1ACitMREZMQUdTID0gQExERkxBR1NACitMSUJPQkpTID0gQExJQk9CSlNACitMSUJTID0gQExJQlNACitMSUJUT09MID0gQExJQlRPT0xACitMTl9TID0gQExOX1NACitMVExJQk9CSlMgPSBATFRMSUJPQkpTQAorTFpPX0FTTV9WUEFUSCA9IEBMWk9fQVNNX1ZQQVRIQAorTFpPX0NGTEFHUyA9IEBMWk9fQ0ZMQUdTQAorTFpPX0NQUEZMQUdTID0gQExaT19DUFBGTEFHU0AKK0xaT19FWFRSQV9DRkxBR1MgPSBATFpPX0VYVFJBX0NGTEFHU0AKK0xaT19FWFRSQV9DUFBGTEFHUyA9IEBMWk9fRVhUUkFfQ1BQRkxBR1NACitMWk9fVVNFX0FTTV9GQUxTRSA9IEBMWk9fVVNFX0FTTV9GQUxTRUAKK0xaT19VU0VfQVNNX1RSVUUgPSBATFpPX1VTRV9BU01fVFJVRUAKK01BSU5UID0gQE1BSU5UQAorTUFJTlRBSU5FUl9NT0RFX0ZBTFNFID0gQE1BSU5UQUlORVJfTU9ERV9GQUxTRUAKK01BSU5UQUlORVJfTU9ERV9UUlVFID0gQE1BSU5UQUlORVJfTU9ERV9UUlVFQAorTUFLRUlORk8gPSBATUFLRUlORk9ACitPQkpFWFQgPSBAT0JKRVhUQAorUEFDS0FHRSA9IEBQQUNLQUdFQAorUEFDS0FHRV9CVUdSRVBPUlQgPSBAUEFDS0FHRV9CVUdSRVBPUlRACitQQUNLQUdFX05BTUUgPSBAUEFDS0FHRV9OQU1FQAorUEFDS0FHRV9TVFJJTkcgPSBAUEFDS0FHRV9TVFJJTkdACitQQUNLQUdFX1RBUk5BTUUgPSBAUEFDS0FHRV9UQVJOQU1FQAorUEFDS0FHRV9WRVJTSU9OID0gQFBBQ0tBR0VfVkVSU0lPTkAKK1BBVEhfU0VQQVJBVE9SID0gQFBBVEhfU0VQQVJBVE9SQAorUkFOTElCID0gQFJBTkxJQkAKK1NFVF9NQUtFID0gQFNFVF9NQUtFQAorU0hFTEwgPSBAU0hFTExACitTVFJJUCA9IEBTVFJJUEAKK1ZFUlNJT04gPSBAVkVSU0lPTkAKK2FjX2N0X0FSID0gQGFjX2N0X0FSQAorYWNfY3RfQ0MgPSBAYWNfY3RfQ0NACithY19jdF9DWFggPSBAYWNfY3RfQ1hYQAorYWNfY3RfRjc3ID0gQGFjX2N0X0Y3N0AKK2FjX2N0X1JBTkxJQiA9IEBhY19jdF9SQU5MSUJACithY19jdF9TVFJJUCA9IEBhY19jdF9TVFJJUEAKK2FtX19mYXN0ZGVwQ0NfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAKK2FtX19mYXN0ZGVwQ0NfVFJVRSA9IEBhbV9fZmFzdGRlcENDX1RSVUVACithbV9fZmFzdGRlcENYWF9GQUxTRSA9IEBhbV9fZmFzdGRlcENYWF9GQUxTRUAKK2FtX19mYXN0ZGVwQ1hYX1RSVUUgPSBAYW1fX2Zhc3RkZXBDWFhfVFJVRUAKK2FtX19pbmNsdWRlID0gQGFtX19pbmNsdWRlQAorYW1fX2xlYWRpbmdfZG90ID0gQGFtX19sZWFkaW5nX2RvdEAKK2FtX19xdW90ZSA9IEBhbV9fcXVvdGVACithbV9fdGFyID0gQGFtX190YXJACithbV9fdW50YXIgPSBAYW1fX3VudGFyQAorYmluZGlyID0gQGJpbmRpckAKK2J1aWxkID0gQGJ1aWxkQAorYnVpbGRfYWxpYXMgPSBAYnVpbGRfYWxpYXNACitidWlsZF9jcHUgPSBAYnVpbGRfY3B1QAorYnVpbGRfb3MgPSBAYnVpbGRfb3NACitidWlsZF92ZW5kb3IgPSBAYnVpbGRfdmVuZG9yQAorY29uZmlndXJlX0NGTEFHUyA9IEBjb25maWd1cmVfQ0ZMQUdTQAorY29uZmlndXJlX0NQUEZMQUdTID0gQGNvbmZpZ3VyZV9DUFBGTEFHU0AKK2RhdGFkaXIgPSBAZGF0YWRpckAKK2V4ZWNfcHJlZml4ID0gQGV4ZWNfcHJlZml4QAoraG9zdCA9IEBob3N0QAoraG9zdF9hbGlhcyA9IEBob3N0X2FsaWFzQAoraG9zdF9jcHUgPSBAaG9zdF9jcHVACitob3N0X29zID0gQGhvc3Rfb3NACitob3N0X3ZlbmRvciA9IEBob3N0X3ZlbmRvckAKK2luY2x1ZGVkaXIgPSBAaW5jbHVkZWRpckAKK2luZm9kaXIgPSBAaW5mb2RpckAKK2luc3RhbGxfc2ggPSBAaW5zdGFsbF9zaEAKK2xpYmRpciA9IEBsaWJkaXJACitsaWJleGVjZGlyID0gQGxpYmV4ZWNkaXJACitsb2NhbHN0YXRlZGlyID0gQGxvY2Fsc3RhdGVkaXJACittYW5kaXIgPSBAbWFuZGlyQAorbWtkaXJfcCA9IEBta2Rpcl9wQAorb2xkaW5jbHVkZWRpciA9IEBvbGRpbmNsdWRlZGlyQAorcHJlZml4ID0gQHByZWZpeEAKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUgPSBAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAKK3NiaW5kaXIgPSBAc2JpbmRpckAKK3NoYXJlZHN0YXRlZGlyID0gQHNoYXJlZHN0YXRlZGlyQAorc3lzY29uZmRpciA9IEBzeXNjb25mZGlyQAordGFyZ2V0ID0gQHRhcmdldEAKK3RhcmdldF9hbGlhcyA9IEB0YXJnZXRfYWxpYXNACit0YXJnZXRfY3B1ID0gQHRhcmdldF9jcHVACit0YXJnZXRfb3MgPSBAdGFyZ2V0X29zQAordGFyZ2V0X3ZlbmRvciA9IEB0YXJnZXRfdmVuZG9yQAorU1VGRklYRVMgPSAuUworSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKK2xpYl9MVExJQlJBUklFUyA9IGxpYmx6bzIubGEKK2xpYmx6bzJfbGFfTERGTEFHUyA9IC12ZXJzaW9uLWluZm8gMjowOjAKK2xpYmx6bzJfbGFfU09VUkNFUyA9IFwKKyAgICBsem9fY3JjLmMgbHpvX2luaXQuYyBsem9fcHRyLmMgbHpvX3N0ci5jIGx6b191dGlsLmMgXAorICAgIGx6bzEuYyBsem8xXzk5LmMgXAorICAgIGx6bzFhLmMgbHpvMWFfOTkuYyBcCisgICAgbHpvMWJfMS5jIGx6bzFiXzIuYyBsem8xYl8zLmMgbHpvMWJfNC5jIGx6bzFiXzUuYyBsem8xYl82LmMgXAorICAgIGx6bzFiXzcuYyBsem8xYl84LmMgbHpvMWJfOS5jIGx6bzFiXzk5LmMgbHpvMWJfOXguYyBcCisgICAgbHpvMWJfY2MuYyBsem8xYl9kMS5jIGx6bzFiX2QyLmMgbHpvMWJfcnIuYyBsem8xYl94eC5jIFwKKyAgICBsem8xY18xLmMgbHpvMWNfMi5jIGx6bzFjXzMuYyBsem8xY180LmMgbHpvMWNfNS5jIGx6bzFjXzYuYyBcCisgICAgbHpvMWNfNy5jIGx6bzFjXzguYyBsem8xY185LmMgbHpvMWNfOTkuYyBsem8xY185eC5jIFwKKyAgICBsem8xY19jYy5jIGx6bzFjX2QxLmMgbHpvMWNfZDIuYyBsem8xY19yci5jIGx6bzFjX3h4LmMgXAorICAgIGx6bzFmXzEuYyBsem8xZl85eC5jIGx6bzFmX2QxLmMgbHpvMWZfZDIuYyBcCisgICAgbHpvMXhfMS5jIGx6bzF4Xzl4LmMgbHpvMXhfZDEuYyBsem8xeF9kMi5jIGx6bzF4X2QzLmMgXAorICAgIGx6bzF4X28uYyBsem8xeF8xay5jIGx6bzF4XzFsLmMgbHpvMXhfMW8uYyBcCisgICAgbHpvMXlfMS5jIGx6bzF5Xzl4LmMgbHpvMXlfZDEuYyBsem8xeV9kMi5jIGx6bzF5X2QzLmMgbHpvMXlfby5jIFwKKyAgICBsem8xel85eC5jIGx6bzF6X2QxLmMgbHpvMXpfZDIuYyBsem8xel9kMy5jIFwKKyAgICBsem8yYV85eC5jIGx6bzJhX2QxLmMgbHpvMmFfZDIuYworCitFWFRSQV9ESVNUID0gXAorICAgIGx6bzFfY20uY2ggbHpvMV9kLmNoIGx6bzFhX2NtLmNoIGx6bzFhX2NyLmNoIGx6bzFiX2MuY2ggXAorICAgIGx6bzFiX2NtLmNoIGx6bzFiX2NyLmNoIGx6bzFiX2QuY2ggbHpvMWJfci5jaCBcCisgICAgbHpvMWJfc20uY2ggbHpvMWJfdG0uY2ggbHpvMWZfZC5jaCBsem8xeF9jLmNoIFwKKyAgICBsem8xeF9kLmNoIGx6bzF4X29vLmNoIGx6bzJhX2QuY2ggXAorICAgIGx6b19kbGwuY2ggbHpvX21jaHcuY2ggbHpvX3N3ZC5jaCBcCisgICAgY29tcHIxYi5oIGNvbXByMWMuaCBjb25maWcxLmggY29uZmlnMWEuaCBjb25maWcxYi5oIGNvbmZpZzFjLmggXAorICAgIGNvbmZpZzFmLmggY29uZmlnMXguaCBjb25maWcxeS5oIGNvbmZpZzF6LmggY29uZmlnMmEuaCBcCisgICAgbHpvMWFfZGUuaCBsem8xYl9jYy5oIGx6bzFiX2RlLmggbHpvMWNfY2MuaCBsem9fY29uZi5oIGx6b19kaWN0LmggXAorICAgIGx6b19wdHIuaCBzdGF0czFhLmggc3RhdHMxYi5oIHN0YXRzMWMuaCBtaW5pYWNjLmgKKworbGlibHpvMl9sYV9MSUJBREQgPSAkKExaT19BU01fT0JKRUNUUykKK2xpYmx6bzJfbGFfREVQRU5ERU5DSUVTID0gJChsaWJsem8yX2xhX0xJQkFERCkKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8gYXNzZW1ibGVyIHN1cHBvcnQKKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworQExaT19VU0VfQVNNX1RSVUVATFpPX0FTTV9PQkpFQ1RTID0gXAorQExaT19VU0VfQVNNX1RSVUVACWx6bzFjX3MxLmxvIGx6bzFjX3MyLmxvIFwKK0BMWk9fVVNFX0FTTV9UUlVFQAlsem8xZl9mMS5sbyBsem8xZl9mMi5sbyBcCitATFpPX1VTRV9BU01fVFJVRUAJbHpvMXhfZjEubG8gbHpvMXhfZjIubG8gbHpvMXhfczEubG8gbHpvMXhfczIubG8gXAorQExaT19VU0VfQVNNX1RSVUVACWx6bzF5X2YxLmxvIGx6bzF5X2YyLmxvIGx6bzF5X3MxLmxvIGx6bzF5X3MyLmxvCisKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLlMgLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIHNyYy9NYWtlZmlsZSc7IFwKKwljZCAkKHRvcF9zcmNkaXIpICYmIFwKKwkgICQoQVVUT01BS0UpIC0tZ251ICBzcmMvTWFrZWZpbGUKKy5QUkVDSU9VUzogTWFrZWZpbGUKK01ha2VmaWxlOiAkKHNyY2RpcikvTWFrZWZpbGUuaW4gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXMKKwlAY2FzZSAnJD8nIGluIFwKKwkgICpjb25maWcuc3RhdHVzKikgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2g7OyBcCisJICAqKSBcCisJICAgIGVjaG8gJyBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSknOyBcCisJICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgJChzdWJkaXIpLyRAICQoYW1fX2RlcGZpbGVzX21heWJlKTs7IFwKKwllc2FjOworCiskKHRvcF9idWlsZGRpcikvY29uZmlnLnN0YXR1czogJCh0b3Bfc3JjZGlyKS9jb25maWd1cmUgJChDT05GSUdfU1RBVFVTX0RFUEVOREVOQ0lFUykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKKworJCh0b3Bfc3JjZGlyKS9jb25maWd1cmU6IEBNQUlOVEFJTkVSX01PREVfVFJVRUAgJChhbV9fY29uZmlndXJlX2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCiskKEFDTE9DQUxfTTQpOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2FjbG9jYWxfbTRfZGVwcykKKwljZCAkKHRvcF9idWlsZGRpcikgJiYgJChNQUtFKSAkKEFNX01BS0VGTEFHUykgYW0tLXJlZnJlc2gKK2luc3RhbGwtbGliTFRMSUJSQVJJRVM6ICQobGliX0xUTElCUkFSSUVTKQorCUAkKE5PUk1BTF9JTlNUQUxMKQorCXRlc3QgLXogIiQobGliZGlyKSIgfHwgJChta2Rpcl9wKSAiJChERVNURElSKSQobGliZGlyKSIKKwlAbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBpZiB0ZXN0IC1mICQkcDsgdGhlbiBcCisJICAgIGY9JChhbV9fc3RyaXBfZGlyKSBcCisJICAgIGVjaG8gIiAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsICQobGliTFRMSUJSQVJJRVNfSU5TVEFMTCkgJChJTlNUQUxMX1NUUklQX0ZMQUcpICckJHAnICckKERFU1RESVIpJChsaWJkaXIpLyQkZiciOyBcCisJICAgICQoTElCVE9PTCkgLS1tb2RlPWluc3RhbGwgJChsaWJMVExJQlJBUklFU19JTlNUQUxMKSAkKElOU1RBTExfU1RSSVBfRkxBRykgIiQkcCIgIiQoREVTVERJUikkKGxpYmRpcikvJCRmIjsgXAorCSAgZWxzZSA6OyBmaTsgXAorCWRvbmUKKwordW5pbnN0YWxsLWxpYkxUTElCUkFSSUVTOgorCUAkKE5PUk1BTF9VTklOU1RBTEwpCisJQHNldCAteDsgbGlzdD0nJChsaWJfTFRMSUJSQVJJRVMpJzsgZm9yIHAgaW4gJCRsaXN0OyBkbyBcCisJICBwPSQoYW1fX3N0cmlwX2RpcikgXAorCSAgZWNobyAiICQoTElCVE9PTCkgLS1tb2RlPXVuaW5zdGFsbCBybSAtZiAnJChERVNURElSKSQobGliZGlyKS8kJHAnIjsgXAorCSAgJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mICIkKERFU1RESVIpJChsaWJkaXIpLyQkcCI7IFwKKwlkb25lCisKK2NsZWFuLWxpYkxUTElCUkFSSUVTOgorCS10ZXN0IC16ICIkKGxpYl9MVExJQlJBUklFUykiIHx8IHJtIC1mICQobGliX0xUTElCUkFSSUVTKQorCUBsaXN0PSckKGxpYl9MVExJQlJBUklFUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGRpcj0iYGVjaG8gJCRwIHwgc2VkIC1lICdzfC9bXi9dKiQkfHwnYCI7IFwKKwkgIHRlc3QgIiQkZGlyIiAhPSAiJCRwIiB8fCBkaXI9LjsgXAorCSAgZWNobyAicm0gLWYgXCIkJHtkaXJ9L3NvX2xvY2F0aW9uc1wiIjsgXAorCSAgcm0gLWYgIiQke2Rpcn0vc29fbG9jYXRpb25zIjsgXAorCWRvbmUKK2xpYmx6bzIubGE6ICQobGlibHpvMl9sYV9PQkpFQ1RTKSAkKGxpYmx6bzJfbGFfREVQRU5ERU5DSUVTKSAKKwkkKExJTkspIC1ycGF0aCAkKGxpYmRpcikgJChsaWJsem8yX2xhX0xERkxBR1MpICQobGlibHpvMl9sYV9PQkpFQ1RTKSAkKGxpYmx6bzJfbGFfTElCQUREKSAkKExJQlMpCisKK21vc3RseWNsZWFuLWNvbXBpbGU6CisJLXJtIC1mICouJChPQkpFWFQpCisKK2Rpc3RjbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLnRhYi5jCisKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMV85OS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFhLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWFfOTkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl8xLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWJfMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFiXzMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl80LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWJfNS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFiXzYuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl83LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWJfOC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFiXzkuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl85OS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFiXzl4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWJfY2MuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl9kMS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFiX2QyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWJfcnIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xYl94eC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjXzEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xY18yLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWNfMy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjXzQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xY181LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWNfNi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjXzcuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xY184LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWNfOS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjXzk5LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWNfOXguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xY19jYy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjX2QxLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWNfZDIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xY19yci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFjX3h4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWZfMS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzFmXzl4LlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMWZfZDEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xZl9kMi5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF4XzEuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeF8xay5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF4XzFsLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXhfMW8uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeF85eC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF4X2QxLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXhfZDIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeF9kMy5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF4X28uUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeV8xLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXlfOXguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeV9kMS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF5X2QyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXlfZDMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xeV9vLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXpfOXguUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8xel9kMS5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzF6X2QyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMXpfZDMuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem8yYV85eC5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6bzJhX2QxLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvMmFfZDIuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem9fY3JjLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvX2luaXQuUGxvQGFtX19xdW90ZUAKK0BBTURFUF9UUlVFQEBhbV9faW5jbHVkZUAgQGFtX19xdW90ZUAuLyQoREVQRElSKS9sem9fcHRyLlBsb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvbHpvX3N0ci5QbG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2x6b191dGlsLlBsb0BhbV9fcXVvdGVACisKKy5jLm86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKENPTVBJTEUpIC1NVCAkQCAtTUQgLU1QIC1NRiAiJChERVBESVIpLyQqLlRwbyIgLWMgLW8gJEAgJDw7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgJDwKKworLmMub2JqOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAIGAkKENZR1BBVEhfVykgJyQ8J2A7IFwKK0BhbV9fZmFzdGRlcENDX1RSVUVACXRoZW4gbXYgLWYgIiQoREVQRElSKS8kKi5UcG8iICIkKERFUERJUikvJCouUG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9bm8gQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoQ09NUElMRSkgLWMgYCQoQ1lHUEFUSF9XKSAnJDwnYAorCisuYy5sbzoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoTFRDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBsbyI7IGVsc2Ugcm0gLWYgIiQoREVQRElSKS8kKi5UcG8iOyBleGl0IDE7IGZpCitAQU1ERVBfVFJVRUBAYW1fX2Zhc3RkZXBDQ19GQUxTRUAJc291cmNlPSckPCcgb2JqZWN0PSckQCcgbGlidG9vbD15ZXMgQEFNREVQQkFDS1NMQVNIQAorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACURFUERJUj0kKERFUERJUikgJChDQ0RFUE1PREUpICQoZGVwY29tcCkgQEFNREVQQkFDS1NMQVNIQAorQGFtX19mYXN0ZGVwQ0NfRkFMU0VACSQoTFRDT01QSUxFKSAtYyAtbyAkQCAkPAorCittb3N0bHljbGVhbi1saWJ0b29sOgorCS1ybSAtZiAqLmxvCisKK2NsZWFuLWxpYnRvb2w6CisJLXJtIC1yZiAubGlicyBfbGlicworCitkaXN0Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgbGlidG9vbAordW5pbnN0YWxsLWluZm8tYW06CisKK0lEOiAkKEhFQURFUlMpICQoU09VUkNFUykgJChMSVNQKSAkKFRBR1NfRklMRVMpCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlta2lkIC1mSUQgJCR1bmlxdWUKK3RhZ3M6IFRBR1MKKworVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwlpZiB0ZXN0IC16ICIkKEVUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiOyB0aGVuIDo7IGVsc2UgXAorCSAgdGVzdCAtbiAiJCR1bmlxdWUiIHx8IHVuaXF1ZT0kJGVtcHR5X2ZpeDsgXAorCSAgJChFVEFHUykgJChFVEFHU0ZMQUdTKSAkKEFNX0VUQUdTRkxBR1MpICQoRVRBR1NfQVJHUykgXAorCSAgICAkJHRhZ3MgJCR1bmlxdWU7IFwKKwlmaQorY3RhZ3M6IENUQUdTCitDVEFHUzogICQoSEVBREVSUykgJChTT1VSQ0VTKSAgJChUQUdTX0RFUEVOREVOQ0lFUykgXAorCQkkKFRBR1NfRklMRVMpICQoTElTUCkKKwl0YWdzPTsgXAorCWhlcmU9YHB3ZGA7IFwKKwlsaXN0PSckKFNPVVJDRVMpICQoSEVBREVSUykgICQoTElTUCkgJChUQUdTX0ZJTEVTKSc7IFwKKwl1bmlxdWU9YGZvciBpIGluICQkbGlzdDsgZG8gXAorCSAgICBpZiB0ZXN0IC1mICIkJGkiOyB0aGVuIGVjaG8gJCRpOyBlbHNlIGVjaG8gJChzcmNkaXIpLyQkaTsgZmk7IFwKKwkgIGRvbmUgfCBcCisJICAkKEFXSykgJyAgICB7IGZpbGVzWyQkMF0gPSAxOyB9IFwKKwkgICAgICAgRU5EIHsgZm9yIChpIGluIGZpbGVzKSBwcmludCBpOyB9J2A7IFwKKwl0ZXN0IC16ICIkKENUQUdTX0FSR1MpJCR0YWdzJCR1bmlxdWUiIFwKKwkgIHx8ICQoQ1RBR1MpICQoQ1RBR1NGTEFHUykgJChBTV9DVEFHU0ZMQUdTKSAkKENUQUdTX0FSR1MpIFwKKwkgICAgICQkdGFncyAkJHVuaXF1ZQorCitHVEFHUzoKKwloZXJlPWAkKGFtX19jZCkgJCh0b3BfYnVpbGRkaXIpICYmIHB3ZGAgXAorCSAgJiYgY2QgJCh0b3Bfc3JjZGlyKSBcCisJICAmJiBndGFncyAtaSAkKEdUQUdTX0FSR1MpICQkaGVyZQorCitkaXN0Y2xlYW4tdGFnczoKKwktcm0gLWYgVEFHUyBJRCBHVEFHUyBHUlRBR1MgR1NZTVMgR1BBVEggdGFncworCitkaXN0ZGlyOiAkKERJU1RGSUxFUykKKwlAc3JjZGlyc3RyaXA9YGVjaG8gIiQoc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCXRvcHNyY2RpcnN0cmlwPWBlY2hvICIkKHRvcF9zcmNkaXIpIiB8IHNlZCAnc3wufC58ZydgOyBcCisJbGlzdD0nJChESVNURklMRVMpJzsgZm9yIGZpbGUgaW4gJCRsaXN0OyBkbyBcCisJICBjYXNlICQkZmlsZSBpbiBcCisJICAgICQoc3JjZGlyKS8qKSBmaWxlPWBlY2hvICIkJGZpbGUiIHwgc2VkICJzfF4kJHNyY2RpcnN0cmlwL3x8ImA7OyBcCisJICAgICQodG9wX3NyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCR0b3BzcmNkaXJzdHJpcC98JCh0b3BfYnVpbGRkaXIpL3wiYDs7IFwKKwkgIGVzYWM7IFwKKwkgIGlmIHRlc3QgLWYgJCRmaWxlIHx8IHRlc3QgLWQgJCRmaWxlOyB0aGVuIGQ9LjsgZWxzZSBkPSQoc3JjZGlyKTsgZmk7IFwKKwkgIGRpcj1gZWNobyAiJCRmaWxlIiB8IHNlZCAtZSAncywvW14vXSokJCwsJ2A7IFwKKwkgIGlmIHRlc3QgIiQkZGlyIiAhPSAiJCRmaWxlIiAmJiB0ZXN0ICIkJGRpciIgIT0gIi4iOyB0aGVuIFwKKwkgICAgZGlyPSIvJCRkaXIiOyBcCisJICAgICQobWtkaXJfcCkgIiQoZGlzdGRpcikkJGRpciI7IFwKKwkgIGVsc2UgXAorCSAgICBkaXI9Jyc7IFwKKwkgIGZpOyBcCisJICBpZiB0ZXN0IC1kICQkZC8kJGZpbGU7IHRoZW4gXAorCSAgICBpZiB0ZXN0IC1kICQoc3JjZGlyKS8kJGZpbGUgJiYgdGVzdCAkJGQgIT0gJChzcmNkaXIpOyB0aGVuIFwKKwkgICAgICBjcCAtcFIgJChzcmNkaXIpLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICAgIGZpOyBcCisJICAgIGNwIC1wUiAkJGQvJCRmaWxlICQoZGlzdGRpcikkJGRpciB8fCBleGl0IDE7IFwKKwkgIGVsc2UgXAorCSAgICB0ZXN0IC1mICQoZGlzdGRpcikvJCRmaWxlIFwKKwkgICAgfHwgY3AgLXAgJCRkLyQkZmlsZSAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGV4aXQgMTsgXAorCSAgZmk7IFwKKwlkb25lCitjaGVjay1hbTogYWxsLWFtCitjaGVjazogY2hlY2stYW0KK2FsbC1hbTogTWFrZWZpbGUgJChMVExJQlJBUklFUykKK2luc3RhbGxkaXJzOgorCWZvciBkaXIgaW4gIiQoREVTVERJUikkKGxpYmRpcikiOyBkbyBcCisJICB0ZXN0IC16ICIkJGRpciIgfHwgJChta2Rpcl9wKSAiJCRkaXIiOyBcCisJZG9uZQoraW5zdGFsbDogaW5zdGFsbC1hbQoraW5zdGFsbC1leGVjOiBpbnN0YWxsLWV4ZWMtYW0KK2luc3RhbGwtZGF0YTogaW5zdGFsbC1kYXRhLWFtCit1bmluc3RhbGw6IHVuaW5zdGFsbC1hbQorCitpbnN0YWxsLWFtOiBhbGwtYW0KKwlAJChNQUtFKSAkKEFNX01BS0VGTEFHUykgaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtZGF0YS1hbQorCitpbnN0YWxsY2hlY2s6IGluc3RhbGxjaGVjay1hbQoraW5zdGFsbC1zdHJpcDoKKwkkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBJTlNUQUxMX1BST0dSQU09IiQoSU5TVEFMTF9TVFJJUF9QUk9HUkFNKSIgXAorCSAgaW5zdGFsbF9zaF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIElOU1RBTExfU1RSSVBfRkxBRz0tcyBcCisJICBgdGVzdCAteiAnJChTVFJJUCknIHx8IFwKKwkgICAgZWNobyAiSU5TVEFMTF9QUk9HUkFNX0VOVj1TVFJJUFBST0c9JyQoU1RSSVApJyJgIGluc3RhbGwKK21vc3RseWNsZWFuLWdlbmVyaWM6CisKK2NsZWFuLWdlbmVyaWM6CisKK2Rpc3RjbGVhbi1nZW5lcmljOgorCS10ZXN0IC16ICIkKENPTkZJR19DTEVBTl9GSUxFUykiIHx8IHJtIC1mICQoQ09ORklHX0NMRUFOX0ZJTEVTKQorCittYWludGFpbmVyLWNsZWFuLWdlbmVyaWM6CisJQGVjaG8gIlRoaXMgY29tbWFuZCBpcyBpbnRlbmRlZCBmb3IgbWFpbnRhaW5lcnMgdG8gdXNlIgorCUBlY2hvICJpdCBkZWxldGVzIGZpbGVzIHRoYXQgbWF5IHJlcXVpcmUgc3BlY2lhbCB0b29scyB0byByZWJ1aWxkLiIKK2NsZWFuOiBjbGVhbi1hbQorCitjbGVhbi1hbTogY2xlYW4tZ2VuZXJpYyBjbGVhbi1saWJMVExJQlJBUklFUyBjbGVhbi1saWJ0b29sIFwKKwltb3N0bHljbGVhbi1hbQorCitkaXN0Y2xlYW46IGRpc3RjbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK2Rpc3RjbGVhbi1hbTogY2xlYW4tYW0gZGlzdGNsZWFuLWNvbXBpbGUgZGlzdGNsZWFuLWdlbmVyaWMgXAorCWRpc3RjbGVhbi1saWJ0b29sIGRpc3RjbGVhbi10YWdzCisKK2R2aTogZHZpLWFtCisKK2R2aS1hbToKKworaHRtbDogaHRtbC1hbQorCitpbmZvOiBpbmZvLWFtCisKK2luZm8tYW06CisKK2luc3RhbGwtZGF0YS1hbToKKworaW5zdGFsbC1leGVjLWFtOiBpbnN0YWxsLWxpYkxUTElCUkFSSUVTCisKK2luc3RhbGwtaW5mbzogaW5zdGFsbC1pbmZvLWFtCisKK2luc3RhbGwtbWFuOgorCitpbnN0YWxsY2hlY2stYW06CisKK21haW50YWluZXItY2xlYW46IG1haW50YWluZXItY2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCittYWludGFpbmVyLWNsZWFuLWFtOiBkaXN0Y2xlYW4tYW0gbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljCisKK21vc3RseWNsZWFuOiBtb3N0bHljbGVhbi1hbQorCittb3N0bHljbGVhbi1hbTogbW9zdGx5Y2xlYW4tY29tcGlsZSBtb3N0bHljbGVhbi1nZW5lcmljIFwKKwltb3N0bHljbGVhbi1saWJ0b29sCisKK3BkZjogcGRmLWFtCisKK3BkZi1hbToKKworcHM6IHBzLWFtCisKK3BzLWFtOgorCit1bmluc3RhbGwtYW06IHVuaW5zdGFsbC1pbmZvLWFtIHVuaW5zdGFsbC1saWJMVExJQlJBUklFUworCisuUEhPTlk6IENUQUdTIEdUQUdTIGFsbCBhbGwtYW0gY2hlY2sgY2hlY2stYW0gY2xlYW4gY2xlYW4tZ2VuZXJpYyBcCisJY2xlYW4tbGliTFRMSUJSQVJJRVMgY2xlYW4tbGlidG9vbCBjdGFncyBkaXN0Y2xlYW4gXAorCWRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIGRpc3RjbGVhbi1saWJ0b29sIFwKKwlkaXN0Y2xlYW4tdGFncyBkaXN0ZGlyIGR2aSBkdmktYW0gaHRtbCBodG1sLWFtIGluZm8gaW5mby1hbSBcCisJaW5zdGFsbCBpbnN0YWxsLWFtIGluc3RhbGwtZGF0YSBpbnN0YWxsLWRhdGEtYW0gaW5zdGFsbC1leGVjIFwKKwlpbnN0YWxsLWV4ZWMtYW0gaW5zdGFsbC1pbmZvIGluc3RhbGwtaW5mby1hbSBcCisJaW5zdGFsbC1saWJMVExJQlJBUklFUyBpbnN0YWxsLW1hbiBpbnN0YWxsLXN0cmlwIGluc3RhbGxjaGVjayBcCisJaW5zdGFsbGNoZWNrLWFtIGluc3RhbGxkaXJzIG1haW50YWluZXItY2xlYW4gXAorCW1haW50YWluZXItY2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbiBtb3N0bHljbGVhbi1jb21waWxlIFwKKwltb3N0bHljbGVhbi1nZW5lcmljIG1vc3RseWNsZWFuLWxpYnRvb2wgcGRmIHBkZi1hbSBwcyBwcy1hbSBcCisJdGFncyB1bmluc3RhbGwgdW5pbnN0YWxsLWFtIHVuaW5zdGFsbC1pbmZvLWFtIFwKKwl1bmluc3RhbGwtbGliTFRMSUJSQVJJRVMKKworCitATFpPX1VTRV9BU01fVFJVRUAuUy5vOgorQExaT19VU0VfQVNNX1RSVUVACSQoQ0MpIC1jICQ8CisKK0BMWk9fVVNFX0FTTV9UUlVFQC5TLmxvOgorQExaT19VU0VfQVNNX1RSVUVACSQoTElCVE9PTCkgLS1tb2RlPWNvbXBpbGUgJChDQykgLWMgJDwKKyMgVGVsbCB2ZXJzaW9ucyBbMy41OSwzLjYzKSBvZiBHTlUgbWFrZSB0byBub3QgZXhwb3J0IGFsbCB2YXJpYWJsZXMuCisjIE90aGVyd2lzZSBhIHN5c3RlbSBsaW1pdCAoZm9yIFN5c1YgYXQgbGVhc3QpIG1heSBiZSBleGNlZWRlZC4KKy5OT0VYUE9SVDoKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9jb21wcjFiLmggYi9sem8tMi4wMy9zcmMvY29tcHIxYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMGQyMDAKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvY29tcHIxYi5oCkBAIC0wLDAgKzEsODEgQEAKKy8qIGNvbXByMWIuaCAtLQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2luY2x1ZGUgImNvbmZpZzFiLmgiCisKKworI2lmICFkZWZpbmVkKENPTVBSRVNTX0lEKQorI2RlZmluZSBDT01QUkVTU19JRCAgICAgTFpPX0NQUF9FQ09OQ0FUMihERF9CSVRTLENMRVZFTCkKKyNlbmRpZgorCisKKyNpbmNsdWRlICJsem8xYl9jLmNoIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fQ09NUFJFU1MgXAorICAgIExaT19DUFBfRUNPTkNBVDMobHpvMWJfLENPTVBSRVNTX0lELF9jb21wcmVzcykKKworI2RlZmluZSBMWk9fQ09NUFJFU1NfRlVOQyBcCisgICAgTFpPX0NQUF9FQ09OQ0FUMyhfbHpvMWJfLENPTVBSRVNTX0lELF9jb21wcmVzc19mdW5jKQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitjb25zdCBsem9fY29tcHJlc3NfdCBMWk9fQ09NUFJFU1NfRlVOQyA9IGRvX2NvbXByZXNzOworCitMWk9fUFVCTElDKGludCkKK0xaT19DT01QUkVTUyAoIGNvbnN0IGx6b19ieXRlcCBpbiwgIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBfbHpvMWJfZG9fY29tcHJlc3MoaW4saW5fbGVuLG91dCxvdXRfbGVuLHdya21lbSxkb19jb21wcmVzcyk7Cit9CisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2NvbXByMWMuaCBiL2x6by0yLjAzL3NyYy9jb21wcjFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGIyOWY5YQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9jb21wcjFjLmgKQEAgLTAsMCArMSw4MSBAQAorLyogY29tcHIxYy5oIC0tCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgTFpPX05FRURfRElDVF9ICisjaW5jbHVkZSAiY29uZmlnMWMuaCIKKworCisjaWYgIWRlZmluZWQoQ09NUFJFU1NfSUQpCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICBMWk9fQ1BQX0VDT05DQVQyKEREX0JJVFMsQ0xFVkVMKQorI2VuZGlmCisKKworI2luY2x1ZGUgImx6bzFiX2MuY2giCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19DT01QUkVTUyBcCisgICAgTFpPX0NQUF9FQ09OQ0FUMyhsem8xY18sQ09NUFJFU1NfSUQsX2NvbXByZXNzKQorCisjZGVmaW5lIExaT19DT01QUkVTU19GVU5DIFwKKyAgICBMWk9fQ1BQX0VDT05DQVQzKF9sem8xY18sQ09NUFJFU1NfSUQsX2NvbXByZXNzX2Z1bmMpCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2NvbnN0IGx6b19jb21wcmVzc190IExaT19DT01QUkVTU19GVU5DID0gZG9fY29tcHJlc3M7CisKK0xaT19QVUJMSUMoaW50KQorTFpPX0NPTVBSRVNTICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIF9sem8xY19kb19jb21wcmVzcyhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtLGRvX2NvbXByZXNzKTsKK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvY29uZmlnMS5oIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjIzMTUwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzEuaApAQCAtMCwwICsxLDYxIEBACisvKiBjb25maWcxLmggLS0gY29uZmlndXJhdGlvbiBmb3IgdGhlIExaTzEgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKyNpZm5kZWYgX19MWk9fQ09ORklHMV9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzFfSAorCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMS5oIgorCisjZGVmaW5lIExaT19OT19SMQorI2luY2x1ZGUgImNvbmZpZzFhLmgiCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9jb25maWcxYS5oIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzFhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY5YmU0NAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9jb25maWcxYS5oCkBAIC0wLDAgKzEsMTk2IEBACisvKiBjb25maWcxYS5oIC0tIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMWk8xQSBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaWZuZGVmIF9fTFpPX0NPTkZJRzFBX0gKKyNkZWZpbmUgX19MWk9fQ09ORklHMUFfSAorCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMWEuaCIKKworI3VuZGVmIExaT19DT0xMRUNUX1NUQVRTICAgIC8qIG5vIHN1cHBvcnQgZm9yIHN0YXRzIGhlcmUgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGFsZ29yaXRobSBjb25maWd1cmF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHJ1biBiaXRzICg0IC0gNSkgLSB0aGUgY29tcHJlc3NvciBhbmQgdGhlIGRlY29tcHJlc3NvcgorICogbXVzdCB1c2UgdGhlIHNhbWUgdmFsdWUuICovCisjaWYgIWRlZmluZWQoUkJJVFMpCisjICBkZWZpbmUgUkJJVFMgICAgIDUKKyNlbmRpZgorCisvKiBkaWN0aW9uYXJ5IGRlcHRoICgwIC0gNikgLSB0aGlzIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Nvci4KKyAqIDAgaXMgZmFzdGVzdCwgNiBpcyBiZXN0IGNvbXByZXNzaW9uIHJhdGlvICovCisjaWYgIWRlZmluZWQoRERCSVRTKQorIyAgZGVmaW5lIEREQklUUyAgICAwCisjZW5kaWYKKworLyogY29tcHJlc3Npb24gbGV2ZWwgKDEgLSA5KSAtIHRoaXMgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc29yLgorICogMSBpcyBmYXN0ZXN0LCA5IGlzIGJlc3QgY29tcHJlc3Npb24gcmF0aW8gKi8KKyNpZiAhZGVmaW5lZChDTEVWRUwpCisjICBkZWZpbmUgQ0xFVkVMICAgIDEgICAgICAgICAgIC8qIGZhc3Rlc3QgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKworLyogY2hlY2sgY29uZmlndXJhdGlvbiAqLworI2lmIChSQklUUyA8IDQgfHwgUkJJVFMgPiA1KQorIyAgZXJyb3IgImludmFsaWQgUkJJVFMiCisjZW5kaWYKKyNpZiAoRERCSVRTIDwgMCB8fCBEREJJVFMgPiA2KQorIyAgZXJyb3IgImludmFsaWQgRERCSVRTIgorI2VuZGlmCisjaWYgKENMRVZFTCA8IDEgfHwgQ0xFVkVMID4gOSkKKyMgIGVycm9yICJpbnZhbGlkIENMRVZFTCIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gaW50ZXJuYWwgY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBhZGQgYSBzcGVjaWFsIGNvZGUgc28gdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBkZXRlY3QgdGhlCisgKiBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBibG9jayAob3ZlcmhlYWQgaXMgMyBieXRlcyBwZXIgYmxvY2spICovCisjdW5kZWYgTFpPX0VPRl9DT0RFCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBhbGdvcml0aG0gaW50ZXJuYWwgY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjaG9vc2UgdGhlIGhhc2hpbmcgc3RyYXRlZ3kgKi8KKyNpZm5kZWYgTFpPX0hBU0gKKyNkZWZpbmUgTFpPX0hBU0ggICAgICAgIExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9BCisjZW5kaWYKKworLyogY29uZmlnICovCisjZGVmaW5lIFJfQklUUyAgICAgICAgICBSQklUUworI2RlZmluZSBERF9CSVRTICAgICAgICAgRERCSVRTCisjaWZuZGVmIERfQklUUworI2RlZmluZSBEX0JJVFMgICAgICAgICAgMTYKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gb3B0aW1pemF0aW9uIGFuZCBkZWJ1Z2dpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQ29sbGVjdCBzdGF0aXN0aWNzICovCisjaWYgMCAmJiAhZGVmaW5lZChMWk9fQ09MTEVDVF9TVEFUUykKKyMgIGRlZmluZSBMWk9fQ09MTEVDVF9TVEFUUworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE0zT19CSVRTICAgICAgICBNMk9fQklUUworI2RlZmluZSBNM0xfQklUUyAgICAgICAgQ0hBUl9CSVQKKyNkZWZpbmUgTTNfTUFYX0xFTiAgICAgIChNM19NSU5fTEVOICsgTFpPX1NJWkUoTTNMX0JJVFMpIC0gMSkKKyNkZWZpbmUgX01BWF9PRkZTRVQgICAgIF9NMl9NQVhfT0ZGU0VUCisjZGVmaW5lIExaT19OT19NMworCisjaW5jbHVkZSAibHpvMWJfZGUuaCIKKyNpbmNsdWRlICJzdGF0czFiLmgiCisKKyNpbmNsdWRlICJsem8xYl9jYy5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY2hlY2sgZm9yIHRvdGFsIExaTzEvTFpPMUEgY29tcGF0aWJpbGl0eQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjdW5kZWYgTTJfTUFSS0VSCisjZGVmaW5lIE0yX01BUktFUiAgICgxIDw8IE0yT19CSVRTKQorCisjaWYgKFJfQklUUyAhPSA1KQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChNMk9fQklUUyAhPSA1KQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChNM09fQklUUyAhPSA1KQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChNMl9NSU5fTEVOICE9IDMpCisjICBlcnJvcgorI2VuZGlmCisjaWYgKE0yX01BWF9MRU4gIT0gOCkKKyMgIGVycm9yCisjZW5kaWYKKyNpZiAoTTNfTUlOX0xFTiAhPSA5KQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChNM19NQVhfTEVOICE9IDI2NCkKKyMgIGVycm9yCisjZW5kaWYKKyNpZiAoX00yX01BWF9PRkZTRVQgIT0gKDF1IDw8IDEzKSkKKyMgIGVycm9yCisjZW5kaWYKKyNpZiAoX00yX01BWF9PRkZTRVQgIT0gX00zX01BWF9PRkZTRVQpCisjICBlcnJvcgorI2VuZGlmCisjaWYgKF9NMl9NQVhfT0ZGU0VUICE9IF9NQVhfT0ZGU0VUKQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChSME1JTiAhPSAzMikKKyMgIGVycm9yCisjZW5kaWYKKyNpZiAoUjBNQVggIT0gMjg3KQorIyAgZXJyb3IKKyNlbmRpZgorI2lmIChSMEZBU1QgIT0gMjgwKQorIyAgZXJyb3IKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvY29uZmlnMWIuaCBiL2x6by0yLjAzL3NyYy9jb25maWcxYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0NzFmNGYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvY29uZmlnMWIuaApAQCAtMCwwICsxLDE0MCBAQAorLyogY29uZmlnMWIuaCAtLSBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPMUIgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GSUcxQl9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzFCX0gKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzFiLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBhbGdvcml0aG0gY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBydW4gYml0cyAoNCAtIDUpIC0gdGhlIGNvbXByZXNzb3IgYW5kIHRoZSBkZWNvbXByZXNzb3IKKyAqIG11c3QgdXNlIHRoZSBzYW1lIHZhbHVlLiAqLworI2lmICFkZWZpbmVkKFJCSVRTKQorIyAgZGVmaW5lIFJCSVRTICAgICA1CisjZW5kaWYKKworLyogZGljdGlvbmFyeSBkZXB0aCAoMCAtIDYpIC0gdGhpcyBvbmx5IGFmZmVjdHMgdGhlIGNvbXByZXNzb3IuCisgKiAwIGlzIGZhc3Rlc3QsIDYgaXMgYmVzdCBjb21wcmVzc2lvbiByYXRpbyAqLworI2lmICFkZWZpbmVkKEREQklUUykKKyMgIGRlZmluZSBEREJJVFMgICAgMAorI2VuZGlmCisKKy8qIGNvbXByZXNzaW9uIGxldmVsICgxIC0gOSkgLSB0aGlzIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Nvci4KKyAqIDEgaXMgZmFzdGVzdCwgOSBpcyBiZXN0IGNvbXByZXNzaW9uIHJhdGlvICovCisjaWYgIWRlZmluZWQoQ0xFVkVMKQorIyAgZGVmaW5lIENMRVZFTCAgICAxICAgICAgICAgICAvKiBmYXN0ZXN0IGJ5IGRlZmF1bHQgKi8KKyNlbmRpZgorCisKKy8qIGNoZWNrIGNvbmZpZ3VyYXRpb24gKi8KKyNpZiAoUkJJVFMgPCA0IHx8IFJCSVRTID4gNSkKKyMgIGVycm9yICJpbnZhbGlkIFJCSVRTIgorI2VuZGlmCisjaWYgKEREQklUUyA8IDAgfHwgRERCSVRTID4gNikKKyMgIGVycm9yICJpbnZhbGlkIEREQklUUyIKKyNlbmRpZgorI2lmIChDTEVWRUwgPCAxIHx8IENMRVZFTCA+IDkpCisjICBlcnJvciAiaW52YWxpZCBDTEVWRUwiCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogYWRkIGEgc3BlY2lhbCBjb2RlIHNvIHRoYXQgdGhlIGRlY29tcHJlc3NvciBjYW4gZGV0ZWN0IHRoZQorICogZW5kIG9mIHRoZSBjb21wcmVzc2VkIGRhdGEgYmxvY2sgKG92ZXJoZWFkIGlzIDMgYnl0ZXMgcGVyIGJsb2NrKSAqLworI2RlZmluZSBMWk9fRU9GX0NPREUKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGFsZ29yaXRobSBpbnRlcm5hbCBjb25maWd1cmF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGNob29zZSB0aGUgaGFzaGluZyBzdHJhdGVneSAqLworI2lmbmRlZiBMWk9fSEFTSAorI2RlZmluZSBMWk9fSEFTSCAgICAgICAgTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0EKKyNlbmRpZgorCisvKiBjb25maWcgKi8KKyNkZWZpbmUgUl9CSVRTICAgICAgICAgIFJCSVRTCisjZGVmaW5lIEREX0JJVFMgICAgICAgICBEREJJVFMKKyNpZm5kZWYgRF9CSVRTCisjZGVmaW5lIERfQklUUyAgICAgICAgICAxNAorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb2xsZWN0IHN0YXRpc3RpY3MgKi8KKyNpZiAwICYmICFkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorIyAgZGVmaW5lIExaT19DT0xMRUNUX1NUQVRTCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJsem8xYl9kZS5oIgorI2luY2x1ZGUgInN0YXRzMWIuaCIKKworI2luY2x1ZGUgImx6bzFiX2NjLmgiCisKKworI2VuZGlmIC8qIGFscmVhZHkgaW5jbHVkZWQgKi8KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9jb25maWcxYy5oIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThkNTY2ZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9jb25maWcxYy5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKiBjb25maWcxYy5oIC0tIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMWk8xQyBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaWZuZGVmIF9fTFpPX0NPTkZJRzFDX0gKKyNkZWZpbmUgX19MWk9fQ09ORklHMUNfSAorCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMWMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGFsZ29yaXRobSBjb25maWd1cmF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHJ1biBiaXRzICg0IC0gNSkgLSB0aGUgY29tcHJlc3NvciBhbmQgdGhlIGRlY29tcHJlc3NvcgorICogbXVzdCB1c2UgdGhlIHNhbWUgdmFsdWUuICovCisjaWYgIWRlZmluZWQoUkJJVFMpCisjICBkZWZpbmUgUkJJVFMgICAgIDUKKyNlbmRpZgorCisvKiBkaWN0aW9uYXJ5IGRlcHRoICgwIC0gNikgLSB0aGlzIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Nvci4KKyAqIDAgaXMgZmFzdGVzdCwgNiBpcyBiZXN0IGNvbXByZXNzaW9uIHJhdGlvICovCisjaWYgIWRlZmluZWQoRERCSVRTKQorIyAgZGVmaW5lIEREQklUUyAgICAwCisjZW5kaWYKKworLyogY29tcHJlc3Npb24gbGV2ZWwgKDEgLSA5KSAtIHRoaXMgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc29yLgorICogMSBpcyBmYXN0ZXN0LCA5IGlzIGJlc3QgY29tcHJlc3Npb24gcmF0aW8gKi8KKyNpZiAhZGVmaW5lZChDTEVWRUwpCisjICBkZWZpbmUgQ0xFVkVMICAgIDEgICAgICAgICAgIC8qIGZhc3Rlc3QgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKworLyogY2hlY2sgY29uZmlndXJhdGlvbiAqLworI2lmIChSQklUUyA8IDQgfHwgUkJJVFMgPiA1KQorIyAgZXJyb3IgImludmFsaWQgUkJJVFMiCisjZW5kaWYKKyNpZiAoRERCSVRTIDwgMCB8fCBEREJJVFMgPiA2KQorIyAgZXJyb3IgImludmFsaWQgRERCSVRTIgorI2VuZGlmCisjaWYgKENMRVZFTCA8IDEgfHwgQ0xFVkVMID4gOSkKKyMgIGVycm9yICJpbnZhbGlkIENMRVZFTCIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gaW50ZXJuYWwgY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBhZGQgYSBzcGVjaWFsIGNvZGUgc28gdGhhdCB0aGUgZGVjb21wcmVzc29yIGNhbiBkZXRlY3QgdGhlCisgKiBlbmQgb2YgdGhlIGNvbXByZXNzZWQgZGF0YSBibG9jayAob3ZlcmhlYWQgaXMgMyBieXRlcyBwZXIgYmxvY2spICovCisjZGVmaW5lIExaT19FT0ZfQ09ERQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gYWxnb3JpdGhtIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogY2hvb3NlIHRoZSBoYXNoaW5nIHN0cmF0ZWd5ICovCisjaWZuZGVmIExaT19IQVNICisjZGVmaW5lIExaT19IQVNIICAgICAgICBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQQorI2VuZGlmCisKKy8qIGNvbmZpZyAqLworI2RlZmluZSBSX0JJVFMgICAgICAgICAgUkJJVFMKKyNkZWZpbmUgRERfQklUUyAgICAgICAgIEREQklUUworI2lmbmRlZiBEX0JJVFMKKyNkZWZpbmUgRF9CSVRTICAgICAgICAgIDE0CisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG9wdGltaXphdGlvbiBhbmQgZGVidWdnaW5nCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIENvbGxlY3Qgc3RhdGlzdGljcyAqLworI2lmIDAgJiYgIWRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisjICBkZWZpbmUgTFpPX0NPTExFQ1RfU1RBVFMKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZ29vZCBwYXJhbWV0ZXJzIHdoZW4gdXNpbmcgYSBibG9ja3NpemUgb2YgOGtCICovCisjZGVmaW5lIE0zT19CSVRTICAgICAgICA2CisjdW5kZWYgTFpPX0RFVEVSTUlOSVNUSUMKKworCisjaW5jbHVkZSAibHpvMWJfZGUuaCIKKyNpbmNsdWRlICJzdGF0czFjLmgiCisKKyNpbmNsdWRlICJsem8xY19jYy5oIgorCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvY29uZmlnMWYuaCBiL2x6by0yLjAzL3NyYy9jb25maWcxZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNGQ0YzEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvY29uZmlnMWYuaApAQCAtMCwwICsxLDk3IEBACisvKiBjb25maWcxZi5oIC0tIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBMWk8xRiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaWZuZGVmIF9fTFpPX0NPTkZJRzFGX0gKKyNkZWZpbmUgX19MWk9fQ09ORklHMUZfSAorCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMWYuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTFpPX0VPRl9DT0RFCisjdW5kZWYgTFpPX0RFVEVSTUlOSVNUSUMKKworI2RlZmluZSBNMl9NQVhfT0ZGU0VUICAgMHgwODAwCisjZGVmaW5lIE0zX01BWF9PRkZTRVQgICAweDNmZmYKKworI2RlZmluZSBNMl9NSU5fTEVOICAgICAgMworI2RlZmluZSBNMl9NQVhfTEVOICAgICAgOAorI2RlZmluZSBNM19NSU5fTEVOICAgICAgMworI2RlZmluZSBNM19NQVhfTEVOICAgICAgMzMKKworI2RlZmluZSBNM19NQVJLRVIgICAgICAgMjI0CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIE1JTl9MT09LQUhFQUQKKyNkZWZpbmUgTUlOX0xPT0tBSEVBRCAgICAgICAoTTJfTUFYX0xFTiArIDEpCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX05FRURfRElDVF9IKQorCisjaWZuZGVmIExaT19IQVNICisjZGVmaW5lIExaT19IQVNIICAgICAgICAgICAgTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0EKKyNlbmRpZgorI2RlZmluZSBETF9NSU5fTEVOICAgICAgICAgIE0yX01JTl9MRU4KKyNpbmNsdWRlICJsem9fZGljdC5oIgorCisjZW5kaWYKKworCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvY29uZmlnMXguaCBiL2x6by0yLjAzL3NyYy9jb25maWcxeC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMjNiZjMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvY29uZmlnMXguaApAQCAtMCwwICsxLDExOCBAQAorLyogY29uZmlnMXguaCAtLSBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPMVggYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GSUcxWF9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzFYX0gKKworI2lmICFkZWZpbmVkKExaTzFYKSAmJiAhZGVmaW5lZChMWk8xWSkgJiYgIWRlZmluZWQoTFpPMVopCisjICBkZWZpbmUgTFpPMVgKKyNlbmRpZgorCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorI2luY2x1ZGUgImx6by9sem8xeC5oIgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19FT0ZfQ09ERQorI3VuZGVmIExaT19ERVRFUk1JTklTVElDCisKKyNkZWZpbmUgTTFfTUFYX09GRlNFVCAgIDB4MDQwMAorI2lmbmRlZiBNMl9NQVhfT0ZGU0VUCisjZGVmaW5lIE0yX01BWF9PRkZTRVQgICAweDA4MDAKKyNlbmRpZgorI2RlZmluZSBNM19NQVhfT0ZGU0VUICAgMHg0MDAwCisjZGVmaW5lIE00X01BWF9PRkZTRVQgICAweGJmZmYKKworI2RlZmluZSBNWF9NQVhfT0ZGU0VUICAgKE0xX01BWF9PRkZTRVQgKyBNMl9NQVhfT0ZGU0VUKQorCisjZGVmaW5lIE0xX01JTl9MRU4gICAgICAyCisjZGVmaW5lIE0xX01BWF9MRU4gICAgICAyCisjZGVmaW5lIE0yX01JTl9MRU4gICAgICAzCisjaWZuZGVmIE0yX01BWF9MRU4KKyNkZWZpbmUgTTJfTUFYX0xFTiAgICAgIDgKKyNlbmRpZgorI2RlZmluZSBNM19NSU5fTEVOICAgICAgMworI2RlZmluZSBNM19NQVhfTEVOICAgICAgMzMKKyNkZWZpbmUgTTRfTUlOX0xFTiAgICAgIDMKKyNkZWZpbmUgTTRfTUFYX0xFTiAgICAgIDkKKworI2RlZmluZSBNMV9NQVJLRVIgICAgICAgMAorI2RlZmluZSBNMl9NQVJLRVIgICAgICAgNjQKKyNkZWZpbmUgTTNfTUFSS0VSICAgICAgIDMyCisjZGVmaW5lIE00X01BUktFUiAgICAgICAxNgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmbmRlZiBNSU5fTE9PS0FIRUFECisjZGVmaW5lIE1JTl9MT09LQUhFQUQgICAgICAgKE0yX01BWF9MRU4gKyAxKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19ORUVEX0RJQ1RfSCkKKworI2lmbmRlZiBMWk9fSEFTSAorI2RlZmluZSBMWk9fSEFTSCAgICAgICAgICAgIExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9CCisjZW5kaWYKKyNkZWZpbmUgRExfTUlOX0xFTiAgICAgICAgICBNMl9NSU5fTEVOCisjaW5jbHVkZSAibHpvX2RpY3QuaCIKKworI2VuZGlmCisKKworCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2NvbmZpZzF5LmggYi9sem8tMi4wMy9zcmMvY29uZmlnMXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQ1NDZhCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzF5LmgKQEAgLTAsMCArMSw2NiBAQAorLyogY29uZmlnMXkuaCAtLSBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPMVkgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GSUcxWV9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzFZX0gKKworI2lmICFkZWZpbmVkKExaTzFZKQorIyAgZGVmaW5lIExaTzFZCisjZW5kaWYKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzF5LmgiCisKKyNkZWZpbmUgTTJfTUFYX0xFTiAgICAgIDE0CisjZGVmaW5lIE0yX01BWF9PRkZTRVQgICAweDA0MDAKKyNpbmNsdWRlICJjb25maWcxeC5oIgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2NvbmZpZzF6LmggYi9sem8tMi4wMy9zcmMvY29uZmlnMXouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NzYyYWYzCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2NvbmZpZzF6LmgKQEAgLTAsMCArMSw2NSBAQAorLyogY29uZmlnMXouaCAtLSBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPMVogYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GSUcxWl9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzFaX0gKKworI2lmICFkZWZpbmVkKExaTzFaKQorIyAgZGVmaW5lIExaTzFaCisjZW5kaWYKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzF6LmgiCisKKyNkZWZpbmUgTTJfTUFYX09GRlNFVCAgIDB4MDcwMAorI2luY2x1ZGUgImNvbmZpZzF4LmgiCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvY29uZmlnMmEuaCBiL2x6by0yLjAzL3NyYy9jb25maWcyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhMzhjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvY29uZmlnMmEuaApAQCAtMCwwICsxLDE1NSBAQAorLyogY29uZmlnMmEuaCAtLSBjb25maWd1cmF0aW9uIGZvciB0aGUgTFpPMkEgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GSUcyQV9ICisjZGVmaW5lIF9fTFpPX0NPTkZJRzJBX0gKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisjaW5jbHVkZSAibHpvL2x6bzJhLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBhbGdvcml0aG0gY29uZmlndXJhdGlvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBkaWN0aW9uYXJ5IGRlcHRoICgwIC0gNikgLSB0aGlzIG9ubHkgYWZmZWN0cyB0aGUgY29tcHJlc3Nvci4KKyAqIDAgaXMgZmFzdGVzdCwgNiBpcyBiZXN0IGNvbXByZXNzaW9uIHJhdGlvICovCisjaWYgIWRlZmluZWQoRERCSVRTKQorIyAgZGVmaW5lIEREQklUUyAgICAwCisjZW5kaWYKKworLyogY29tcHJlc3Npb24gbGV2ZWwgKDEgLSA5KSAtIHRoaXMgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc29yLgorICogMSBpcyBmYXN0ZXN0LCA5IGlzIGJlc3QgY29tcHJlc3Npb24gcmF0aW8gKi8KKyNpZiAhZGVmaW5lZChDTEVWRUwpCisjICBkZWZpbmUgQ0xFVkVMICAgIDEgICAgICAgICAgIC8qIGZhc3Rlc3QgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKworLyogY2hlY2sgY29uZmlndXJhdGlvbiAqLworI2lmIChEREJJVFMgPCAwIHx8IEREQklUUyA+IDYpCisjICBlcnJvciAiaW52YWxpZCBEREJJVFMiCisjZW5kaWYKKyNpZiAoQ0xFVkVMIDwgMSB8fCBDTEVWRUwgPiA5KQorIyAgZXJyb3IgImludmFsaWQgQ0xFVkVMIgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBpbnRlcm5hbCBjb25maWd1cmF0aW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAxCisjZGVmaW5lIE4gICAgICAgICAgICA4MTkxICAgICAgICAgICAvKiBzaXplIG9mIHJpbmcgYnVmZmVyICovCisjZWxzZQorI2RlZmluZSBOICAgICAgICAgICAxNjM4MyAgICAgICAgICAgLyogc2l6ZSBvZiByaW5nIGJ1ZmZlciAqLworI2VuZGlmCisKKyNkZWZpbmUgTTFfTUlOX0xFTiAgMgorI2RlZmluZSBNMV9NQVhfTEVOICA1CisjZGVmaW5lIE0yX01JTl9MRU4gIDMKKyNkZWZpbmUgTTNfTUlOX0xFTiAgMworCisKKy8qIGFkZCBhIHNwZWNpYWwgY29kZSBzbyB0aGF0IHRoZSBkZWNvbXByZXNzb3IgY2FuIGRldGVjdCB0aGUKKyAqIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhIGJsb2NrIChvdmVyaGVhZCBpcyAzIGJ5dGVzIHBlciBibG9jaykgKi8KKyNkZWZpbmUgTFpPX0VPRl9DT0RFCisKKyN1bmRlZiBMWk9fREVURVJNSU5JU1RJQworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gYWxnb3JpdGhtIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogY2hvb3NlIHRoZSBoYXNoaW5nIHN0cmF0ZWd5ICovCisjaWZuZGVmIExaT19IQVNICisjZGVmaW5lIExaT19IQVNIICAgICAgICBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQQorI2VuZGlmCisKKy8qIGNvbmZpZyAqLworI2RlZmluZSBERF9CSVRTICAgICAgICAgRERCSVRTCisjaWZuZGVmIERfQklUUworI2RlZmluZSBEX0JJVFMgICAgICAgICAgMTQKKyNlbmRpZgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBDb2xsZWN0IHN0YXRpc3RpY3MgKi8KKyNpZiAwICYmICFkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorIyAgZGVmaW5lIExaT19DT0xMRUNUX1NUQVRTCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIGdldCBiaXRzICovCisjZGVmaW5lIF9ORUVEQklUUyBcCisgICAgeyBfTkVFREJZVEU7IGIgfD0gKChsem9fdWludDMyKSBfTkVYVEJZVEUpIDw8IGs7IGsgKz0gODsgYXNzZXJ0KGsgPD0gMzIpOyB9CisjZGVmaW5lIE5FRURCSVRTKGopICAgICB7IGFzc2VydCgoaikgPCA4KTsgaWYgKGsgPCAoaikpIF9ORUVEQklUUyB9CisKKy8qIHNldCBiaXRzICovCisjZGVmaW5lIFNFVEJJVFMoaix4KSAgICB7IGIgfD0gKHgpIDw8IGs7IGsgKz0gKGopOyBhc3NlcnQoayA8PSAzMik7IH0KKworLyogYWNjZXNzIGJpdHMgKi8KKyNkZWZpbmUgTUFTS0JJVFMoaikgICAgIChiICYgKCgoKGx6b191aW50MzIpMSA8PCAoaikpIC0gMSkpKQorCisvKiBkcm9wIGJpdHMgKi8KKyNkZWZpbmUgRFVNUEJJVFMoaikgICAgIHsgYXNzZXJ0KGsgPj0gaik7IGIgPj49IChqKTsgayAtPSAoaik7IH0KKworCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMS5jIGIvbHpvLTIuMDMvc3JjL2x6bzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTIzMTY0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzEuYwpAQCAtMCwwICsxLDYzNSBAQAorLyogbHpvMS5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMS5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGhlIG5leHQgdHdvIGRlZmluZXMgY2FuIGJlIGNoYW5nZWQgdG8gY3VzdG9taXplIExaTzEuCisvLyBUaGUgZGVmYXVsdCB2ZXJzaW9uIGlzIExaTzEtNS8xLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBydW4gYml0cyAoMyAtIDUpIC0gdGhlIGNvbXByZXNzb3IgYW5kIHRoZSBkZWNvbXByZXNzb3IKKyAqIG11c3QgdXNlIHRoZSBzYW1lIHZhbHVlLiAqLworI2lmICFkZWZpbmVkKFJCSVRTKQorIyAgZGVmaW5lIFJCSVRTICAgICA1CisjZW5kaWYKKworLyogY29tcHJlc3Npb24gbGV2ZWwgKDEgLSA5KSAtIHRoaXMgb25seSBhZmZlY3RzIHRoZSBjb21wcmVzc29yLgorICogMSBpcyBmYXN0ZXN0LCA5IGlzIGJlc3QgY29tcHJlc3Npb24gcmF0aW8gKi8KKyNpZiAhZGVmaW5lZChDTEVWRUwpCisjICBkZWZpbmUgQ0xFVkVMICAgIDEgICAgICAgICAgIC8qIGZhc3Rlc3QgYnkgZGVmYXVsdCAqLworI2VuZGlmCisKKworLyogY2hlY2sgY29uZmlndXJhdGlvbiAqLworI2lmIChSQklUUyA8IDMgfHwgUkJJVFMgPiA1KQorIyAgZXJyb3IgImludmFsaWQgUkJJVFMiCisjZW5kaWYKKyNpZiAoQ0xFVkVMIDwgMSB8fCBDTEVWRUwgPiA5KQorIyAgZXJyb3IgImludmFsaWQgQ0xFVkVMIgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBZb3Ugc2hvdWxkIG5vdCBoYXZlIHRvIGNoYW5nZSBhbnl0aGluZyBiZWxvdyB0aGlzIGxpbmUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgICAgIEZvcm1hdCBvZiB0aGUgbWFya2VyIGJ5dGUKKworCisgICAgIDc2NTQzMjEwCisgICAgIC0tLS0tLS0tCisgICAgIDAwMDAwMDAwICAgYSBsb25nIHJ1biAoYSAnUjAnIHJ1bikgLSB0aGVyZSBhcmUgc2hvcnQgYW5kIGxvbmcgUjAgcnVucworICAgICAwMDBycnJyciAgIGEgc2hvcnQgcnVuIHdpdGggbGVuIHIKKyAgICAgbW1tb29vb28gICBhIHNob3J0IG1hdGNoIChsZW4gPSAyK20sIG8gPSBvZmZzZXQgbG93IGJpdHMpCisgICAgIDExMW9vb29vICAgYSBsb25nIG1hdGNoIChvID0gb2Zmc2V0IGxvdyBiaXRzKQorKi8KKworCisjZGVmaW5lIFJTSVpFICAgKDEgPDwgUkJJVFMpCisjZGVmaW5lIFJNQVNLICAgKFJTSVpFIC0gMSkKKworI2RlZmluZSBPQklUUyAgIFJCSVRTICAgICAgICAgICAgICAgLyogb2Zmc2V0IGFuZCBydW4tbGVuZ3RoIHVzZSBzYW1lIGJpdHMgKi8KKyNkZWZpbmUgT1NJWkUgICAoMSA8PCBPQklUUykKKyNkZWZpbmUgT01BU0sgICAoT1NJWkUgLSAxKQorCisjZGVmaW5lIE1CSVRTICAgKDggLSBPQklUUykKKyNkZWZpbmUgTVNJWkUgICAoMSA8PCBNQklUUykKKyNkZWZpbmUgTU1BU0sgICAoTVNJWkUgLSAxKQorCisKKy8qIHNhbml0eSBjaGVja3MgKi8KKyNpZiAoT0JJVFMgPCAzIHx8IE9CSVRTID4gNSkKKyMgIGVycm9yICJpbnZhbGlkIE9CSVRTIgorI2VuZGlmCisjaWYgKE1CSVRTIDwgMyB8fCBNQklUUyA+IDUpCisjICBlcnJvciAiaW52YWxpZCBNQklUUyIKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gc29tZSBtYWNyb3MgdG8gaW1wcm92ZSByZWFkYWJpbGl0eQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBNaW5pbXVtIGxlbiBvZiBhIG1hdGNoICovCisjZGVmaW5lIE1JTl9NQVRDSCAgICAgICAgICAgMworI2RlZmluZSBUSFJFU0hPTEQgICAgICAgICAgIChNSU5fTUFUQ0ggLSAxKQorCisvKiBNaW5pbXVtIGxlbiBvZiBtYXRjaCBjb2RlZCBpbiAyIGJ5dGVzICovCisjZGVmaW5lIE1JTl9NQVRDSF9TSE9SVCAgICAgTUlOX01BVENICisKKy8qIE1heGltdW0gbGVuIG9mIG1hdGNoIGNvZGVkIGluIDIgYnl0ZXMgKi8KKyNkZWZpbmUgTUFYX01BVENIX1NIT1JUICAgICAoVEhSRVNIT0xEICsgKE1TSVpFIC0gMikpCisvKiBNU0laRSAtIDI6IDAgaXMgdXNlZCB0byBpbmRpY2F0ZSBydW5zLAorICogICAgICAgICAgICBNU0laRS0xIGlzIHVzZWQgdG8gaW5kaWNhdGUgYSBsb25nIG1hdGNoICovCisKKy8qIE1pbmltdW0gbGVuIG9mIG1hdGNoIGNvZGVkIGluIDMgYnl0ZXMgKi8KKyNkZWZpbmUgTUlOX01BVENIX0xPTkcgICAgICAoTUFYX01BVENIX1NIT1JUICsgMSkKKworLyogTWF4aW11bSBsZW4gb2YgbWF0Y2ggY29kZWQgaW4gMyBieXRlcyAqLworI2RlZmluZSBNQVhfTUFUQ0hfTE9ORyAgICAgIChNSU5fTUFUQ0hfTE9ORyArIDI1NSkKKworLyogTWF4aW11bSBvZmZzZXQgb2YgYSBtYXRjaCAqLworI2RlZmluZSBNQVhfT0ZGU0VUICAgICAgICAgICgxIDw8ICg4ICsgT0JJVFMpKQorCisKKy8qCisKK1JCSVRTIHwgTUJJVFMgIE1JTiAgVEhSLiAgTVNJWkUgIE1BWFMgIE1JTkwgIE1BWEwgICBNQVhPICBSME1BWCBSMEZBU1QKKz09PT09PSs9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgMyAgIHwgICA1ICAgICAgMyAgICAyICAgICAzMiAgICAzMiAgICAzMyAgICAyODggICAyMDQ4ICAgIDI2MyAgIDI1NgorICA0ICAgfCAgIDQgICAgICAzICAgIDIgICAgIDE2ICAgIDE2ICAgIDE3ICAgIDI3MiAgIDQwOTYgICAgMjcxICAgMjY0CisgIDUgICB8ICAgMyAgICAgIDMgICAgMiAgICAgIDggICAgIDggICAgIDkgICAgMjY0ICAgODE5MiAgICAyODcgICAyODAKKworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBpbnRlcm5hbCBjb25maWd1cmF0aW9uCisvLyBhbGwgb2YgdGhlc2UgYWZmZWN0IGNvbXByZXNzaW9uIG9ubHkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogY2hvb3NlIHRoZSBoYXNoaW5nIHN0cmF0ZWd5ICovCisjaWZuZGVmIExaT19IQVNICisjZGVmaW5lIExaT19IQVNIICAgIExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9BCisjZW5kaWYKKyNkZWZpbmUgRF9JTkRFWDEoZCxwKSAgICAgICBkID0gRE0oRE1VTCgweDIxLERYMihwLDUsNSkpID4+IDUpCisjZGVmaW5lIERfSU5ERVgyKGQscCkgICAgICAgZCA9IGQgXiBEX01BU0sKKworI2RlZmluZSBEQklUUyAgICAgICAoOCArIFJCSVRTKQorI2luY2x1ZGUgImx6b19kaWN0LmgiCisjZGVmaW5lIERWQUxfTEVOICAgIERWQUxfTE9PS0FIRUFECisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBnZXQgYWxnb3JpdGhtIGluZm8sIHJldHVybiBtZW1vcnkgcmVxdWlyZWQgZm9yIGNvbXByZXNzaW9uCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19FWFRFUk4obHpvX3VpbnQpIGx6bzFfaW5mbyAoIGludCAqcmJpdHMsIGludCAqY2xldmVsICk7CisKK0xaT19QVUJMSUMobHpvX3VpbnQpCitsem8xX2luZm8gKCBpbnQgKnJiaXRzLCBpbnQgKmNsZXZlbCApCit7CisgICAgaWYgKHJiaXRzKQorICAgICAgICAqcmJpdHMgPSBSQklUUzsKKyAgICBpZiAoY2xldmVsKQorICAgICAgICAqY2xldmVsID0gQ0xFVkVMOworICAgIHJldHVybiBEX1NJWkUgKiBsem9fc2l6ZW9mKGx6b19ieXRlcCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkZWNvZGUgYSBSMCBsaXRlcmFsIHJ1biAoYSBsb25nIHJ1bikKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBSME1JTiAgIChSU0laRSkgICAgICAgICAgICAgLyogTWluaW11bSBsZW4gb2YgUjAgcnVuIG9mIGxpdGVyYWxzICovCisjZGVmaW5lIFIwTUFYICAgKFIwTUlOICsgMjU1KSAgICAgICAvKiBNYXhpbXVtIGxlbiBvZiBSMCBydW4gb2YgbGl0ZXJhbHMgKi8KKyNkZWZpbmUgUjBGQVNUICAoUjBNQVggJiB+N3UpICAgICAgIC8qIFIwTUFYIGFsaWduZWQgdG8gOCBieXRlIGJvdW5kYXJ5ICovCisKKyNpZiAoUjBNQVggLSBSMEZBU1QgIT0gNykgfHwgKChSMEZBU1QgJiA3KSAhPSAwKQorIyAgZXJyb3IgInNvbWV0aGluZyB3ZW50IHdyb25nIgorI2VuZGlmCisKKy8qIDcgc3BlY2lhbCBjb2RlcyBmcm9tIFIwRkFTVCsxIC4uIFIwTUFYCisgKiB0aGVzZSBjb2RlcyBtZWFuIGxvbmcgUjAgcnVucyB3aXRoIGxlbmd0aHMKKyAqIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4ICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBMWk8xIGRlY29tcHJlc3MgYSBibG9jayBvZiBkYXRhLgorLy8KKy8vIENvdWxkIGJlIGVhc2lseSB0cmFuc2xhdGVkIGludG8gYXNzZW1ibHkgY29kZS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitsem8xX2RlY29tcHJlc3MgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBsem9fYnl0ZXAgb3A7CisgICAgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpcF9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBsem9fdWludCB0OworCisgICAgTFpPX1VOVVNFRCh3cmttZW0pOworCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKyAgICB3aGlsZSAoaXAgPCBpcF9lbmQpCisgICAgeworICAgICAgICB0ID0gKmlwKys7ICAvKiBnZXQgbWFya2VyICovCisKKyAgICAgICAgaWYgKHQgPCBSME1JTikgICAgICAgICAgLyogYSBsaXRlcmFsIHJ1biAqLworICAgICAgICB7CisgICAgICAgICAgICBpZiAodCA9PSAwKSAgICAgICAgICAgICAvKiBhIFIwIGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCA9ICppcCsrOworICAgICAgICAgICAgICAgIGlmICh0ID49IFIwRkFTVCAtIFIwTUlOKSAgICAgICAgICAgIC8qIGEgbG9uZyBSMCBydW4gKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHQgLT0gUjBGQVNUIC0gUjBNSU47CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gUjBGQVNUOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMjU2dSA8PCAoKHVuc2lnbmVkKSB0KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZWxwIHRoZSBvcHRpbWl6ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IHR0ID0gMjU2OworICAgICAgICAgICAgICAgICAgICAgICAgZG8gdHQgPDw9IDE7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0dDsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIE1FTUNQWThfRFMob3AsaXAsdCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ICs9IFIwTUlOOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTUVNQ1BZX0RTKG9wLGlwLHQpOworICAgICAgICB9CisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIGEgbWF0Y2ggKi8KKyAgICAgICAgeworICAgICAgICAgICAgbHpvX3VpbnQgdHQ7CisgICAgICAgICAgICAvKiBnZXQgbWF0Y2ggb2Zmc2V0ICovCisgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgbV9wb3MgPSBvcCAtIDE7CisgICAgICAgICAgICBtX3BvcyAtPSAobHpvX3VpbnQpKHQgJiBPTUFTSykgfCAoKChsem9fdWludCkgKmlwKyspIDw8IE9CSVRTKTsKKworICAgICAgICAgICAgLyogZ2V0IG1hdGNoIGxlbiAqLworICAgICAgICAgICAgaWYgKHQgPj0gKChNU0laRSAtIDEpIDw8IE9CSVRTKSkgICAgICAgICAgICAgICAgLyogYWxsIG0tYml0cyBzZXQgKi8KKyAgICAgICAgICAgICAgICB0dCA9IChNSU5fTUFUQ0hfTE9ORyAtIFRIUkVTSE9MRCkgKyAqaXArKzsgIC8qIGEgbG9uZyBtYXRjaCAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHR0ID0gdCA+PiBPQklUUzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBzaG9ydCBtYXRjaCAqLworCisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPj0gb3V0KTsKKyAgICAgICAgICAgIGFzc2VydChtX3BvcyA8ICBvcCk7CisgICAgICAgICAgICAvKiBhIGhhbGYgdW5yb2xsZWQgbG9vcCAqLworICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsKKyAgICAgICAgICAgICpvcCsrID0gKm1fcG9zKys7CisgICAgICAgICAgICBNRU1DUFlfRFMob3AsbV9wb3MsdHQpOworICAgICAgICB9CisgICAgfQorCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKworICAgIC8qIHRoZSBuZXh0IGxpbmUgaXMgdGhlIG9ubHkgY2hlY2sgaW4gdGhlIGRlY29tcHJlc3NvciAhICovCisgICAgcmV0dXJuIChpcCA9PSBpcF9lbmQgPyBMWk9fRV9PSyA6CisgICAgICAgICAgIChpcCA8IGlwX2VuZCAgPyBMWk9fRV9JTlBVVF9OT1RfQ09OU1VNRUQgOiBMWk9fRV9JTlBVVF9PVkVSUlVOKSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb2RlIGEgbGl0ZXJhbCBydW4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljCisjaWYgTFpPX0FSQ0hfQVZSCitfX2x6b19ub2lubGluZQorI2VuZGlmCitsem9fYnl0ZXAKK3N0b3JlX3J1bihsem9fYnl0ZXAgb3AsIGNvbnN0IGx6b19ieXRlcCBpaSwgbHpvX3VpbnQgcl9sZW4pCit7CisgICAgYXNzZXJ0KHJfbGVuID4gMCk7CisKKyAgICAvKiBjb2RlIGEgbG9uZyBSMCBydW4gKi8KKyAgICBpZiAocl9sZW4gPj0gNTEyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcl9iaXRzID0gNzsgICAgICAgIC8qIDI1NiA8PCA3ID09IDMyNzY4ICovCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHdoaWxlIChyX2xlbiA+PSAoMjU2dSA8PCByX2JpdHMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJfbGVuIC09ICgyNTZ1IDw8IHJfYml0cyk7CisgICAgICAgICAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IExaT19CWVRFKChSMEZBU1QgLSBSME1JTikgKyByX2JpdHMpOworICAgICAgICAgICAgICAgIE1FTUNQWThfRFMob3AsIGlpLCAoMjU2dSA8PCByX2JpdHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoLS1yX2JpdHMgPiAwKTsKKyAgICB9CisgICAgd2hpbGUgKHJfbGVuID49IFIwRkFTVCkKKyAgICB7CisgICAgICAgIHJfbGVuIC09IFIwRkFTVDsKKyAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IFIwRkFTVCAtIFIwTUlOOworICAgICAgICBNRU1DUFk4X0RTKG9wLCBpaSwgUjBGQVNUKTsKKyAgICB9CisKKyAgICBpZiAocl9sZW4gPj0gUjBNSU4pCisgICAgeworICAgICAgICAvKiBjb2RlIGEgc2hvcnQgUjAgcnVuICovCisgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSBMWk9fQllURShyX2xlbiAtIFIwTUlOKTsKKyAgICAgICAgTUVNQ1BZX0RTKG9wLCBpaSwgcl9sZW4pOworICAgIH0KKyAgICBlbHNlIGlmIChyX2xlbiA+IDApCisgICAgeworICAgICAgICAvKiBjb2RlIGEgJ25vcm1hbCcgcnVuICovCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUocl9sZW4pOworICAgICAgICBNRU1DUFlfRFMob3AsIGlpLCByX2xlbik7CisgICAgfQorCisgICAgYXNzZXJ0KHJfbGVuID09IDApOworICAgIHJldHVybiBvcDsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTFpPMSBjb21wcmVzcyBhIGJsb2NrIG9mIGRhdGEuCisvLworLy8gQ291bGQgYmUgdHJhbnNsYXRlZCBpbnRvIGFzc2VtYmx5IGNvZGUgd2l0aG91dCB0b28gbXVjaCBlZmZvcnQuCisvLworLy8gSSBhcG9sb2dpemUgZm9yIHRoZSBzcGFnaGV0dGkgY29kZSwgYnV0IGl0IHJlYWxseSBoZWxwcyB0aGUgb3B0aW1pemVyLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Citkb19jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBjb25zdCBsem9fYnl0ZXAgaXA7CisjaWYgZGVmaW5lZChfX0xaT19IQVNIX0lOQ1JFTUVOVEFMKQorICAgIGx6b194aW50IGR2OworI2VuZGlmCisgICAgbHpvX2J5dGVwIG9wOworICAgIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4raW5fbGVuIC0gRFZBTF9MRU4gLSBNSU5fTUFUQ0hfTE9ORzsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaW5fZW5kID0gaW4raW5fbGVuIC0gRFZBTF9MRU47CisgICAgY29uc3QgbHpvX2J5dGVwIGlpOworICAgIGx6b19kaWN0X3AgY29uc3QgZGljdCA9IChsem9fZGljdF9wKSB3cmttZW07CisKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgY29uc3QgbHpvX2J5dGVwIG1fcG9zX3NhdjsKKyNlbmRpZgorCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKyAgICBpaSA9IGlwOyAgICAgICAgICAgICAgICAvKiBwb2ludCB0byBzdGFydCBvZiBsaXRlcmFsIHJ1biAqLworICAgIGlmIChpbl9sZW4gPD0gTUlOX01BVENIX0xPTkcgKyBEVkFMX0xFTiArIDEpCisgICAgICAgIGdvdG8gdGhlX2VuZDsKKworICAgIC8qIGluaXQgZGljdGlvbmFyeSAqLworI2lmIGRlZmluZWQoTFpPX0RFVEVSTUlOSVNUSUMpCisgICAgQlpFUk84X1BUUih3cmttZW0sc2l6ZW9mKGx6b19kaWN0X3QpLERfU0laRSk7CisjZW5kaWYKKworICAgIERWQUxfRklSU1QoZHYsaXApOworICAgIFVQREFURV9EKGRpY3QsMCxkdixpcCxpbik7CisgICAgaXArKzsKKyAgICBEVkFMX05FWFQoZHYsaXApOworCisgICAgZG8geworICAgICAgICBsem9fdWludCBtX29mZjsKKyAgICAgICAgbHpvX3VpbnQgZGluZGV4OworCisgICAgICAgIERJTkRFWDEoZGluZGV4LGlwKTsKKyAgICAgICAgR0lOREVYKG1fcG9zLG1fb2ZmLGRpY3QsZGluZGV4LGluKTsKKyAgICAgICAgaWYgKExaT19DSEVDS19NUE9TKG1fcG9zLG1fb2ZmLGluLGlwLE1BWF9PRkZTRVQpKQorICAgICAgICAgICAgZ290byBsaXRlcmFsOworICAgICAgICBpZiAobV9wb3NbMF0gPT0gaXBbMF0gJiYgbV9wb3NbMV0gPT0gaXBbMV0gJiYgbV9wb3NbMl0gPT0gaXBbMl0pCisgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICBESU5ERVgyKGRpbmRleCxpcCk7CisgICAgICAgIEdJTkRFWChtX3BvcyxtX29mZixkaWN0LGRpbmRleCxpbik7CisgICAgICAgIGlmIChMWk9fQ0hFQ0tfTVBPUyhtX3BvcyxtX29mZixpbixpcCxNQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fcG9zWzBdID09IGlwWzBdICYmIG1fcG9zWzFdID09IGlwWzFdICYmIG1fcG9zWzJdID09IGlwWzJdKQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgZ290byBsaXRlcmFsOworCisKK2xpdGVyYWw6CisgICAgICAgIFVQREFURV9JKGRpY3QsMCxkaW5kZXgsaXAsaW4pOworICAgICAgICBpZiAoKytpcCA+PSBpcF9lbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29udGludWU7CisKK21hdGNoOgorICAgICAgICBVUERBVEVfSShkaWN0LDAsZGluZGV4LGlwLGluKTsKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmIGRlZmluZWQoTFpPX0RJQ1RfVVNFX1BUUikKKyAgICAgICAgbV9wb3Nfc2F2ID0gbV9wb3M7CisjZW5kaWYKKyAgICAgICAgbV9wb3MgKz0gMzsKKyAgICAgICAgeworICAgIC8qIHdlIGhhdmUgZm91bmQgYSBtYXRjaCAob2YgYXQgbGVhc3QgbGVuZ3RoIDMpICovCisjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiAhZGVmaW5lZChMWk9fRElDVF9VU0VfUFRSKQorICAgICAgICAgICAgYXNzZXJ0KChtX3Bvc19zYXYgPSBpcCAtIG1fb2ZmKSA9PSAobV9wb3MgLSAzKSk7CisjZW5kaWYKKyAgICAgICAgICAgIC8qIDEpIHN0b3JlIHRoZSBjdXJyZW50IGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICBpZiAocGQoaXAsaWkpID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsem9fdWludCB0ID0gcGQoaXAsaWkpOworI2lmIDEKKyAgICAgICAgICAgICAgICAvKiBPUFRJTUlaRUQ6IGlubGluZSB0aGUgY29weWluZyBvZiBhIHNob3J0IHJ1biAqLworICAgICAgICAgICAgICAgIGlmICh0IDwgUjBNSU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICAgICAgICAgICAgICBNRU1DUFlfRFMob3AsIGlpLCB0KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIG9wID0gc3RvcmVfcnVuKG9wLGlpLHQpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiAyYSkgY29tcHV0ZSBtYXRjaCBsZW4gKi8KKyAgICAgICAgICAgIGlpID0gaXA7ICAgICAgICAvKiBwb2ludCB0byBzdGFydCBvZiBjdXJyZW50IG1hdGNoICovCisKKyAgICAgICAgICAgIC8qIHdlIGFscmVhZHkgbWF0Y2hlZCBNSU5fTUFUQ0ggYnl0ZXMsCisgICAgICAgICAgICAgKiBtX3BvcyBhbHNvIGFscmVhZHkgYWR2YW5jZWQgTUlOX01BVENIIGJ5dGVzICovCisgICAgICAgICAgICBpcCArPSBNSU5fTUFUQ0g7CisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPCBpcCk7CisKKyAgICAgICAgICAgIC8qIHRyeSB0byBtYXRjaCBhbm90aGVyIE1JTl9NQVRDSF9MT05HIC0gTUlOX01BVENIIGJ5dGVzCisgICAgICAgICAgICAgKiB0byBzZWUgaWYgd2UgZ2V0IGEgbG9uZyBtYXRjaCAqLworCisjZGVmaW5lIFBTICAqbV9wb3MrKyAhPSAqaXArKworCisjaWYgKE1JTl9NQVRDSF9MT05HIC0gTUlOX01BVENIID09IDIpICAgICAgICAgICAgICAgICAgIC8qIE1CSVRTID09IDIgKi8KKyAgICAgICAgICAgIGlmIChQUyB8fCBQUykKKyNlbGlmIChNSU5fTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSCA9PSA2KSAgICAgICAgICAgICAgICAgLyogTUJJVFMgPT0gMyAqLworICAgICAgICAgICAgaWYgKFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTKQorI2VsaWYgKE1JTl9NQVRDSF9MT05HIC0gTUlOX01BVENIID09IDE0KSAgICAgICAgICAgICAgICAvKiBNQklUUyA9PSA0ICovCisgICAgICAgICAgICBpZiAoUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwKKyAgICAgICAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUykKKyNlbGlmIChNSU5fTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSCA9PSAzMCkgICAgICAgICAgICAgICAgLyogTUJJVFMgPT0gNSAqLworICAgICAgICAgICAgaWYgKFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8CisgICAgICAgICAgICAgICAgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwKKyAgICAgICAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fAorICAgICAgICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTKQorI2Vsc2UKKyMgIGVycm9yICJNQklUUyBub3QgeWV0IGltcGxlbWVudGVkIgorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbHpvX3VpbnQgbV9sZW47CisKKyAgICAgICAgICAgIC8qIDJiKSBjb2RlIGEgc2hvcnQgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHBkKGlwLG1fcG9zKSA9PSBtX29mZik7CisgICAgICAgICAgICAgICAgLS1pcDsgICAvKiByYW4gb25lIHRvbyBmYXIsIHBvaW50IGJhY2sgdG8gbm9uLW1hdGNoICovCisgICAgICAgICAgICAgICAgbV9sZW4gPSBwZChpcCwgaWkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTUlOX01BVENIX1NIT1JUKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuIDw9IE1BWF9NQVRDSF9TSE9SVCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX29mZiA+IDApOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9vZmYgPD0gTUFYX09GRlNFVCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChpaS1tX29mZiA9PSBtX3Bvc19zYXYpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChtX3Bvc19zYXYsaWksbV9sZW4pID09IDApOworICAgICAgICAgICAgICAgIC0tbV9vZmY7CisgICAgICAgICAgICAgICAgLyogY29kZSBzaG9ydCBtYXRjaCBsZW4gKyBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSBUSFJFU0hPTEQpIDw8IE9CSVRTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobV9vZmYgJiBPTUFTSykpOworICAgICAgICAgICAgICAgIC8qIGNvZGUgaGlnaCBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gT0JJVFMpOworCisKKyAgICAgICAgICAgIC8qIDJjKSBJbnNlcnQgcGhyYXNlcyAoYmVnaW5uaW5nIHdpdGggaWkrMSkgaW50byB0aGUgZGljdGlvbmFyeS4gKi8KKworI2RlZmluZSBTSSAgICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgREkgICAgICArK2lpOyBEVkFMX05FWFQoZHYsaWkpOyBVUERBVEVfRChkaWN0LDAsZHYsaWksaW4pOworI2RlZmluZSBYSSAgICAgIGFzc2VydChpaSA8IGlwKTsgaWkgPSBpcDsgRFZBTF9GSVJTVChkdiwoaXApKTsKKworI2lmIChDTEVWRUwgPT0gOSkgfHwgKENMRVZFTCA+PSA3ICYmIE1CSVRTIDw9IDQpIHx8IChDTEVWRUwgPj0gNSAmJiBNQklUUyA8PSAzKQorICAgICAgICAgICAgLyogSW5zZXJ0IHRoZSB3aG9sZSBtYXRjaCAoaWkrMSkuLihpcC0xKSBpbnRvIGRpY3Rpb25hcnkuICAqLworICAgICAgICAgICAgICAgICsraWk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworICAgICAgICAgICAgICAgICAgICBVUERBVEVfRChkaWN0LDAsZHYsaWksaW4pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCsraWkgPCBpcCk7CisgICAgICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworICAgICAgICAgICAgICAgIERWQUxfQVNTRVJUKGR2LGlwKTsKKyNlbGlmIChDTEVWRUwgPj0gMykKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMikKKyAgICAgICAgICAgICAgICBTSSAgIERJICAgICAgWEkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJCisjZW5kaWYKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgLyogd2UndmUgZm91bmQgYSBsb25nIG1hdGNoIC0gc2VlIGhvdyBmYXIgd2UgY2FuIHN0aWxsIGdvICovCisgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGVuZDsKKyAgICAgICAgICAgICAgICBsem9fdWludCBtX2xlbjsKKworICAgICAgICAgICAgICAgIGFzc2VydChpcCA8PSBpbl9lbmQpOworICAgICAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCAtIE1JTl9NQVRDSF9MT05HKTsKKworICAgICAgICAgICAgICAgIGlmIChwZChpbl9lbmQsaXApIDw9IChNQVhfTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSF9MT05HKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gaW5fZW5kOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IGlwICsgKE1BWF9NQVRDSF9MT05HIC0gTUlOX01BVENIX0xPTkcpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZW5kIDwgaW5fZW5kKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXAgPCBlbmQgICYmICAqbV9wb3MgPT0gKmlwKQorICAgICAgICAgICAgICAgICAgICBtX3BvcysrLCBpcCsrOworICAgICAgICAgICAgICAgIGFzc2VydChpcCA8PSBpbl9lbmQpOworCisgICAgICAgICAgICAvKiAyYikgY29kZSB0aGUgbG9uZyBtYXRjaCAqLworICAgICAgICAgICAgICAgIG1fbGVuID0gcGQoaXAsIGlpKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IE1JTl9NQVRDSF9MT05HKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuIDw9IE1BWF9NQVRDSF9MT05HKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID4gMCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX29mZiA8PSBNQVhfT0ZGU0VUKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlpLW1fb2ZmID09IG1fcG9zX3Nhdik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKG1fcG9zX3NhdixpaSxtX2xlbikgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChwZChpcCxtX3BvcykgPT0gbV9vZmYpOworICAgICAgICAgICAgICAgIC0tbV9vZmY7CisgICAgICAgICAgICAgICAgLyogY29kZSBsb25nIG1hdGNoIGZsYWcgKyBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgoTVNJWkUgLSAxKSA8PCBPQklUUykgfCAobV9vZmYgJiBPTUFTSykpOworICAgICAgICAgICAgICAgIC8qIGNvZGUgaGlnaCBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gT0JJVFMpOworICAgICAgICAgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbiAtIE1JTl9NQVRDSF9MT05HKTsKKworCisgICAgICAgICAgICAvKiAyYykgSW5zZXJ0IHBocmFzZXMgKGJlZ2lubmluZyB3aXRoIGlpKzEpIGludG8gdGhlIGRpY3Rpb25hcnkuICovCisjaWYgKENMRVZFTCA9PSA5KQorICAgICAgICAgICAgLyogSW5zZXJ0IHRoZSB3aG9sZSBtYXRjaCAoaWkrMSkuLihpcC0xKSBpbnRvIGRpY3Rpb25hcnkuICAqLworICAgICAgICAgICAgLyogVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBpdCBpcyBzbG93LiAqLworICAgICAgICAgICAgICAgICsraWk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworICAgICAgICAgICAgICAgICAgICBVUERBVEVfRChkaWN0LDAsZHYsaWksaW4pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCsraWkgPCBpcCk7CisgICAgICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworICAgICAgICAgICAgICAgIERWQUxfQVNTRVJUKGR2LGlwKTsKKyNlbGlmIChDTEVWRUwgPj0gOCkKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJIERJIERJIERJIERJIERJIERJICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNykKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJIERJIERJIERJIERJIERJICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNikKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJIERJIERJIERJIERJICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNSkKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJIERJIERJICAgICAgICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNCkKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJIERJICAgICAgICAgICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMykKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMikKKyAgICAgICAgICAgICAgICBTSSAgIERJICAgICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJCisjZW5kaWYKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogaWkgbm93IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgbmV4dCBsaXRlcmFsIHJ1biAqLworICAgICAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGlwIDwgaXBfZW5kKTsKKworCisKK3RoZV9lbmQ6CisgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisKKworI2lmIGRlZmluZWQoTFpPX1JFVFVSTl9JRl9OT1RfQ09NUFJFU1NJQkxFKQorICAgIC8qIHJldHVybiAtMSBpZiBvcCA9PSBvdXQgdG8gaW5kaWNhdGUgdGhhdCB3ZQorICAgICAqIGNvdWxkbid0IGNvbXByZXNzIGFuZCBkaWRuJ3QgY29weSBhbnl0aGluZy4KKyAgICAgKi8KKyAgICBpZiAob3AgPT0gb3V0KQorICAgIHsKKyAgICAgICAgKm91dF9sZW4gPSAwOworICAgICAgICByZXR1cm4gTFpPX0VfTk9UX0NPTVBSRVNTSUJMRTsKKyAgICB9CisjZW5kaWYKKworCisgICAgLyogc3RvcmUgdGhlIGZpbmFsIGxpdGVyYWwgcnVuICovCisgICAgaWYgKHBkKGluX2VuZCtEVkFMX0xFTixpaSkgPiAwKQorICAgICAgICBvcCA9IHN0b3JlX3J1bihvcCxpaSxwZChpbl9lbmQrRFZBTF9MRU4saWkpKTsKKworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogY29tcHJlc3Npb24gd2VudCBvayAqLworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3MgcHVibGljIGVudHJ5IHBvaW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK2x6bzFfY29tcHJlc3MgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIGludCByID0gTFpPX0VfT0s7CisKKyAgICAvKiBkb24ndCB0cnkgdG8gY29tcHJlc3MgYSBibG9jayB0aGF0J3MgdG9vIHNob3J0ICovCisgICAgaWYgKGluX2xlbiA8PSAwKQorICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgZWxzZSBpZiAoaW5fbGVuIDw9IE1JTl9NQVRDSF9MT05HICsgRFZBTF9MRU4gKyAxKQorICAgIHsKKyNpZiBkZWZpbmVkKExaT19SRVRVUk5fSUZfTk9UX0NPTVBSRVNTSUJMRSkKKyAgICAgICAgciA9IExaT19FX05PVF9DT01QUkVTU0lCTEU7CisjZWxzZQorICAgICAgICAqb3V0X2xlbiA9IHBkKHN0b3JlX3J1bihvdXQsaW4saW5fbGVuKSwgb3V0KTsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHIgPSBkb19jb21wcmVzcyhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtKTsKKworICAgIHJldHVybiByOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFfOTkuYyBiL2x6by0yLjAzL3NyYy9sem8xXzk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzE5NTJkOAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xXzk5LmMKQEAgLTAsMCArMSwxMzAgQEAKKy8qIGx6bzFfOTkuYyAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMS05OSBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICA5OQorCisjZGVmaW5lIEREQklUUyAgICAgICAgICAzCisjZGVmaW5lIENMRVZFTCAgICAgICAgICA5CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2luY2x1ZGUgImNvbmZpZzEuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXByZXNzaW9uIGludGVybmFsIGVudHJ5IHBvaW50LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitfbHpvMV9kb19jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiwgIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY29tcHJlc3NfdCBmdW5jICkKK3sKKyAgICBpbnQgcjsKKworICAgIC8qIGRvbid0IHRyeSB0byBjb21wcmVzcyBhIGJsb2NrIHRoYXQncyB0b28gc2hvcnQgKi8KKyAgICBpZiAoaW5fbGVuIDw9IDApCisgICAgeworICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgICAgIHIgPSBMWk9fRV9PSzsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5fbGVuIDw9IE1JTl9MT09LQUhFQUQgKyAxKQorICAgIHsKKyNpZiBkZWZpbmVkKExaT19SRVRVUk5fSUZfTk9UX0NPTVBSRVNTSUJMRSkKKyAgICAgICAgKm91dF9sZW4gPSAwOworICAgICAgICByID0gTFpPX0VfTk9UX0NPTVBSRVNTSUJMRTsKKyNlbHNlCisgICAgICAgICpvdXRfbGVuID0gcGQoU1RPUkVfUlVOKG91dCxpbixpbl9sZW4pLCBvdXQpOworICAgICAgICByID0gKCpvdXRfbGVuID4gaW5fbGVuKSA/IExaT19FX09LIDogTFpPX0VfRVJST1I7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICByID0gZnVuYyhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtKTsKKworICAgIHJldHVybiByOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKENPTVBSRVNTX0lEKQorI2RlZmluZSBDT01QUkVTU19JRCAgICAgX0xaT19FQ09OQ0FUMihERF9CSVRTLENMRVZFTCkKKyNlbmRpZgorCisKKyNkZWZpbmUgTFpPX0NPREVfTUFUQ0hfSU5DTFVERV9GSUxFICAgICAibHpvMV9jbS5jaCIKKyNpbmNsdWRlICJsem8xYl9jLmNoIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fQ09NUFJFU1MgXAorICAgIExaT19DUFBfRUNPTkNBVDMobHpvMV8sQ09NUFJFU1NfSUQsX2NvbXByZXNzKQorCisjZGVmaW5lIExaT19DT01QUkVTU19GVU5DIFwKKyAgICBMWk9fQ1BQX0VDT05DQVQzKF9sem8xXyxDT01QUkVTU19JRCxfY29tcHJlc3NfZnVuYykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMoaW50KQorTFpPX0NPTVBSRVNTICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIF9sem8xX2RvX2NvbXByZXNzKGluLGluX2xlbixvdXQsb3V0X2xlbix3cmttZW0sZG9fY29tcHJlc3MpOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFfY20uY2ggYi9sem8tMi4wMy9zcmMvbHpvMV9jbS5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDExNmY0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFfY20uY2gKQEAgLTAsMCArMSw1MiBAQAorLyogbHpvMV9jbS5jaCAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaW5jbHVkZSAibHpvMWFfY20uY2giCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMV9kLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzFfZC5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMWRhZDM5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFfZC5jaApAQCAtMCwwICsxLDE1NSBAQAorLyogbHpvMV9kLmNoIC0tIGNvbW1vbiBkZWNvbXByZXNzaW9uIHN0dWZmCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTikKKyMgIGlmICFkZWZpbmVkKExaT19URVNUX09WRVJSVU5fSU5QVVQpCisjICAgIGRlZmluZSBMWk9fVEVTVF9PVkVSUlVOX0lOUFVUICAgICAgIDIKKyMgIGVuZGlmCisjICBpZiAhZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOX09VVFBVVCkKKyMgICAgZGVmaW5lIExaT19URVNUX09WRVJSVU5fT1VUUFVUICAgICAgMgorIyAgZW5kaWYKKyMgIGlmICFkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKKyMgICAgZGVmaW5lIExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORAorIyAgZW5kaWYKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gT3ZlcnJ1biBkZXRlY3Rpb24gaXMgaW50ZXJuYWxseSBoYW5kbGVkIGJ5IHRoZXNlIG1hY3JvczoKKy8vCisvLyAgIFRFU1RfSVAgICAgdGVzdCBpbnB1dCBvdmVycnVuIGF0IGxvb3AgYmVnaW4KKy8vICAgTkVFRF9JUCAgICB0ZXN0IGlucHV0IG92ZXJydW4gYXQgZXZlcnkgaW5wdXQgYnl0ZQorLy8KKy8vICAgVEVTVF9PUCAgICB0ZXN0IG91dHB1dCBvdmVycnVuIGF0IGxvb3AgYmVnaW4KKy8vICAgTkVFRF9PUCAgICB0ZXN0IG91dHB1dCBvdmVycnVuIGF0IGV2ZXJ5IG91dHB1dCBieXRlCisvLworLy8gICBURVNUX0xCICAgIHRlc3QgbWF0Y2ggcG9zdGlvbgorLy8KKy8vIFRoZSBmYXN0ZXN0IGRlY29tcHJlc3NvciByZXN1bHRzIHdoZW4gdGVzdGluZyBmb3Igbm8gb3ZlcnJ1bnMKKy8vIGFuZCB1c2luZyBMWk9fRU9GX0NPREUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBURVNUX0lQCisjdW5kZWYgVEVTVF9PUAorI3VuZGVmIFRFU1RfTEIKKyN1bmRlZiBURVNUX0xCTworI3VuZGVmIE5FRURfSVAKKyN1bmRlZiBORUVEX09QCisjdW5kZWYgSEFWRV9URVNUX0lQCisjdW5kZWYgSEFWRV9URVNUX09QCisjdW5kZWYgSEFWRV9ORUVEX0lQCisjdW5kZWYgSEFWRV9ORUVEX09QCisjdW5kZWYgSEFWRV9BTllfSVAKKyN1bmRlZiBIQVZFX0FOWV9PUAorCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fSU5QVVQpCisjICBpZiAoTFpPX1RFU1RfT1ZFUlJVTl9JTlBVVCA+PSAxKQorIyAgICBkZWZpbmUgVEVTVF9JUCAgICAgICAgICAgICAoaXAgPCBpcF9lbmQpCisjICBlbmRpZgorIyAgaWYgKExaT19URVNUX09WRVJSVU5fSU5QVVQgPj0gMikKKyMgICAgZGVmaW5lIE5FRURfSVAoeCkgXAorICAgICAgICAgICAgaWYgKChsem9fdWludCkoaXBfZW5kIC0gaXApIDwgKGx6b191aW50KSh4KSkgIGdvdG8gaW5wdXRfb3ZlcnJ1bgorIyAgZW5kaWYKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fVEVTVF9PVkVSUlVOX09VVFBVVCkKKyMgIGlmIChMWk9fVEVTVF9PVkVSUlVOX09VVFBVVCA+PSAxKQorIyAgICBkZWZpbmUgVEVTVF9PUCAgICAgICAgICAgICAob3AgPD0gb3BfZW5kKQorIyAgZW5kaWYKKyMgIGlmIChMWk9fVEVTVF9PVkVSUlVOX09VVFBVVCA+PSAyKQorIyAgICB1bmRlZiBURVNUX09QICAgICAgICAgICAgICAvKiBkb24ndCBuZWVkIGJvdGggb2YgdGhlIHRlc3RzIGhlcmUgKi8KKyMgICAgZGVmaW5lIE5FRURfT1AoeCkgXAorICAgICAgICAgICAgaWYgKChsem9fdWludCkob3BfZW5kIC0gb3ApIDwgKGx6b191aW50KSh4KSkgIGdvdG8gb3V0cHV0X292ZXJydW4KKyMgIGVuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5EKQorIyAgZGVmaW5lIFRFU1RfTEIobV9wb3MpICAgICAgICBpZiAobV9wb3MgPCBvdXQgfHwgbV9wb3MgPj0gb3ApIGdvdG8gbG9va2JlaGluZF9vdmVycnVuCisjICBkZWZpbmUgVEVTVF9MQk8obV9wb3MsbykgICAgIGlmIChtX3BvcyA8IG91dCB8fCBtX3BvcyA+PSBvcCAtIChvKSkgZ290byBsb29rYmVoaW5kX292ZXJydW4KKyNlbHNlCisjICBkZWZpbmUgVEVTVF9MQihtX3BvcykgICAgICAgICgodm9pZCkgMCkKKyMgIGRlZmluZSBURVNUX0xCTyhtX3BvcyxvKSAgICAgKCh2b2lkKSAwKQorI2VuZGlmCisKKworI2lmICFkZWZpbmVkKExaT19FT0ZfQ09ERSkgJiYgIWRlZmluZWQoVEVTVF9JUCkKKyAgIC8qIGlmIHdlIGhhdmUgbm8gRU9GIGNvZGUsIHdlIGhhdmUgdG8gdGVzdCBmb3IgdGhlIGVuZCBvZiB0aGUgaW5wdXQgKi8KKyMgIGRlZmluZSBURVNUX0lQICAgICAgICAgICAgICAgKGlwIDwgaXBfZW5kKQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoVEVTVF9JUCkKKyMgIGRlZmluZSBIQVZFX1RFU1RfSVAKKyNlbHNlCisjICBkZWZpbmUgVEVTVF9JUCAgICAgICAgICAgICAgIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoVEVTVF9PUCkKKyMgIGRlZmluZSBIQVZFX1RFU1RfT1AKKyNlbHNlCisjICBkZWZpbmUgVEVTVF9PUCAgICAgICAgICAgICAgIDEKKyNlbmRpZgorCisjaWYgZGVmaW5lZChORUVEX0lQKQorIyAgZGVmaW5lIEhBVkVfTkVFRF9JUAorI2Vsc2UKKyMgIGRlZmluZSBORUVEX0lQKHgpICAgICAgICAgICAgKCh2b2lkKSAwKQorI2VuZGlmCisjaWYgZGVmaW5lZChORUVEX09QKQorIyAgZGVmaW5lIEhBVkVfTkVFRF9PUAorI2Vsc2UKKyMgIGRlZmluZSBORUVEX09QKHgpICAgICAgICAgICAgKCh2b2lkKSAwKQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoSEFWRV9URVNUX0lQKSB8fCBkZWZpbmVkKEhBVkVfTkVFRF9JUCkKKyMgIGRlZmluZSBIQVZFX0FOWV9JUAorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1RFU1RfT1ApIHx8IGRlZmluZWQoSEFWRV9ORUVEX09QKQorIyAgZGVmaW5lIEhBVkVfQU5ZX09QCisjZW5kaWYKKworCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWEuYyBiL2x6by0yLjAzL3NyYy9sem8xYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzEzNTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWEuYwpAQCAtMCwwICsxLDY1NyBAQAorLyogbHpvMWEuYyAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUEgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJsem9fY29uZi5oIgorI2luY2x1ZGUgImx6by9sem8xYS5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gVGhlIG5leHQgdHdvIGRlZmluZXMgY2FuIGJlIGNoYW5nZWQgdG8gY3VzdG9taXplIExaTzFBLgorLy8gVGhlIGRlZmF1bHQgdmVyc2lvbiBpcyBMWk8xQS01LzEuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIHJ1biBiaXRzICgzIC0gNSkgLSB0aGUgY29tcHJlc3NvciBhbmQgdGhlIGRlY29tcHJlc3NvcgorICogbXVzdCB1c2UgdGhlIHNhbWUgdmFsdWUuICovCisjaWYgIWRlZmluZWQoUkJJVFMpCisjICBkZWZpbmUgUkJJVFMgICAgIDUKKyNlbmRpZgorCisvKiBjb21wcmVzc2lvbiBsZXZlbCAoMSAtIDkpIC0gdGhpcyBvbmx5IGFmZmVjdHMgdGhlIGNvbXByZXNzb3IuCisgKiAxIGlzIGZhc3Rlc3QsIDkgaXMgYmVzdCBjb21wcmVzc2lvbiByYXRpbworICovCisjaWYgIWRlZmluZWQoQ0xFVkVMKQorIyAgZGVmaW5lIENMRVZFTCAgICAxICAgICAgICAgICAvKiBmYXN0ZXN0IGJ5IGRlZmF1bHQgKi8KKyNlbmRpZgorCisKKy8qIENvbGxlY3Qgc3RhdGlzdGljcyAqLworI2lmIDAgJiYgIWRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisjICBkZWZpbmUgTFpPX0NPTExFQ1RfU1RBVFMKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gWW91IHNob3VsZCBub3QgaGF2ZSB0byBjaGFuZ2UgYW55dGhpbmcgYmVsb3cgdGhpcyBsaW5lLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjaGVjayBjb25maWd1cmF0aW9uICovCisjaWYgKFJCSVRTIDwgMyB8fCBSQklUUyA+IDUpCisjICBlcnJvciAiaW52YWxpZCBSQklUUyIKKyNlbmRpZgorI2lmIChDTEVWRUwgPCAxIHx8IENMRVZFTCA+IDkpCisjICBlcnJvciAiaW52YWxpZCBDTEVWRUwiCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGludGVybmFsIGNvbmZpZ3VyYXRpb24KKy8vIGFsbCBvZiB0aGVzZSBhZmZlY3QgY29tcHJlc3Npb24gb25seQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBjaG9vc2UgdGhlIGhhc2hpbmcgc3RyYXRlZ3kgKi8KKyNpZm5kZWYgTFpPX0hBU0gKKyNkZWZpbmUgTFpPX0hBU0ggICAgTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0EKKyNlbmRpZgorI2RlZmluZSBEX0lOREVYMShkLHApICAgICAgIGQgPSBETShETVVMKDB4MjEsRFgyKHAsNSw1KSkgPj4gNSkKKyNkZWZpbmUgRF9JTkRFWDIoZCxwKSAgICAgICBkID0gZCBeIERfTUFTSworCisjaW5jbHVkZSAibHpvMWFfZGUuaCIKKyNpbmNsdWRlICJzdGF0czFhLmgiCisKKworLyogY2hlY2sgb3RoZXIgY29uc3RhbnRzICovCisjaWYgKExCSVRTIDwgNSB8fCBMQklUUyA+IDgpCisjICBlcnJvciAiaW52YWxpZCBMQklUUyIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgc3RhdGljIGx6bzFhX3N0YXRzX3QgbHpvX3N0YXRpc3RpY3M7CisgICBsem8xYV9zdGF0c190ICpsem8xYV9zdGF0cyA9ICZsem9fc3RhdGlzdGljczsKKyMgIGRlZmluZSBsem9fc3RhdHMgbHpvMWFfc3RhdHMKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZ2V0IGFsZ29yaXRobSBpbmZvLCByZXR1cm4gbWVtb3J5IHJlcXVpcmVkIGZvciBjb21wcmVzc2lvbgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGx6b191aW50KSBsem8xYV9pbmZvICggaW50ICpyYml0cywgaW50ICpjbGV2ZWwgKTsKKworTFpPX1BVQkxJQyhsem9fdWludCkKK2x6bzFhX2luZm8gKCBpbnQgKnJiaXRzLCBpbnQgKmNsZXZlbCApCit7CisgICAgaWYgKHJiaXRzKQorICAgICAgICAqcmJpdHMgPSBSQklUUzsKKyAgICBpZiAoY2xldmVsKQorICAgICAgICAqY2xldmVsID0gQ0xFVkVMOworICAgIHJldHVybiBEX1NJWkUgKiBsem9fc2l6ZW9mKGx6b19ieXRlcCk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBMWk8xQSBkZWNvbXByZXNzIGEgYmxvY2sgb2YgZGF0YS4KKy8vCisvLyBDb3VsZCBiZSBlYXNpbHkgdHJhbnNsYXRlZCBpbnRvIGFzc2VtYmx5IGNvZGUuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMoaW50KQorbHpvMWFfZGVjb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmVnaXN0ZXIgbHpvX2J5dGVwIG9wOworICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBpcDsKKyAgICByZWdpc3RlciBsem9fdWludCB0OworICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW47CisKKyAgICBMWk9fVU5VU0VEKHdya21lbSk7CisKKyAgICBvcCA9IG91dDsKKyAgICBpcCA9IGluOworICAgIHdoaWxlIChpcCA8IGlwX2VuZCkKKyAgICB7CisgICAgICAgIHQgPSAqaXArKzsgICAgICAvKiBnZXQgbWFya2VyICovCisgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPm1hcmtlclt0XSsrKTsKKworICAgICAgICBpZiAodCA9PSAwKSAgICAgICAgICAgICAvKiBhIFIwIGxpdGVyYWwgcnVuICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgICAgIGlmICh0ID49IFIwRkFTVCAtIFIwTUlOKSAgICAgICAgICAgIC8qIGEgbG9uZyBSMCBydW4gKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0IC09IFIwRkFTVCAtIFIwTUlOOworICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgICAgIHQgPSBSMEZBU1Q7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgIHQgPSAyNTZ1IDw8ICgodW5zaWduZWQpIHQpOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgLyogaGVscCB0aGUgb3B0aW1pemVyICovCisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IHR0ID0gMjU2OworICAgICAgICAgICAgICAgICAgICBkbyB0dCA8PD0gMTsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICAgICAgICAgICAgICB0ID0gdHQ7CisjZW5kaWYKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTUVNQ1BZOF9EUyhvcCxpcCx0KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHQgKz0gUjBNSU47CisgICAgICAgICAgICBnb3RvIGxpdGVyYWw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAodCA8IFIwTUlOKSAgICAgLyogYSBzaG9ydCBsaXRlcmFsIHJ1biAqLworICAgICAgICB7CitsaXRlcmFsOgorICAgICAgICAgICAgTUVNQ1BZX0RTKG9wLGlwLHQpOworCisgICAgICAgIC8qIGFmdGVyIGEgbGl0ZXJhbCBhIG1hdGNoIG11c3QgZm9sbG93ICovCisgICAgICAgICAgICB3aGlsZSAoaXAgPCBpcF9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCA9ICppcCsrOyAgICAgICAgICAvKiBnZXQgUjEgbWFya2VyICovCisgICAgICAgICAgICAgICAgaWYgKHQgPj0gUjBNSU4pCisgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisKKyAgICAgICAgICAgIC8qIFIxIG1hdGNoIC0gYSBjb250ZXh0IHNlbnNpdGl2ZSAzIGJ5dGUgbWF0Y2ggKyAxIGJ5dGUgbGl0ZXJhbCAqLworICAgICAgICAgICAgICAgIGFzc2VydCgodCAmIE9NQVNLKSA9PSB0KTsKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gTUlOX09GRlNFVDsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSB0IHwgKCgobHpvX3VpbnQpICppcCsrKSA8PCBPQklUUyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fcG9zID49IG91dCk7IGFzc2VydChtX3BvcyA8IG9wKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgICpvcCsrID0gKm1fcG9zKys7CisgICAgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICppcCsrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgIC8qIGEgbWF0Y2ggKi8KKyAgICAgICAgeworbWF0Y2g6CisgICAgICAgICAgICAvKiBnZXQgbWF0Y2ggb2Zmc2V0ICovCisgICAgICAgICAgICBtX3BvcyA9IG9wIC0gTUlOX09GRlNFVDsKKyAgICAgICAgICAgIG1fcG9zIC09ICh0ICYgT01BU0spIHwgKCgobHpvX3VpbnQpICppcCsrKSA8PCBPQklUUyk7CisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPj0gb3V0KTsgYXNzZXJ0KG1fcG9zIDwgb3ApOworCisgICAgICAgICAgICAvKiBnZXQgbWF0Y2ggbGVuICovCisgICAgICAgICAgICBpZiAodCA8ICgoTVNJWkUgLSAxKSA8PCBPQklUUykpICAgICAgICAgLyogYSBzaG9ydCBtYXRjaCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHQgPj49IE9CSVRTOworICAgICAgICAgICAgICAgICpvcCsrID0gKm1fcG9zKys7CisgICAgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsKKyAgICAgICAgICAgICAgICBNRU1DUFlfRFMob3AsbV9wb3MsdCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGEgbG9uZyBtYXRjaCAqLworICAgICAgICAgICAgeworI2lmIChMQklUUyA8IDgpCisgICAgICAgICAgICAgICAgdCA9IChNSU5fTUFUQ0hfTE9ORyAtIFRIUkVTSE9MRCkgKyAoKGx6b191aW50KSgqaXArKykgJiBMTUFTSyk7CisjZWxzZQorICAgICAgICAgICAgICAgIHQgPSAoTUlOX01BVENIX0xPTkcgLSBUSFJFU0hPTEQpICsgKGx6b191aW50KSgqaXArKyk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgICpvcCsrID0gKm1fcG9zKys7CisgICAgICAgICAgICAgICAgTUVNQ1BZX0RTKG9wLG1fcG9zLHQpOworI2lmIChMQklUUyA8IDgpCisgICAgICAgICAgICAgICAgLyogYSB2ZXJ5IHNob3J0IGxpdGVyYWwgZm9sbG93aW5nIGEgbG9uZyBtYXRjaCAqLworICAgICAgICAgICAgICAgIHQgPSBpcFstMV0gPj4gTEJJVFM7CisgICAgICAgICAgICAgICAgaWYgKHQpIGRvCisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gKmlwKys7CisgICAgICAgICAgICAgICAgd2hpbGUgKC0tdCk7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisKKyAgICAvKiB0aGUgbmV4dCBsaW5lIGlzIHRoZSBvbmx5IGNoZWNrIGluIHRoZSBkZWNvbXByZXNzb3IgKi8KKyAgICByZXR1cm4gKGlwID09IGlwX2VuZCA/IExaT19FX09LIDoKKyAgICAgICAgICAgKGlwIDwgaXBfZW5kICA/IExaT19FX0lOUFVUX05PVF9DT05TVU1FRCA6IExaT19FX0lOUFVUX09WRVJSVU4pKTsKK30KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gTFpPMUEgY29tcHJlc3MgYSBibG9jayBvZiBkYXRhLgorLy8KKy8vIEkgYXBvbG9naXplIGZvciB0aGUgc3BhZ2hldHRpIGNvZGUsIGJ1dCBpdCByZWFsbHkgaGVscHMgdGhlIG9wdGltaXplci4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2luY2x1ZGUgImx6bzFhX2NyLmNoIgorCitzdGF0aWMgaW50Citkb19jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisjaWYgZGVmaW5lZChfX0xaT19IQVNIX0lOQ1JFTUVOVEFMKQorICAgIGx6b194aW50IGR2OworI2VuZGlmCisgICAgY29uc3QgbHpvX2J5dGVwIG1fcG9zOworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4raW5fbGVuIC0gRFZBTF9MRU4gLSBNSU5fTUFUQ0hfTE9ORzsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaW5fZW5kID0gaW4raW5fbGVuIC0gRFZBTF9MRU47CisgICAgY29uc3QgbHpvX2J5dGVwIGlpOworICAgIGx6b19kaWN0X3AgY29uc3QgZGljdCA9IChsem9fZGljdF9wKSB3cmttZW07CisgICAgY29uc3QgbHpvX2J5dGVwIHIxID0gaXBfZW5kOyAgICAvKiBwb2ludGVyIGZvciBSMSBtYXRjaCAobm9uZSB5ZXQpICovCisjaWYgKExCSVRTIDwgOCkKKyAgICBjb25zdCBsem9fYnl0ZXAgaW0gPSBpcF9lbmQ7ICAgIC8qIHBvaW50ZXIgdG8gbGFzdCBtYXRjaCBzdGFydCAqLworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgY29uc3QgbHpvX2J5dGVwIG1fcG9zX3NhdjsKKyNlbmRpZgorCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKyAgICBpaSA9IGlwOyAgICAgICAgICAgIC8qIHBvaW50IHRvIHN0YXJ0IG9mIGN1cnJlbnQgbGl0ZXJhbCBydW4gKi8KKworICAgIC8qIGluaXQgZGljdGlvbmFyeSAqLworI2lmIGRlZmluZWQoTFpPX0RFVEVSTUlOSVNUSUMpCisgICAgQlpFUk84X1BUUih3cmttZW0sc2l6ZW9mKGx6b19kaWN0X3QpLERfU0laRSk7CisjZW5kaWYKKworICAgIERWQUxfRklSU1QoZHYsaXApOyBVUERBVEVfRChkaWN0LDAsZHYsaXAsaW4pOyBpcCsrOworICAgIERWQUxfTkVYVChkdixpcCk7CisKKyAgICBkbyB7CisgICAgICAgIGx6b191aW50IG1fb2ZmOworICAgICAgICBsem9fdWludCBkaW5kZXg7CisKKyAgICAgICAgRElOREVYMShkaW5kZXgsaXApOworICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fcG9zWzBdID09IGlwWzBdICYmIG1fcG9zWzFdID09IGlwWzFdICYmIG1fcG9zWzJdID09IGlwWzJdKQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgRElOREVYMihkaW5kZXgsaXApOworICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fcG9zWzBdID09IGlwWzBdICYmIG1fcG9zWzFdID09IGlwWzFdICYmIG1fcG9zWzJdID09IGlwWzJdKQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgZ290byBsaXRlcmFsOworCitsaXRlcmFsOgorICAgICAgICBVUERBVEVfSShkaWN0LDAsZGluZGV4LGlwLGluKTsKKyAgICAgICAgaWYgKCsraXAgPj0gaXBfZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNvbnRpbnVlOworCittYXRjaDoKKyAgICAgICAgVVBEQVRFX0koZGljdCwwLGRpbmRleCxpcCxpbik7CisjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKExaT19ESUNUX1VTRV9QVFIpCisgICAgICAgIGFzc2VydChtX3BvcyA9PSBOVUxMIHx8IG1fcG9zID49IGluKTsKKyAgICAgICAgbV9wb3Nfc2F2ID0gbV9wb3M7CisjZW5kaWYKKyAgICAgICAgbV9wb3MgKz0gMzsKKyAgICAgICAgeworICAgIC8qIHdlIGhhdmUgZm91bmQgYSBtYXRjaCAob2YgYXQgbGVhc3QgbGVuZ3RoIDMpICovCisKKyNpZiAhZGVmaW5lZChOREVCVUcpICYmICFkZWZpbmVkKExaT19ESUNUX1VTRV9QVFIpCisgICAgICAgICAgICBhc3NlcnQoKG1fcG9zX3NhdiA9IGlwIC0gbV9vZmYpID09IChtX3BvcyAtIDMpKTsKKyNlbmRpZgorCisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPj0gaW4pOworICAgICAgICAgICAgYXNzZXJ0KGlwIDwgaXBfZW5kKTsKKworICAgICAgICAgICAgLyogMSkgc3RvcmUgdGhlIGN1cnJlbnQgbGl0ZXJhbCBydW4gKi8KKyAgICAgICAgICAgIGlmIChwZChpcCxpaSkgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGx6b191aW50IHQgPSBwZChpcCxpaSk7CisKKyAgICAgICAgICAgICAgICBpZiAoaXAgLSByMSA9PSBNSU5fTUFUQ0ggKyAxKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDb2RlIGEgY29udGV4dCBzZW5zaXRpdmUgUjEgbWF0Y2guCisgICAgICAgICAgICAgICAgICogVGhpcyBpcyB0cmlja3kgYW5kIHNvbWV3aGF0IGRpZmZpY3VsdCB0byBleHBsYWluOgorICAgICAgICAgICAgICAgICAqIG11bHRpcGxleCBhIGxpdGVyYWwgcnVuIG9mIGxlbmd0aCAxIGludG8gdGhlIHByZXZpb3VzCisgICAgICAgICAgICAgICAgICogc2hvcnQgbWF0Y2ggb2YgbGVuZ3RoIE1JTl9NQVRDSC4KKyAgICAgICAgICAgICAgICAgKiBUaGUga2V5IGlkZWEgaXM6CisgICAgICAgICAgICAgICAgICogIC0gYWZ0ZXIgYSBzaG9ydCBydW4gYSBtYXRjaCBNVVNUIGZvbGxvdworICAgICAgICAgICAgICAgICAqICAtIHRoZXJlZm9yZSB0aGUgdmFsdWUgbSA9IDAwMCBpbiB0aGUgbW1tb29vb28gbWFya2VyIGlzIGZyZWUKKyAgICAgICAgICAgICAgICAgKiAgLSB1c2UgMDAwb29vb28gdG8gaW5kaWNhdGUgYSBNSU5fTUFUQ0ggbWF0Y2ggKHRoaXMKKyAgICAgICAgICAgICAgICAgKiAgICBpcyBhbHJlYWR5IGNvZGVkKSBwbHVzIGEgMSBieXRlIGxpdGVyYWwKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KHQgPT0gMSk7CisgICAgICAgICAgICAgICAgICAgIC8qIG1vZGlmeSBtYXJrZXIgYnl0ZSAqLworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG9wWy0yXSA+PiBPQklUUykgPT0gKE1JTl9NQVRDSCAtIFRIUkVTSE9MRCkpOworICAgICAgICAgICAgICAgICAgICBvcFstMl0gJj0gT01BU0s7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCgob3BbLTJdID4+IE9CSVRTKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgLyogY29weSAxIGxpdGVyYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAqaWk7CisgICAgICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPnIxX21hdGNoZXMrKyk7CisgICAgICAgICAgICAgICAgICAgIHIxID0gaXA7ICAgICAgICAgICAgICAgIC8qIHNldCBuZXcgUjEgcG9pbnRlciAqLworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0IDwgUjBNSU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBpbmxpbmUgdGhlIGNvcHlpbmcgb2YgYSBzaG9ydCBydW4gKi8KKyNpZiAoTEJJVFMgPCA4KQorICAgICAgICAgICAgICAgICAgICBpZiAodCA8ICgxIDw8ICg4LUxCSVRTKSkgJiYgaWkgLSBpbSA+PSBNSU5fTUFUQ0hfTE9ORykKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIGEgdmVyeSBzaG9ydCBsaXRlcmFsIHJ1biBpbnRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgKiBwcmV2aW91cyBsb25nIG1hdGNoIGxlbmd0aCBieXRlLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5zX2FmdGVyX2xvbmdfbWF0Y2grKyk7CisgICAgICAgICAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5saXRfcnVuX2FmdGVyX2xvbmdfbWF0Y2hbdF0rKyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaWkgLSBpbSA8PSBNQVhfTUFUQ0hfTE9ORyk7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG9wWy0xXSA+PiBMQklUUykgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBvcFstMV0gfD0gdCA8PCBMQklUUzsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1FTUNQWV9EUyhvcCwgaWksIHQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5saXRfcnVucysrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5bdF0rKyk7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICAgICAgICAgICAgICAgICAgTUVNQ1BZX0RTKG9wLCBpaSwgdCk7CisgICAgICAgICAgICAgICAgICAgICAgICByMSA9IGlwOyAgICAgICAgICAgICAgICAvKiBzZXQgbmV3IFIxIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlIGlmICh0IDwgUjBGQVNUKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogaW5saW5lIHRoZSBjb3B5aW5nIG9mIGEgc2hvcnQgUjAgcnVuICovCisgICAgICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPnIwc2hvcnRfcnVucysrKTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IExaT19CWVRFKHQgLSBSME1JTik7CisgICAgICAgICAgICAgICAgICAgIE1FTUNQWV9EUyhvcCwgaWksIHQpOworICAgICAgICAgICAgICAgICAgICByMSA9IGlwOyAgICAgICAgICAgICAgICAvKiBzZXQgbmV3IFIxIHBvaW50ZXIgKi8KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvcCA9IHN0b3JlX3J1bihvcCxpaSx0KTsKKyAgICAgICAgICAgIH0KKyNpZiAoTEJJVFMgPCA4KQorICAgICAgICAgICAgaW0gPSBpcDsKKyNlbmRpZgorCisKKyAgICAgICAgICAgIC8qIDIpIGNvbXB1dGUgbWF0Y2ggbGVuICovCisgICAgICAgICAgICBpaSA9IGlwOyAgICAgICAgLyogcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBtYXRjaCAqLworCisgICAgICAgICAgICAvKiB3ZSBhbHJlYWR5IG1hdGNoZWQgTUlOX01BVENIIGJ5dGVzLAorICAgICAgICAgICAgICogbV9wb3MgYWxzbyBhbHJlYWR5IGFkdmFuY2VkIE1JTl9NQVRDSCBieXRlcyAqLworICAgICAgICAgICAgaXAgKz0gTUlOX01BVENIOworICAgICAgICAgICAgYXNzZXJ0KG1fcG9zIDwgaXApOworCisgICAgICAgICAgICAvKiB0cnkgdG8gbWF0Y2ggYW5vdGhlciBNSU5fTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSCBieXRlcworICAgICAgICAgICAgICogdG8gc2VlIGlmIHdlIGdldCBhIGxvbmcgbWF0Y2ggKi8KKworI2RlZmluZSBQUyAgKm1fcG9zKysgIT0gKmlwKysKKworI2lmIChNSU5fTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSCA9PSAyKSAgICAgICAgICAgICAgICAgICAvKiBNQklUUyA9PSAyICovCisgICAgICAgICAgICBpZiAoUFMgfHwgUFMpCisjZWxpZiAoTUlOX01BVENIX0xPTkcgLSBNSU5fTUFUQ0ggPT0gNikgICAgICAgICAgICAgICAgIC8qIE1CSVRTID09IDMgKi8KKyAgICAgICAgICAgIGlmIChQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUykKKyNlbGlmIChNSU5fTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSCA9PSAxNCkgICAgICAgICAgICAgICAgLyogTUJJVFMgPT0gNCAqLworICAgICAgICAgICAgaWYgKFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8CisgICAgICAgICAgICAgICAgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMpCisjZWxpZiAoTUlOX01BVENIX0xPTkcgLSBNSU5fTUFUQ0ggPT0gMzApICAgICAgICAgICAgICAgIC8qIE1CSVRTID09IDUgKi8KKyAgICAgICAgICAgIGlmIChQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fAorICAgICAgICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8CisgICAgICAgICAgICAgICAgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwKKyAgICAgICAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUykKKyNlbHNlCisjICBlcnJvciAiTUJJVFMgbm90IHlldCBpbXBsZW1lbnRlZCIKKyNlbmRpZgorICAgICAgICAgICAgeworICAgICAgICAgICAgLyogd2UndmUgZm91bmQgYSBzaG9ydCBtYXRjaCAqLworICAgICAgICAgICAgICAgIGx6b191aW50IG1fbGVuOworCisgICAgICAgICAgICAvKiAyYSkgY29tcHV0ZSBtYXRjaCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgICAgIGFzc2VydChpcC1tX3BvcyA9PSAoaW50KW1fb2ZmKTsKKyAgICAgICAgICAgICAgICAtLWlwOyAgIC8qIHJhbiBvbmUgdG9vIGZhciwgcG9pbnQgYmFjayB0byBub24tbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBtX2xlbiA9IHBkKGlwLCBpaSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSBNSU5fTUFUQ0hfU0hPUlQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPD0gTUFYX01BVENIX1NIT1JUKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID49IE1JTl9PRkZTRVQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9vZmYgPD0gTUFYX09GRlNFVCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChpaS1tX29mZiA9PSBtX3Bvc19zYXYpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChtX3Bvc19zYXYsaWksbV9sZW4pID09IDApOworICAgICAgICAgICAgICAgIG1fb2ZmIC09IE1JTl9PRkZTRVQ7CisKKyAgICAgICAgICAgIC8qIDJiKSBjb2RlIGEgc2hvcnQgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAvKiBjb2RlIHNob3J0IG1hdGNoIGxlbiArIGxvdyBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiAtIFRIUkVTSE9MRCkgPDwgT0JJVFMpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX29mZiAmIE9NQVNLKSk7CisgICAgICAgICAgICAgICAgLyogY29kZSBoaWdoIG9mZnNldCBiaXRzICovCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiBPQklUUyk7CisKKworI2lmIGRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisgICAgICAgICAgICAgICAgbHpvX3N0YXRzLT5zaG9ydF9tYXRjaGVzKys7CisgICAgICAgICAgICAgICAgbHpvX3N0YXRzLT5zaG9ydF9tYXRjaFttX2xlbl0rKzsKKyAgICAgICAgICAgICAgICBpZiAobV9vZmYgPCBPU0laRSkKKyAgICAgICAgICAgICAgICAgICAgbHpvX3N0YXRzLT5zaG9ydF9tYXRjaF9vZmZzZXRfb3NpemVbbV9sZW5dKys7CisgICAgICAgICAgICAgICAgaWYgKG1fb2ZmIDwgMjU2KQorICAgICAgICAgICAgICAgICAgICBsem9fc3RhdHMtPnNob3J0X21hdGNoX29mZnNldF8yNTZbbV9sZW5dKys7CisgICAgICAgICAgICAgICAgaWYgKG1fb2ZmIDwgMTAyNCkKKyAgICAgICAgICAgICAgICAgICAgbHpvX3N0YXRzLT5zaG9ydF9tYXRjaF9vZmZzZXRfMTAyNFttX2xlbl0rKzsKKyNlbmRpZgorCisKKyAgICAgICAgICAgIC8qIDJjKSBJbnNlcnQgcGhyYXNlcyAoYmVnaW5uaW5nIHdpdGggaWkrMSkgaW50byB0aGUgZGljdGlvbmFyeS4gKi8KKworI2RlZmluZSBTSSAgICAgIC8qIG5vdGhpbmcgKi8KKyNkZWZpbmUgREkgICAgICArK2lpOyBEVkFMX05FWFQoZHYsaWkpOyBVUERBVEVfRChkaWN0LDAsZHYsaWksaW4pOworI2RlZmluZSBYSSAgICAgIGFzc2VydChpaSA8IGlwKTsgaWkgPSBpcDsgRFZBTF9GSVJTVChkdiwoaXApKTsKKworI2lmIChDTEVWRUwgPT0gOSkgfHwgKENMRVZFTCA+PSA3ICYmIE1CSVRTIDw9IDQpIHx8IChDTEVWRUwgPj0gNSAmJiBNQklUUyA8PSAzKQorICAgICAgICAgICAgLyogSW5zZXJ0IHRoZSB3aG9sZSBtYXRjaCAoaWkrMSkuLihpcC0xKSBpbnRvIGRpY3Rpb25hcnkuICAqLworICAgICAgICAgICAgICAgICsraWk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworICAgICAgICAgICAgICAgICAgICBVUERBVEVfRChkaWN0LDAsZHYsaWksaW4pOworICAgICAgICAgICAgICAgIH0gd2hpbGUgKCsraWkgPCBpcCk7CisgICAgICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworICAgICAgICAgICAgICAgIERWQUxfQVNTRVJUKGR2LGlwKTsKKyNlbGlmIChDTEVWRUwgPj0gMykKKyAgICAgICAgICAgICAgICBTSSAgIERJIERJICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMikKKyAgICAgICAgICAgICAgICBTSSAgIERJICAgICAgWEkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhJCisjZW5kaWYKKworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgLyogd2UndmUgZm91bmQgYSBsb25nIG1hdGNoIC0gc2VlIGhvdyBmYXIgd2UgY2FuIHN0aWxsIGdvICovCisgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGVuZDsKKyAgICAgICAgICAgICAgICBsem9fdWludCBtX2xlbjsKKworICAgICAgICAgICAgICAgIGFzc2VydChpcCA8PSBpbl9lbmQpOworICAgICAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCAtIE1JTl9NQVRDSF9MT05HKTsKKworICAgICAgICAgICAgICAgIGlmIChwZChpbl9lbmQsaXApIDw9IChNQVhfTUFUQ0hfTE9ORyAtIE1JTl9NQVRDSF9MT05HKSkKKyAgICAgICAgICAgICAgICAgICAgZW5kID0gaW5fZW5kOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVuZCA9IGlwICsgKE1BWF9NQVRDSF9MT05HIC0gTUlOX01BVENIX0xPTkcpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoZW5kIDwgaW5fZW5kKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXAgPCBlbmQgICYmICAqbV9wb3MgPT0gKmlwKQorICAgICAgICAgICAgICAgICAgICBtX3BvcysrLCBpcCsrOworICAgICAgICAgICAgICAgIGFzc2VydChpcCA8PSBpbl9lbmQpOworCisgICAgICAgICAgICAvKiAyYSkgY29tcHV0ZSBtYXRjaCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICAgICAgbV9sZW4gPSBwZChpcCwgaWkpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTUlOX01BVENIX0xPTkcpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPD0gTUFYX01BVENIX0xPTkcpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQobV9vZmYgPj0gTUlOX09GRlNFVCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChtX29mZiA8PSBNQVhfT0ZGU0VUKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlpLW1fb2ZmID09IG1fcG9zX3Nhdik7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKG1fcG9zX3NhdixpaSxtX2xlbikgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChwZChpcCxtX3BvcykgPT0gbV9vZmYpOworICAgICAgICAgICAgICAgIG1fb2ZmIC09IE1JTl9PRkZTRVQ7CisKKyAgICAgICAgICAgIC8qIDJiKSBjb2RlIHRoZSBsb25nIG1hdGNoICovCisgICAgICAgICAgICAgICAgLyogY29kZSBsb25nIG1hdGNoIGZsYWcgKyBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgoTVNJWkUgLSAxKSA8PCBPQklUUykgfCAobV9vZmYgJiBPTUFTSykpOworICAgICAgICAgICAgICAgIC8qIGNvZGUgaGlnaCBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gT0JJVFMpOworICAgICAgICAgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbiAtIE1JTl9NQVRDSF9MT05HKTsKKworCisjaWYgZGVmaW5lZChMWk9fQ09MTEVDVF9TVEFUUykKKyAgICAgICAgICAgICAgICBsem9fc3RhdHMtPmxvbmdfbWF0Y2hlcysrOworICAgICAgICAgICAgICAgIGx6b19zdGF0cy0+bG9uZ19tYXRjaFttX2xlbl0rKzsKKyNlbmRpZgorCisKKyAgICAgICAgICAgIC8qIDJjKSBJbnNlcnQgcGhyYXNlcyAoYmVnaW5uaW5nIHdpdGggaWkrMSkgaW50byB0aGUgZGljdGlvbmFyeS4gKi8KKyNpZiAoQ0xFVkVMID09IDkpCisgICAgICAgICAgICAvKiBJbnNlcnQgdGhlIHdob2xlIG1hdGNoIChpaSsxKS4uKGlwLTEpIGludG8gZGljdGlvbmFyeS4gICovCisgICAgICAgICAgICAvKiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBiZWNhdXNlIGl0IGlzIHNsb3cuICovCisgICAgICAgICAgICAgICAgKytpaTsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgIERWQUxfTkVYVChkdixpaSk7CisgICAgICAgICAgICAgICAgICAgIFVQREFURV9EKGRpY3QsMCxkdixpaSxpbik7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAoKytpaSA8IGlwKTsKKyAgICAgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworICAgICAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCk7CisgICAgICAgICAgICAgICAgRFZBTF9BU1NFUlQoZHYsaXApOworI2VsaWYgKENMRVZFTCA+PSA4KQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgREkgREkgREkgREkgICBYSQorI2VsaWYgKENMRVZFTCA+PSA3KQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgREkgREkgREkgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSA2KQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgREkgREkgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSA1KQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgICAgICAgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSA0KQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgREkgICAgICAgICAgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSAzKQorICAgICAgICAgICAgICAgIFNJICAgREkgREkgICAgICAgICAgICAgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSAyKQorICAgICAgICAgICAgICAgIFNJICAgREkgICAgICAgICAgICAgICAgICAgICAgICBYSQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbmRpZgorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBpaSBub3cgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBsaXRlcmFsIHJ1biAqLworICAgICAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKyAgICAgICAgfQorCisgICAgfSB3aGlsZSAoaXAgPCBpcF9lbmQpOworCisgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisKKworI2lmIGRlZmluZWQoTFpPX1JFVFVSTl9JRl9OT1RfQ09NUFJFU1NJQkxFKQorICAgIC8qIHJldHVybiAtMSBpZiBvcCA9PSBvdXQgdG8gaW5kaWNhdGUgdGhhdCB3ZQorICAgICAqIGNvdWxkbid0IGNvbXByZXNzIGFuZCBkaWRuJ3QgY29weSBhbnl0aGluZy4KKyAgICAgKi8KKyAgICBpZiAob3AgPT0gb3V0KQorICAgIHsKKyAgICAgICAgKm91dF9sZW4gPSAwOworICAgICAgICByZXR1cm4gTFpPX0VfTk9UX0NPTVBSRVNTSUJMRTsKKyAgICB9CisjZW5kaWYKKworICAgIC8qIHN0b3JlIHRoZSBmaW5hbCBsaXRlcmFsIHJ1biAqLworICAgIGlmIChwZChpbl9lbmQrRFZBTF9MRU4saWkpID4gMCkKKyAgICAgICAgb3AgPSBzdG9yZV9ydW4ob3AsaWkscGQoaW5fZW5kK0RWQUxfTEVOLGlpKSk7CisKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIGNvbXByZXNzaW9uIHdlbnQgb2sgKi8KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIExaTzFBIGNvbXByZXNzIHB1YmxpYyBlbnRyeSBwb2ludC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitsem8xYV9jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBpbnQgciA9IExaT19FX09LOworCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgIGx6b19tZW1zZXQobHpvX3N0YXRzLDAsc2l6ZW9mKCpsem9fc3RhdHMpKTsKKyAgICBsem9fc3RhdHMtPnJiaXRzICA9IFJCSVRTOworICAgIGx6b19zdGF0cy0+Y2xldmVsID0gQ0xFVkVMOworICAgIGx6b19zdGF0cy0+ZGJpdHMgID0gREJJVFM7CisgICAgbHpvX3N0YXRzLT5sYml0cyAgPSBMQklUUzsKKyAgICBsem9fc3RhdHMtPm1pbl9tYXRjaF9zaG9ydCA9IE1JTl9NQVRDSF9TSE9SVDsKKyAgICBsem9fc3RhdHMtPm1heF9tYXRjaF9zaG9ydCA9IE1BWF9NQVRDSF9TSE9SVDsKKyAgICBsem9fc3RhdHMtPm1pbl9tYXRjaF9sb25nICA9IE1JTl9NQVRDSF9MT05HOworICAgIGx6b19zdGF0cy0+bWF4X21hdGNoX2xvbmcgID0gTUFYX01BVENIX0xPTkc7CisgICAgbHpvX3N0YXRzLT5taW5fb2Zmc2V0ICAgICAgPSBNSU5fT0ZGU0VUOworICAgIGx6b19zdGF0cy0+bWF4X29mZnNldCAgICAgID0gTUFYX09GRlNFVDsKKyAgICBsem9fc3RhdHMtPnIwbWluICA9IFIwTUlOOworICAgIGx6b19zdGF0cy0+cjBmYXN0ID0gUjBGQVNUOworICAgIGx6b19zdGF0cy0+cjBtYXggID0gUjBNQVg7CisgICAgbHpvX3N0YXRzLT5pbl9sZW4gPSBpbl9sZW47CisjZW5kaWYKKworCisgICAgLyogZG9uJ3QgdHJ5IHRvIGNvbXByZXNzIGEgYmxvY2sgdGhhdCdzIHRvbyBzaG9ydCAqLworICAgIGlmIChpbl9sZW4gPD0gMCkKKyAgICAgICAgKm91dF9sZW4gPSAwOworICAgIGVsc2UgaWYgKGluX2xlbiA8PSBNSU5fTUFUQ0hfTE9ORyArIERWQUxfTEVOICsgMSkKKyAgICB7CisjaWYgZGVmaW5lZChMWk9fUkVUVVJOX0lGX05PVF9DT01QUkVTU0lCTEUpCisgICAgICAgIHIgPSBMWk9fRV9OT1RfQ09NUFJFU1NJQkxFOworI2Vsc2UKKyAgICAgICAgKm91dF9sZW4gPSBwZChzdG9yZV9ydW4ob3V0LGluLGluX2xlbiksIG91dCk7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICByID0gZG9fY29tcHJlc3MoaW4saW5fbGVuLG91dCxvdXRfbGVuLHdya21lbSk7CisKKworI2lmIGRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisgICAgbHpvX3N0YXRzLT5zaG9ydF9tYXRjaGVzIC09IGx6b19zdGF0cy0+cjFfbWF0Y2hlczsKKyAgICBsem9fc3RhdHMtPnNob3J0X21hdGNoW01JTl9NQVRDSF0gLT0gbHpvX3N0YXRzLT5yMV9tYXRjaGVzOworICAgIGx6b19zdGF0cy0+b3V0X2xlbiA9ICpvdXRfbGVuOworI2VuZGlmCisKKyAgICByZXR1cm4gcjsKK30KKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYV85OS5jIGIvbHpvLTIuMDMvc3JjL2x6bzFhXzk5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliY2Y3MwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYV85OS5jCkBAIC0wLDAgKzEsMTMwIEBACisvKiBsem8xYV85OS5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xQS05OSBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICA5OQorCisjZGVmaW5lIEREQklUUyAgICAgICAgICAzCisjZGVmaW5lIENMRVZFTCAgICAgICAgICA5CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2luY2x1ZGUgImNvbmZpZzFhLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21wcmVzc2lvbiBpbnRlcm5hbCBlbnRyeSBwb2ludC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludAorX2x6bzFhX2RvX2NvbXByZXNzICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19jb21wcmVzc190IGZ1bmMgKQoreworICAgIGludCByOworCisgICAgLyogZG9uJ3QgdHJ5IHRvIGNvbXByZXNzIGEgYmxvY2sgdGhhdCdzIHRvbyBzaG9ydCAqLworICAgIGlmIChpbl9sZW4gPD0gMCkKKyAgICB7CisgICAgICAgICpvdXRfbGVuID0gMDsKKyAgICAgICAgciA9IExaT19FX09LOworICAgIH0KKyAgICBlbHNlIGlmIChpbl9sZW4gPD0gTUlOX0xPT0tBSEVBRCArIDEpCisgICAgeworI2lmIGRlZmluZWQoTFpPX1JFVFVSTl9JRl9OT1RfQ09NUFJFU1NJQkxFKQorICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgICAgIHIgPSBMWk9fRV9OT1RfQ09NUFJFU1NJQkxFOworI2Vsc2UKKyAgICAgICAgKm91dF9sZW4gPSBwZChTVE9SRV9SVU4ob3V0LGluLGluX2xlbiksIG91dCk7CisgICAgICAgIHIgPSAoKm91dF9sZW4gPiBpbl9sZW4pID8gTFpPX0VfT0sgOiBMWk9fRV9FUlJPUjsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHIgPSBmdW5jKGluLGluX2xlbixvdXQsb3V0X2xlbix3cmttZW0pOworCisgICAgcmV0dXJuIHI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoQ09NUFJFU1NfSUQpCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICBfTFpPX0VDT05DQVQyKEREX0JJVFMsQ0xFVkVMKQorI2VuZGlmCisKKworI2RlZmluZSBMWk9fQ09ERV9NQVRDSF9JTkNMVURFX0ZJTEUgICAgICJsem8xYV9jbS5jaCIKKyNpbmNsdWRlICJsem8xYl9jLmNoIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fQ09NUFJFU1MgXAorICAgIExaT19DUFBfRUNPTkNBVDMobHpvMWFfLENPTVBSRVNTX0lELF9jb21wcmVzcykKKworI2RlZmluZSBMWk9fQ09NUFJFU1NfRlVOQyBcCisgICAgTFpPX0NQUF9FQ09OQ0FUMyhfbHpvMWFfLENPTVBSRVNTX0lELF9jb21wcmVzc19mdW5jKQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitMWk9fQ09NUFJFU1MgKCBjb25zdCBsem9fYnl0ZXAgaW4sICBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZXR1cm4gX2x6bzFhX2RvX2NvbXByZXNzKGluLGluX2xlbixvdXQsb3V0X2xlbix3cmttZW0sZG9fY29tcHJlc3MpOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFhX2NtLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzFhX2NtLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNjk0ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWFfY20uY2gKQEAgLTAsMCArMSwyNDIgQEAKKy8qIGx6bzFhX2NtLmNoIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xQSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29kZSB0aGUgbWF0Y2ggaW4gTFpPMSBjb21wYXRpYmxlIGZvcm1hdAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFRIUkVTSE9MRCAgIChNMl9NSU5fTEVOIC0gMSkKKyNkZWZpbmUgTVNJWkUgICAgICAgTFpPX1NJWkUoTTJMX0JJVFMpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgKEREX0JJVFMgPT0gMCkKKworICAgICAgICAvKiB3ZSBhbHJlYWR5IG1hdGNoZWQgTTJfTUlOX0xFTiBieXRlcywKKyAgICAgICAgICogbV9wb3MgYWxzbyBhbHJlYWR5IGFkdmFuY2VkIE0yX01JTl9MRU4gYnl0ZXMgKi8KKyAgICAgICAgaXAgKz0gTTJfTUlOX0xFTjsKKyAgICAgICAgYXNzZXJ0KG1fcG9zIDwgaXApOworCisgICAgICAgIC8qIHRyeSB0byBtYXRjaCBhbm90aGVyIE0yX01BWF9MRU4gKyAxIC0gTTJfTUlOX0xFTiBieXRlcworICAgICAgICAgKiB0byBzZWUgaWYgd2UgZ2V0IG1vcmUgdGhhbiBhIE0yIG1hdGNoICovCisjZGVmaW5lIE0yX09SX00zICAgIChNQVRDSF9NMikKKworI2Vsc2UgLyogKEREX0JJVFMgPT0gMCkgKi8KKworICAgICAgICAvKiB3ZSBhbHJlYWR5IG1hdGNoZWQgbV9sZW4gYnl0ZXMgKi8KKyAgICAgICAgYXNzZXJ0KG1fbGVuID49IE0yX01JTl9MRU4pOworICAgICAgICBpcCArPSBtX2xlbjsKKyAgICAgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisKKyNkZWZpbmUgTTJfT1JfTTMgICAgKG1fbGVuIDw9IE0yX01BWF9MRU4pCisKKyNlbmRpZiAvKiAoRERfQklUUyA9PSAwKSAqLworCisKKyAgICAgICAgaWYgKE0yX09SX00zKQorICAgICAgICB7CisgICAgICAgIC8qIHdlJ3ZlIGZvdW5kIGEgc2hvcnQgbWF0Y2ggKi8KKyAgICAgICAgICAgIGFzc2VydChpcCA8PSBpbl9lbmQpOworCisgICAgICAgIC8qIDJhKSBjb21wdXRlIG1hdGNoIHBhcmFtZXRlcnMgKi8KKyNpZiAoRERfQklUUyA9PSAwKQorICAgICAgICAgICAgICAgIGFzc2VydChwZChpcCxtX3BvcykgPT0gbV9vZmYpOworICAgICAgICAgICAgLS1pcDsgICAvKiByYW4gb25lIHRvbyBmYXIsIHBvaW50IGJhY2sgdG8gbm9uLW1hdGNoICovCisgICAgICAgICAgICBtX2xlbiA9IGlwIC0gaWk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTJfTUlOX0xFTik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuIDw9IE0yX01BWF9MRU4pOworCisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID49IE0yX01JTl9PRkZTRVQpOworICAgICAgICAgICAgICAgIGFzc2VydChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWktbV9vZmYgPT0gbV9wb3Nfc2F2KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChtX3Bvc19zYXYsaWksbV9sZW4pID09IDApOworCisgICAgICAgIC8qIDJiKSBjb2RlIHRoZSBtYXRjaCAqLworICAgICAgICAgICAgbV9vZmYgLT0gTTJfTUlOX09GRlNFVDsKKyAgICAgICAgICAgIC8qIGNvZGUgc2hvcnQgbWF0Y2ggbGVuICsgbG93IG9mZnNldCBiaXRzICovCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSBUSFJFU0hPTEQpIDw8IE0yT19CSVRTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtX29mZiAmIE0yT19NQVNLKSk7CisgICAgICAgICAgICAvKiBjb2RlIGhpZ2ggb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gTTJPX0JJVFMpOworCisKKyAgICAgICAgICAgIGlmIChpcCA+PSBpcF9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWkgPSBpcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgIC8qIDJjKSBJbnNlcnQgcGhyYXNlcyAoYmVnaW5uaW5nIHdpdGggaWkrMSkgaW50byB0aGUgZGljdGlvbmFyeS4gKi8KKworI2lmIChDTEVWRUwgPT0gOSkgfHwgKENMRVZFTCA+PSA3ICYmIE0yTF9CSVRTIDw9IDQpIHx8IChDTEVWRUwgPj0gNSAmJiBNMkxfQklUUyA8PSAzKQorICAgICAgICAvKiBJbnNlcnQgdGhlIHdob2xlIG1hdGNoIChpaSsxKS4uKGlwLTEpIGludG8gZGljdGlvbmFyeS4gICovCisgICAgICAgICAgICArK2lpOworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgIERWQUxfTkVYVChkdixpaSk7CisjaWYgMAorICAgICAgICAgICAgICAgIFVQREFURV9EKGRpY3QsZHJ1bixkdixpaSxpbik7CisjZWxzZQorICAgICAgICAgICAgICAgIGRpY3RbIERJTkRFWChkdixpaSkgXSA9IERFTlRSWShpaSxpbik7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBNSQorICAgICAgICAgICAgfSB3aGlsZSAoKytpaSA8IGlwKTsKKyAgICAgICAgICAgIERWQUxfTkVYVChkdixpaSk7CisgICAgICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworICAgICAgICAgICAgRFZBTF9BU1NFUlQoZHYsaXApOworI2VsaWYgKENMRVZFTCA+PSAzKQorICAgICAgICAgICAgU0kgICBESSBESSAgIFhJCisjZWxpZiAoQ0xFVkVMID49IDIpCisgICAgICAgICAgICBTSSAgIERJICAgICAgWEkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgZWxzZQorCisgICAgICAgIHsKKyAgICAgICAgLyogd2UndmUgZm91bmQgYSBsb25nIG1hdGNoIC0gc2VlIGhvdyBmYXIgd2UgY2FuIHN0aWxsIGdvICovCisgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZW5kOworCisgICAgICAgICAgICBhc3NlcnQoaXAgPD0gaW5fZW5kKTsKKyAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCAtIChNMl9NQVhfTEVOICsgMSkpOworICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAobV9wb3Nfc2F2LGlpLChsem9fdWludCkoaXAtaWkpKSA9PSAwKTsKKworI2lmIChERF9CSVRTID4gMCkKKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA9PSAobHpvX3VpbnQpKGlwLWlpKSk7CisgICAgICAgICAgICBtX3BvcyA9IGlwIC0gbV9vZmY7CisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPT0gbV9wb3Nfc2F2ICsgbV9sZW4pOworI2VuZGlmCisKKyAgICAgICAgICAgIGlmIChwZChpbl9lbmQsaXApIDw9IChNM19NQVhfTEVOIC0gTTNfTUlOX0xFTikpCisgICAgICAgICAgICAgICAgZW5kID0gaW5fZW5kOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGVuZCA9IGlwICsgKE0zX01BWF9MRU4gLSBNM19NSU5fTEVOKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoZW5kIDwgaW5fZW5kKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKGlwIDwgZW5kICAmJiAgKm1fcG9zID09ICppcCkKKyAgICAgICAgICAgICAgICBtX3BvcysrLCBpcCsrOworICAgICAgICAgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisKKyAgICAgICAgICAgIC8qIDJhKSBjb21wdXRlIG1hdGNoIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgIG1fbGVuID0gcGQoaXAsIGlpKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTNfTUlOX0xFTik7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuIDw9IE0zX01BWF9MRU4pOworCisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID49IE0zX01JTl9PRkZTRVQpOworICAgICAgICAgICAgICAgIGFzc2VydChtX29mZiA8PSBNM19NQVhfT0ZGU0VUKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWktbV9vZmYgPT0gbV9wb3Nfc2F2KTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChtX3Bvc19zYXYsaWksbV9sZW4pID09IDApOworICAgICAgICAgICAgICAgIGFzc2VydChwZChpcCxtX3BvcykgPT0gbV9vZmYpOworCisgICAgICAgIC8qIDJiKSBjb2RlIHRoZSBtYXRjaCAqLworICAgICAgICAgICAgbV9vZmYgLT0gTTNfTUlOX09GRlNFVCAtIE0zX0VPRl9PRkZTRVQ7CisgICAgICAgICAgICAvKiBjb2RlIGxvbmcgbWF0Y2ggZmxhZyArIGxvdyBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgoKE1TSVpFIC0gMSkgPDwgTTNPX0JJVFMpIHwgKG1fb2ZmICYgTTNPX01BU0spKTsKKyAgICAgICAgICAgIC8qIGNvZGUgaGlnaCBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiBNM09fQklUUyk7CisgICAgICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiAqLworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbiAtIE0zX01JTl9MRU4pOworCisKKyAgICAgICAgICAgIGlmIChpcCA+PSBpcF9lbmQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWkgPSBpcDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworCisgICAgICAgIC8qIDJjKSBJbnNlcnQgcGhyYXNlcyAoYmVnaW5uaW5nIHdpdGggaWkrMSkgaW50byB0aGUgZGljdGlvbmFyeS4gKi8KKyNpZiAoQ0xFVkVMID09IDkpCisgICAgICAgIC8qIEluc2VydCB0aGUgd2hvbGUgbWF0Y2ggKGlpKzEpLi4oaXAtMSkgaW50byBkaWN0aW9uYXJ5LiAgKi8KKyAgICAgICAgLyogVGhpcyBpcyBub3QgcmVjb21tZW5kZWQgYmVjYXVzZSBpdCBjYW4gYmUgc2xvdy4gKi8KKyAgICAgICAgICAgICsraWk7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyNpZiAwCisgICAgICAgICAgICAgICAgVVBEQVRFX0QoZGljdCxkcnVuLGR2LGlpLGluKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZGljdFsgRElOREVYKGR2LGlpKSBdID0gREVOVFJZKGlpLGluKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIE1JCisgICAgICAgICAgICB9IHdoaWxlICgrK2lpIDwgaXApOworICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCk7CisgICAgICAgICAgICBEVkFMX0FTU0VSVChkdixpcCk7CisjZWxpZiAoQ0xFVkVMID49IDgpCisgICAgICAgICAgICBTSSAgIERJIERJIERJIERJIERJIERJIERJIERJICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNykKKyAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgREkgREkgREkgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSA2KQorICAgICAgICAgICAgU0kgICBESSBESSBESSBESSBESSBESSAgICAgICAgIFhJCisjZWxpZiAoQ0xFVkVMID49IDUpCisgICAgICAgICAgICBTSSAgIERJIERJIERJIERJICAgICAgICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNCkKKyAgICAgICAgICAgIFNJICAgREkgREkgREkgICAgICAgICAgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSAzKQorICAgICAgICAgICAgU0kgICBESSBESSAgICAgICAgICAgICAgICAgICAgIFhJCisjZWxpZiAoQ0xFVkVMID49IDIpCisgICAgICAgICAgICBTSSAgIERJICAgICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbmRpZgorICAgICAgICB9CisKKyAgICAgICAgLyogaWkgbm93IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGl0ZXJhbCBydW4gKi8KKyAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYV9jci5jaCBiL2x6by0yLjAzL3NyYy9sem8xYV9jci5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MmUxYjI3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFhX2NyLmNoCkBAIC0wLDAgKzEsMTI4IEBACisvKiBsem8xYV9jci5jaCAtLSBsaXRlcmFsIHJ1biBoYW5kbGluZyBmb3IgdGhlIHRoZSBMWk8xQSBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8gcGFja2FnZSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaTzFBX0NSX0gKKyNkZWZpbmUgX19MWk8xQV9DUl9ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb2RlIGEgbGl0ZXJhbCBydW4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGx6b19ieXRlcAorc3RvcmVfcnVuKGx6b19ieXRlcCBjb25zdCBvbywgY29uc3QgbHpvX2J5dGVwIGNvbnN0IGlpLCBsem9fdWludCByX2xlbikKK3sKKyAgICByZWdpc3RlciBsem9fYnl0ZXAgb3A7CisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIHJlZ2lzdGVyIGx6b191aW50IHQ7CisKKyAgICBvcCA9IG9vOworICAgIGlwID0gaWk7CisgICAgYXNzZXJ0KHJfbGVuID4gMCk7CisKKyAgICAvKiBjb2RlIGEgbG9uZyBSMCBydW4gKi8KKyAgICBpZiAocl9sZW4gPj0gNTEyKQorICAgIHsKKyAgICAgICAgdW5zaWduZWQgcl9iaXRzID0gNjsgICAgICAgIC8qIDI1NiA8PCA2ID09IDE2Mzg0ICovCisgICAgICAgIGx6b191aW50IHR0ID0gMzI3Njh1OworCisgICAgICAgIHdoaWxlIChyX2xlbiA+PSAodCA9IHR0KSkKKyAgICAgICAgeworICAgICAgICAgICAgcl9sZW4gLT0gdDsKKyAgICAgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSAoUjBNQVggLSBSME1JTik7CisgICAgICAgICAgICBNRU1DUFk4X0RTKG9wLCBpcCwgdCk7CisgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5yMGxvbmdfcnVucysrKTsKKyAgICAgICAgfQorICAgICAgICB0dCA+Pj0gMTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaWYgKHJfbGVuID49ICh0ID0gdHQpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJfbGVuIC09IHQ7CisgICAgICAgICAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IExaT19CWVRFKChSMEZBU1QgLSBSME1JTikgKyByX2JpdHMpOworICAgICAgICAgICAgICAgIE1FTUNQWThfRFMob3AsIGlwLCB0KTsKKyAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5yMGxvbmdfcnVucysrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR0ID4+PSAxOworICAgICAgICB9IHdoaWxlICgtLXJfYml0cyA+IDApOworICAgIH0KKyAgICBhc3NlcnQocl9sZW4gPCA1MTIpOworCisgICAgd2hpbGUgKHJfbGVuID49ICh0ID0gUjBGQVNUKSkKKyAgICB7CisgICAgICAgIHJfbGVuIC09IHQ7CisgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSAoUjBGQVNUIC0gUjBNSU4pOworICAgICAgICBNRU1DUFk4X0RTKG9wLCBpcCwgdCk7CisgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPnIwZmFzdF9ydW5zKyspOworICAgIH0KKworICAgIHQgPSByX2xlbjsKKyAgICBpZiAodCA+PSBSME1JTikKKyAgICB7CisgICAgICAgIC8qIGNvZGUgYSBzaG9ydCBSMCBydW4gKi8KKyAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IExaT19CWVRFKHQgLSBSME1JTik7CisgICAgICAgIE1FTUNQWV9EUyhvcCwgaXAsIHQpOworICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5yMHNob3J0X3J1bnMrKyk7CisgICAgfQorICAgIGVsc2UgaWYgKHQgPiAwKQorICAgIHsKKyAgICAgICAgLyogY29kZSBhIHNob3J0IGxpdGVyYWwgcnVuICovCisgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5zKyspOworICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5saXRfcnVuW3RdKyspOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICBNRU1DUFlfRFMob3AsIGlwLCB0KTsKKyAgICB9CisKKyAgICByZXR1cm4gb3A7Cit9CisKKworCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFhX2RlLmggYi9sem8tMi4wMy9zcmMvbHpvMWFfZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzY5M2IxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFhX2RlLmgKQEAgLTAsMCArMSwxNTggQEAKKy8qIGx6bzFhX2RlLmggLS0gZGVmaW5pdGlvbnMgZm9yIHRoZSB0aGUgTFpPMUEgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPIHBhY2thZ2UgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKyNpZm5kZWYgX19MWk9fREVGU19ICisjZGVmaW5lIF9fTFpPX0RFRlNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgICBGb3JtYXQgb2YgdGhlIG1hcmtlciBieXRlCisKKworICAgICA3NjU0MzIxMAorICAgICAtLS0tLS0tLQorICAgICAwMDAwMDAwMCAgIGEgbG9uZyBsaXRlcmFsIHJ1biAoJ1IwJyBydW4pIC0gdGhlcmUgYXJlIHNob3J0IGFuZCBsb25nIFIwIHJ1bnMKKyAgICAgMDAwcnJycnIgICBhIHNob3J0IGxpdGVyYWwgcnVuIHdpdGggbGVuIHIKKyAgICAgbW1tb29vb28gICBhIHNob3J0IG1hdGNoIChsZW4gPSAyK20sIG8gPSBvZmZzZXQgbG93IGJpdHMpCisgICAgIDExMW9vb29vICAgYSBsb25nIG1hdGNoIChvID0gb2Zmc2V0IGxvdyBiaXRzKQorKi8KKworCisjZGVmaW5lIFJTSVpFICAgKDEgPDwgUkJJVFMpCisjZGVmaW5lIFJNQVNLICAgKFJTSVpFIC0gMSkKKworI2RlZmluZSBNQklUUyAgICg4IC0gT0JJVFMpCisjZGVmaW5lIE1TSVpFICAgKDEgPDwgTUJJVFMpCisjZGVmaW5lIE1NQVNLICAgKE1TSVpFIC0gMSkKKworI2RlZmluZSBPQklUUyAgIFJCSVRTICAgICAgICAgICAgICAgLyogb2Zmc2V0IGFuZCBydW4tbGVuZ3RoIHVzZSBzYW1lIGJpdHMgKi8KKyNkZWZpbmUgT1NJWkUgICAoMSA8PCBPQklUUykKKyNkZWZpbmUgT01BU0sgICAoT1NJWkUgLSAxKQorCisKKy8qIGFkZGl0aW9uYWwgYml0cyBmb3IgY29kaW5nIHRoZSBsZW5ndGggaW4gYSBsb25nIG1hdGNoICovCisjZGVmaW5lIExCSVRTICAgOAorI2RlZmluZSBMU0laRSAgICgxIDw8IExCSVRTKQorI2RlZmluZSBMTUFTSyAgIChMU0laRSAtIDEpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBzb21lIG1hY3JvcyB0byBpbXByb3ZlIHJlYWRhYmlsaXR5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qIE1pbmltdW0gbGVuIG9mIGEgbWF0Y2ggKi8KKyNkZWZpbmUgTUlOX01BVENIICAgICAgICAgICAzCisjZGVmaW5lIFRIUkVTSE9MRCAgICAgICAgICAgKE1JTl9NQVRDSCAtIDEpCisKKy8qIE1pbi0vTWF4aW11bSBsZW4gb2YgYSBtYXRjaCBjb2RlZCBpbiAyIGJ5dGVzICovCisjZGVmaW5lIE1JTl9NQVRDSF9TSE9SVCAgICAgKE1JTl9NQVRDSCkKKyNkZWZpbmUgTUFYX01BVENIX1NIT1JUICAgICAoTUlOX01BVENIX1NIT1JUICsgKE1TSVpFIC0gMikgLSAxKQorLyogd2h5IChNU0laRSAtIDIpID8gYmVjYXVzZSAwIGlzIHVzZWQgdG8gbWFyayBydW5zLAorICogICAgICAgICAgICAgICAgICAgYW5kIE1TSVpFLTEgaXMgdXNlZCB0byBtYXJrIGEgbG9uZyBtYXRjaCAqLworCisvKiBNaW4tL01heGltdW0gbGVuIG9mIGEgbWF0Y2ggY29kZWQgaW4gMyBieXRlcyAqLworI2RlZmluZSBNSU5fTUFUQ0hfTE9ORyAgICAgIChNQVhfTUFUQ0hfU0hPUlQgKyAxKQorI2RlZmluZSBNQVhfTUFUQ0hfTE9ORyAgICAgIChNSU5fTUFUQ0hfTE9ORyArIExTSVpFIC0gMSkKKworLyogTWluLS9NYXhpbXVtIG9mZnNldCBvZiBhIG1hdGNoICovCisjZGVmaW5lIE1JTl9PRkZTRVQgICAgICAgICAgMQorI2RlZmluZSBNQVhfT0ZGU0VUICAgICAgICAgICgxIDw8IChDSEFSX0JJVCArIE9CSVRTKSkKKworCisvKiBSMCBsaXRlcmFsIHJ1biAoYSBsb25nIHJ1bikgKi8KKworI2RlZmluZSBSME1JTiAgIChSU0laRSkgICAgICAgICAgICAgLyogTWluaW11bSBsZW4gb2YgUjAgcnVuIG9mIGxpdGVyYWxzICovCisjZGVmaW5lIFIwTUFYICAgKFIwTUlOICsgMjU1KSAgICAgICAvKiBNYXhpbXVtIGxlbiBvZiBSMCBydW4gb2YgbGl0ZXJhbHMgKi8KKyNkZWZpbmUgUjBGQVNUICAoUjBNQVggJiB+NykgICAgICAgIC8qIFIwTUFYIGFsaWduZWQgdG8gOCBieXRlIGJvdW5kYXJ5ICovCisKKyNpZiAoUjBNQVggLSBSMEZBU1QgIT0gNykgfHwgKChSMEZBU1QgJiA3KSAhPSAwKQorIyAgZXJyb3IgInNvbWV0aGluZyB3ZW50IHdyb25nIgorI2VuZGlmCisKKy8qIDcgc3BlY2lhbCBjb2RlcyBmcm9tIFIwRkFTVCsxIC4uIFIwTUFYCisgKiB0aGVzZSBjb2RlcyBtZWFuIGxvbmcgUjAgcnVucyB3aXRoIGxlbmd0aHMKKyAqIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4ICovCisKKworLyoKKworUkJJVFMgfCBNQklUUyAgTUlOICBUSFIuICBNU0laRSAgTUFYUyAgTUlOTCAgTUFYTCAgIE1BWE8gIFIwTUFYIFIwRkFTVAorPT09PT09Kz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAzICAgfCAgIDUgICAgICAzICAgIDIgICAgIDMyICAgIDMyICAgIDMzICAgIDI4OCAgIDIwNDggICAgMjYzICAgMjU2CisgIDQgICB8ICAgNCAgICAgIDMgICAgMiAgICAgMTYgICAgMTYgICAgMTcgICAgMjcyICAgNDA5NiAgICAyNzEgICAyNjQKKyAgNSAgIHwgICAzICAgICAgMyAgICAyICAgICAgOCAgICAgOCAgICAgOSAgICAyNjQgICA4MTkyICAgIDI4NyAgIDI4MAorCisgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgREJJVFMgICAgICAgMTMKKyNpbmNsdWRlICJsem9fZGljdC5oIgorI2RlZmluZSBEVkFMX0xFTiAgICBEVkFMX0xPT0tBSEVBRAorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzEuYyBiL2x6by0yLjAzL3NyYy9sem8xYl8xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1YWZhOAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl8xLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfMS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDEKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMQorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzIuYyBiL2x6by0yLjAzL3NyYy9sem8xYl8yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc3Mjk3YgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl8yLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfMi5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDIKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMgorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzMuYyBiL2x6by0yLjAzL3NyYy9sem8xYl8zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGEyMTJmZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl8zLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfMy5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDMKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzQuYyBiL2x6by0yLjAzL3NyYy9sem8xYl80LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI1NTljZQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl80LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfNC5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDQKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMgorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzUuYyBiL2x6by0yLjAzL3NyYy9sem8xYl81LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBkOTliOQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl81LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfNS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDUKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzYuYyBiL2x6by0yLjAzL3NyYy9sem8xYl82LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFjNTJjNQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl82LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfNi5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDYKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgNQorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzcuYyBiL2x6by0yLjAzL3NyYy9sem8xYl83LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNmNWEyMQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl83LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfNy5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDcKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzguYyBiL2x6by0yLjAzL3NyYy9sem8xYl84LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQyNjM3MQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl84LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfOC5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDgKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgOAorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzkuYyBiL2x6by0yLjAzL3NyYy9sem8xYl85LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1MDk1NgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl85LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfOS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDkKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgOQorI2luY2x1ZGUgImNvbXByMWIuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiXzk5LmMgYi9sem8tMi4wMy9zcmMvbHpvMWJfOTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjI3NGEwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiXzk5LmMKQEAgLTAsMCArMSw0OSBAQAorLyogbHpvMWJfOTkuYyAtLSBtYWluIGludGVybmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICA5OQorCisjZGVmaW5lIEREQklUUyAgICAgICAgICAzCisjZGVmaW5lIENMRVZFTCAgICAgICAgICA5CisKKyNkZWZpbmUgRF9CSVRTICAgICAgICAgIDE2CisjZGVmaW5lIE1BVENIX0lQX0VORCAgICAgICAgaW5fZW5kCisjaW5jbHVkZSAiY29tcHIxYi5oIgorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfOXguYyBiL2x6by0yLjAzL3NyYy9sem8xYl85eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4MGVjYTUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfOXguYwpAQCAtMCwwICsxLDM2NSBAQAorLyogbHpvMWJfOXguYyAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUItOTk5IGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMWIuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTiAgICAgICAgICAweGZmZmZMICAgICAgICAgIC8qIHNpemUgb2YgcmluZyBidWZmZXIgKi8KKyNkZWZpbmUgVEhSRVNIT0xEICAgICAgIDIgICAgICAgICAgIC8qIGxvd2VyIGxpbWl0IGZvciBtYXRjaCBsZW5ndGggKi8KKyNkZWZpbmUgRiAgICAgICAgICAgIDIwNDggICAgICAgICAgIC8qIHVwcGVyIGxpbWl0IGZvciBtYXRjaCBsZW5ndGggKi8KKworCisjZGVmaW5lIExaTzFCCisjZGVmaW5lIExaT19DT01QUkVTU19UICBsem8xYl85OTlfdAorI2RlZmluZSBsem9fc3dkX3QgICAgICAgbHpvMWJfOTk5X3N3ZF90CisjaW5jbHVkZSAibHpvX21jaHcuY2giCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBsem9fYnl0ZXAKK2NvZGVfbWF0Y2ggKCBMWk9fQ09NUFJFU1NfVCAqYywgbHpvX2J5dGVwIG9wLCBsem9fdWludCBtX2xlbiwgbHpvX3VpbnQgbV9vZmYgKQoreworICAgIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpCisgICAgeworICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTJfTUlOX0xFTik7CisgICAgICAgIGFzc2VydChtX29mZiA+PSBNMl9NSU5fT0ZGU0VUKTsKKworICAgICAgICBtX29mZiAtPSBNMl9NSU5fT0ZGU0VUOworICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiArIGxvdyBvZmZzZXQgYml0cyAqLworICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSAoTTJfTUlOX0xFTiAtIDIpKSA8PCBNMk9fQklUUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9vZmYgJiBNMk9fTUFTSykpOworICAgICAgICAvKiBjb2RlIGhpZ2ggb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiBNMk9fQklUUyk7CisgICAgICAgIGMtPm0yX20rKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fbGVuID49IE0zX01JTl9MRU4pOworICAgICAgICBhc3NlcnQobV9vZmYgPD0gTTNfTUFYX09GRlNFVCk7CisKKyAgICAgICAgbV9vZmYgLT0gTTNfTUlOX09GRlNFVCAtIE0zX0VPRl9PRkZTRVQ7CisgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgIGlmIChtX2xlbiA8PSBNM19NQVhfTEVOKQorICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAoTTNfTUlOX0xFTiAtIDEpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IE00X01JTl9MRU4pOworICAgICAgICAgICAgLyogY29kZSBNNCBtYXRjaCBsZW4gZmxhZyAqLworICAgICAgICAgICAgKm9wKysgPSBNNF9NQVJLRVI7CisgICAgICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiAqLworICAgICAgICAgICAgbV9sZW4gLT0gTTRfTUlOX0xFTiAtIDE7CisgICAgICAgICAgICB3aGlsZSAobV9sZW4gPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9sZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbik7CisgICAgICAgIH0KKyAgICAgICAgLyogY29kZSBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiAmIE0zT19NQVNLKTsKKyAgICAgICAgLyogY29kZSBoaWdoIG9mZnNldCBiaXRzICovCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gTTNPX0JJVFMpOworCisgICAgICAgIGMtPnIxX21fbGVuID0gMDsKKyAgICAgICAgYy0+bTNfbSsrOworICAgIH0KKyAgICByZXR1cm4gb3A7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB0aGlzIGlzIGEgcHVibGljIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIGEgaGVhZGVyIGZpbGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihpbnQpCitsem8xYl85OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKTsKKworTFpPX1BVQkxJQyhpbnQpCitsem8xYl85OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKQoreworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX3VpbnQgbGl0OworICAgIGx6b191aW50IG1fbGVuLCBtX29mZjsKKyAgICBMWk9fQ09NUFJFU1NfVCBjYzsKKyAgICBMWk9fQ09NUFJFU1NfVCAqIGNvbnN0IGMgPSAmY2M7CisgICAgbHpvX3N3ZF9wIGNvbnN0IHN3ZCA9IChsem9fc3dkX3ApIHdya21lbTsKKyAgICBpbnQgcjsKKworICAgIC8qIHNhbml0eSBjaGVjayAqLworICAgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKExaTzFCXzk5OV9NRU1fQ09NUFJFU1MgPj0gU0laRU9GX0xaT19TV0RfVCkKKworICAgIGMtPmluaXQgPSAwOworICAgIGMtPmlwID0gYy0+aW4gPSBpbjsKKyAgICBjLT5pbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjLT5jYiA9IGNiOworICAgIGMtPnIxX3IgPSBjLT5tM19yID0gYy0+bTJfbSA9IGMtPm0zX20gPSAwOworCisgICAgb3AgPSBvdXQ7CisgICAgaWkgPSBjLT5pcDsgICAgICAgICAgICAgLyogcG9pbnQgdG8gc3RhcnQgb2YgbGl0ZXJhbCBydW4gKi8KKyAgICBsaXQgPSAwOworICAgIGMtPnIxX21fbGVuID0gMDsKKworICAgIHIgPSBpbml0X21hdGNoKGMsc3dkLE5VTEwsMCwwKTsKKyAgICBpZiAociAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKyAgICBpZiAobWF4X2NoYWluID4gMCkKKyAgICAgICAgc3dkLT5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CisKKyAgICByID0gZmluZF9tYXRjaChjLHN3ZCwwLDApOworICAgIGlmIChyICE9IDApCisgICAgICAgIHJldHVybiByOworICAgIHdoaWxlIChjLT5sb29rID4gMCkKKyAgICB7CisgICAgICAgIGludCBsYXp5X21hdGNoX21pbl9nYWluID0gLTE7CisgICAgICAgIGx6b191aW50IGFoZWFkID0gMDsKKworICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICBtX29mZiA9IGMtPm1fb2ZmOworCisjaWYgMAorICAgICAgICBwcmludGYoIiU1bGQ6ICU1ZCBsZW46JTNkIG9mZjolNWRcbiIsIChjLT5pcC1jLT5sb29rKS1pbiwgYy0+bG9vaywKKyAgICAgICAgICAgICAgICBtX2xlbiwgbV9vZmYpOworI2VuZGlmCisKKyAgICAgICAgYXNzZXJ0KGMtPmlwIC0gYy0+bG9vayA+PSBpbik7CisgICAgICAgIGlmIChsaXQgPT0gMCkKKyAgICAgICAgICAgIGlpID0gYy0+aXAgLSBjLT5sb29rOworICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgYXNzZXJ0KHN3ZC0+Yl9jaGFyID09ICooYy0+aXAgLSBjLT5sb29rKSk7CisKKyAgICAgICAgaWYgKChtX2xlbiA8IE0yX01JTl9MRU4pIHx8CisgICAgICAgICAgICAobV9sZW4gPCBNM19NSU5fTEVOICYmIG1fb2ZmID4gTTJfTUFYX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiA+PSBpbik7CisgICAgICAgICAgICBhc3NlcnQoYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYgKyBtX2xlbiA8IGMtPmlwKTsKKyAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKGMtPmlwIC0gYy0+bG9vaywgYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisKKyAgICAgICAgICAgIGlmIChsaXQgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBjdXJyZW50IGxpdGVyYWwgcnVuOiBkbyBub3QgdHJ5IGEgbGF6eSBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICBpZiB0aGUgbGl0ZXJhbCBjb3VsZCBiZSBjb2RlZCBpbnRvIGEgcjEgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBpZiAobGl0ID09IDEgJiYgYy0+cjFfbV9sZW4gPT0gTTJfTUlOX0xFTikKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IC0xOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisKKyNpZiAoTTJfTUlOX0xFTiA9PSAyKQorICAgICAgICAgICAgICAgIGlmIChtX2xlbiA9PSAyKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogZG9uJ3QgY29kZSBhIG1hdGNoIG9mIGxlbiAyIGlmIHdlIGhhdmUgdG8KKyAgICAgICAgICAgICAgICAgICAgICAgY29kZSBhIGxpdGVyYWwgcnVuLiBDb2RlIGEgbGl0ZXJhbCBpbnN0ZWFkLiAqLworICAgICAgICAgICAgICAgICAgICBtX2xlbiA9IDA7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisjaWYgKE0yX01JTl9MRU4gPT0gTTNfTUlOX0xFTikKKyAgICAgICAgICAgICAgICBpZiAobV9sZW4gPT0gTTJfTUlOX0xFTiAmJiBtX29mZiA+IE0yX01BWF9PRkZTRVQpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjb2RlIGEgTTMgbWF0Y2ggb2YgbGVuIDMgaWYgd2UgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGEgbGl0ZXJhbCBydW4uIENvZGUgYSBsaXRlcmFsIGluc3RlYWQuICovCisgICAgICAgICAgICAgICAgICAgIG1fbGVuID0gMDsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBubyBjdXJyZW50IGxpdGVyYWwgcnVuOiBvbmx5IHRyeSBhIGxhenkgbWF0Y2gsCisgICAgICAgICAgICAgICAgICAgaWYgdGhlIGxpdGVyYWwgY291bGQgYmUgY29kZWQgaW50byBhIHIxIG1hdGNoICovCisgICAgICAgICAgICAgICAgaWYgKGMtPnIxX21fbGVuID09IE0yX01JTl9MRU4pCisgICAgICAgICAgICAgICAgICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gPSAwOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgICAvKiB0cnkgYSBsYXp5IG1hdGNoICovCisgICAgICAgIGlmIChtX2xlbiA9PSAwKQorICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IC0xOworICAgICAgICBpZiAobGF6eV9tYXRjaF9taW5fZ2FpbiA+PSAwICYmIGMtPmxvb2sgPiBtX2xlbikKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID4gMCk7CisKKyAgICAgICAgICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDEsMCk7CisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgICAgIGFzc2VydChjLT5sb29rID4gMCk7CisKKyAgICAgICAgICAgIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQgJiYKKyAgICAgICAgICAgICAgICBjLT5tX29mZiA+IE0yX01BWF9PRkZTRVQpCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiArPSAxOworCisgICAgICAgICAgICBpZiAoYy0+bV9sZW4gPj0gbV9sZW4gKyBsYXp5X21hdGNoX21pbl9nYWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGMtPmxhenkrKzsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgICAgICAgICAgbV9sZW4gPSBjLT5tX2xlbjsKKyAgICAgICAgICAgICAgICBtX29mZiA9IGMtPm1fb2ZmOworICAgICAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKGMtPmlwIC0gYy0+bG9vaywgYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9sZW4pID09IDApOworI2VuZGlmCisgICAgICAgICAgICAgICAgbGl0Kys7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGlpICsgbGl0ID09IGMtPmlwIC0gYy0+bG9vayk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYWhlYWQgPSAxOworICAgICAgICAgICAgICAgIGFzc2VydChpaSArIGxpdCArIDEgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICB9CisgICAgICAgIGFzc2VydChpaSArIGxpdCArIGFoZWFkID09IGMtPmlwIC0gYy0+bG9vayk7CisKKworICAgICAgICBpZiAobV9sZW4gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogYSBsaXRlcmFsICovCisgICAgICAgICAgICBsaXQrKzsKKyAgICAgICAgICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDEsMCk7CisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIDEgLSBzdG9yZSBydW4gKi8KKyAgICAgICAgICAgIGlmIChsaXQgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGNvZGUgY3VycmVudCBsaXRlcmFsIHJ1biAqLworICAgICAgICAgICAgICAgIGlmIChsaXQgPT0gMSAmJiBjLT5yMV9tX2xlbiA9PSBNMl9NSU5fTEVOKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgLyogQ29kZSBhIGNvbnRleHQgc2Vuc2l0aXZlIFIxIG1hdGNoLiAqLworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG9wWy0yXSA+PiBNMk9fQklUUykgPT0gKE0yX01BUktFUiA+PiBNMk9fQklUUykpOworICAgICAgICAgICAgICAgICAgICBvcFstMl0gJj0gTTJPX01BU0s7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydCgob3BbLTJdID4+IE0yT19CSVRTKSA9PSAwKTsKKyAgICAgICAgICAgICAgICAgICAgLyogY29weSAxIGxpdGVyYWwgKi8KKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAqaWkrKzsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlpICsgYWhlYWQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgICAgICAgICAgICAgYy0+cjFfcisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBvcCA9IFNUT1JFX1JVTihvcCxpaSxsaXQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobGl0IDwgUjBGQVNUKQorICAgICAgICAgICAgICAgICAgICBjLT5yMV9tX2xlbiA9IG1fbGVuOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgYy0+cjFfbV9sZW4gPSAwOworICAgICAgICAgICAgICAgIGxpdCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYy0+cjFfbV9sZW4gPSAwOworCisgICAgICAgICAgICAvKiAyIC0gY29kZSBtYXRjaCAqLworICAgICAgICAgICAgb3AgPSBjb2RlX21hdGNoKGMsb3AsbV9sZW4sbV9vZmYpOworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsbV9sZW4sMSthaGVhZCk7CisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGMtPmNvZGVzaXplID0gcGQob3AsIG91dCk7CisgICAgfQorCisKKyAgICAvKiBzdG9yZSBmaW5hbCBydW4gKi8KKyAgICBpZiAobGl0ID4gMCkKKyAgICAgICAgb3AgPSBTVE9SRV9SVU4ob3AsaWksbGl0KTsKKworI2lmIGRlZmluZWQoTFpPX0VPRl9DT0RFKQorICAgICpvcCsrID0gTTNfTUFSS0VSIHwgMTsKKyAgICAqb3ArKyA9IDA7CisgICAgKm9wKysgPSAwOworI2VuZGlmCisKKyAgICBjLT5jb2Rlc2l6ZSA9IHBkKG9wLCBvdXQpOworICAgIGFzc2VydChjLT50ZXh0c2l6ZSA9PSBpbl9sZW4pOworCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKworICAgIGlmIChjLT5jYiAmJiBjLT5jYi0+bnByb2dyZXNzKQorICAgICAgICAoKmMtPmNiLT5ucHJvZ3Jlc3MpKGMtPmNiLCBjLT50ZXh0c2l6ZSwgYy0+Y29kZXNpemUsIDApOworCisjaWYgMAorICAgIHByaW50ZigiJWxkICVsZCAtPiAlbGQ6ICVsZCAlbGQgJWxkICVsZCAlbGRcbiIsCisgICAgICAgIChsb25nKSBjLT50ZXh0c2l6ZSwgKGxvbmcpaW5fbGVuLCAobG9uZykgYy0+Y29kZXNpemUsCisgICAgICAgIGMtPnIxX3IsIGMtPm0zX3IsIGMtPm0yX20sIGMtPm0zX20sIGMtPmxhenkpOworI2VuZGlmCisgICAgcmV0dXJuIExaT19FX09LOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK2x6bzFiXzk5OV9jb21wcmVzcyAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xYl85OTlfY29tcHJlc3NfY2FsbGJhY2soaW4saW5fbGVuLG91dCxvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsem9fY2FsbGJhY2tfcCkgMCwgMCk7Cit9CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYl9jLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2MuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdlZjRmZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl9jLmNoCkBAIC0wLDAgKzEsMjcwIEBACisvKiBsem8xYl9jLmNoIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xQiBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChMWk9fSEFWRV9SMSkgJiYgIWRlZmluZWQoTFpPX05PX1IxKQorIyAgZGVmaW5lIExaT19IQVZFX1IxCisjZW5kaWYKKworI2lmICFkZWZpbmVkKExaT19IQVZFX00zKSAmJiAhZGVmaW5lZChMWk9fTk9fTTMpCisjICBpZiAoTTNPX0JJVFMgPCA4KQorIyAgICBkZWZpbmUgTFpPX0hBVkVfTTMKKyMgIGVuZGlmCisjZW5kaWYKKworCisjZGVmaW5lIE1JCisjZGVmaW5lIFNJICAgICAgTUkKKyNpZiAoRERfQklUUyA+IDApCisjZGVmaW5lIERJICAgICAgKytpaTsgRFZBTF9ORVhUKGR2LGlpKTsgVVBEQVRFX0QoZGljdCxkcnVuLGR2LGlpLGluKTsgTUkKKyNkZWZpbmUgWEkgICAgICBhc3NlcnQoaWkgPCBpcCk7IGlpID0gaXA7IERWQUxfRklSU1QoZHYsKGlwKSk7CisjZWxzZQorI2RlZmluZSBESSAgICAgICsraWk7IERJTkRFWDEoZGluZGV4LGlpKTsgVVBEQVRFX0koZGljdCwwLGRpbmRleCxpaSxpbik7IE1JCisjZGVmaW5lIFhJICAgICAgYXNzZXJ0KGlpIDwgaXApOyBpaSA9IGlwOworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21wcmVzcyBhIGJsb2NrIG9mIGRhdGEuCisvLworLy8gSSByZWFsbHkgYXBvbG9naXplIGZvciB0aGlzIHNwYWdoZXR0aSBjb2RlLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFJJVkFURShpbnQpCitkb19jb21wcmVzcyAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisjaWYgKEREX0JJVFMgPiAwKQorI2lmIGRlZmluZWQoX19MWk9fSEFTSF9JTkNSRU1FTlRBTCkKKyAgICBsem9feGludCBkdjsKKyNlbmRpZgorICAgIHVuc2lnbmVkIGRydW4gPSAwOworI2VuZGlmCisgICAgbHpvX2J5dGVwIG9wOworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW4gLSBNSU5fTE9PS0FIRUFEOworICAgIGNvbnN0IGx6b19ieXRlcCBpaTsKKyNpZiBkZWZpbmVkKExaT19IQVZFX1IxKQorICAgIGNvbnN0IGx6b19ieXRlcCByMSA9IGlwX2VuZDsgICAgLyogcG9pbnRlciBmb3IgUjEgbWF0Y2ggKG5vbmUgeWV0KSAqLworI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fSEFWRV9NMykKKyAgICBsem9fYnl0ZXAgbTMgPSBvdXQgKyAxOyAgICAgICAgIC8qIHBvaW50ZXIgYWZ0ZXIgbGFzdCBtMy9tNCBtYXRjaCAqLworI2VuZGlmCisKKyAgICBsem9fZGljdF9wIGNvbnN0IGRpY3QgPSAobHpvX2RpY3RfcCkgd3JrbWVtOworCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgIGx6b19zdGF0cy0+cl9iaXRzICAgPSBSX0JJVFM7CisgICAgbHpvX3N0YXRzLT5tM29fYml0cyA9IE0zT19CSVRTOworICAgIGx6b19zdGF0cy0+ZGRfYml0cyAgPSBERF9CSVRTOworICAgIGx6b19zdGF0cy0+Y2xldmVsICAgPSBDTEVWRUw7CisgICAgbHpvX3N0YXRzLT5kX2JpdHMgICA9IERfQklUUzsKKyAgICBsem9fc3RhdHMtPm1pbl9sb29rYWhlYWQgID0gTUlOX0xPT0tBSEVBRDsKKyAgICBsem9fc3RhdHMtPm1heF9sb29rYmVoaW5kID0gTUFYX0xPT0tCRUhJTkQ7CisgICAgbHpvX3N0YXRzLT5jb21wcmVzc19pZCAgICA9IExaT19DUFBfTUFDUk9fRVhQQU5EKENPTVBSRVNTX0lEKTsKKyNlbmRpZgorCisgICAgLyogaW5pdCBkaWN0aW9uYXJ5ICovCisjaWYgZGVmaW5lZChMWk9fREVURVJNSU5JU1RJQykKKyAgICBCWkVSTzhfUFRSKHdya21lbSxzaXplb2YobHpvX2RpY3RfdCksRF9TSVpFKTsKKyNlbmRpZgorCisKKyAgICBvcCA9IG91dDsKKyAgICBpcCA9IGluOworICAgIGlpID0gaXA7ICAgICAgICAgICAgLyogcG9pbnQgdG8gc3RhcnQgb2YgY3VycmVudCBsaXRlcmFsIHJ1biAqLworCisKKyNpZiAoRERfQklUUyA+IDApCisgICAgRFZBTF9GSVJTVChkdixpcCk7CisgICAgVVBEQVRFX0QoZGljdCxkcnVuLGR2LGlwLGluKTsKKyAgICBpcCsrOworICAgIERWQUxfTkVYVChkdixpcCk7CisjZWxzZQorICAgIGlwKys7CisjZW5kaWYKKworICAgIGFzc2VydChpcCA8IGlwX2VuZCk7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyNpZiAhZGVmaW5lZChOREVCVUcpCisgICAgICAgIGNvbnN0IGx6b19ieXRlcCBtX3Bvc19zYXYgPSBOVUxMOworI2VuZGlmCisgICAgICAgIGx6b191aW50IG1fb2ZmOworI2lmIChERF9CSVRTID09IDApCisgICAgICAgIGx6b191aW50IGRpbmRleDsKKyNlbmRpZgorICAgICAgICBsem9fdWludCBtX2xlbjsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHNlYXJjaCBmb3IgYSBtYXRjaAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoTFpPX1NFQVJDSF9NQVRDSF9JTkNMVURFX0ZJTEUpCisjICBkZWZpbmUgTFpPX1NFQVJDSF9NQVRDSF9JTkNMVURFX0ZJTEUgICAgICJsem8xYl9zbS5jaCIKKyNlbmRpZgorCisjaW5jbHVkZSBMWk9fU0VBUkNIX01BVENIX0lOQ0xVREVfRklMRQorCisKKyNpZiAhZGVmaW5lZChMWk9fVEVTVF9NQVRDSF9JTkNMVURFX0ZJTEUpCisjICBkZWZpbmUgTFpPX1RFU1RfTUFUQ0hfSU5DTFVERV9GSUxFICAgICAgICJsem8xYl90bS5jaCIKKyNlbmRpZgorCisjaW5jbHVkZSBMWk9fVEVTVF9NQVRDSF9JTkNMVURFX0ZJTEUKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZm91bmQgYSBsaXRlcmFsCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKworICAgIC8qIGEgbGl0ZXJhbCAqLworbGl0ZXJhbDoKKyNpZiAoRERfQklUUyA9PSAwKQorICAgICAgICBVUERBVEVfSShkaWN0LDAsZGluZGV4LGlwLGluKTsKKyNlbmRpZgorICAgICAgICBpZiAoKytpcCA+PSBpcF9lbmQpCisgICAgICAgICAgICBicmVhazsKKyNpZiAoRERfQklUUyA+IDApCisgICAgICAgIERWQUxfTkVYVChkdixpcCk7CisjZW5kaWYKKyAgICAgICAgY29udGludWU7CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGZvdW5kIGEgbWF0Y2gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworbWF0Y2g6CisjaWYgKEREX0JJVFMgPT0gMCkKKyAgICAgICAgVVBEQVRFX0koZGljdCwwLGRpbmRleCxpcCxpbik7CisjZW5kaWYKKyAgICAgICAgLyogd2UgaGF2ZSBmb3VuZCBhIG1hdGNoIG9mIGF0IGxlYXN0IE0yX01JTl9MRU4gKi8KKworCisjaWYgIWRlZmluZWQoTFpPX0NPREVfUlVOX0lOQ0xVREVfRklMRSkKKyMgIGRlZmluZSBMWk9fQ09ERV9SVU5fSU5DTFVERV9GSUxFICAgICAibHpvMWJfY3IuY2giCisjZW5kaWYKKworI2luY2x1ZGUgTFpPX0NPREVfUlVOX0lOQ0xVREVfRklMRQorCisKKyAgICAgICAgLyogaWkgbm93IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQgbWF0Y2ggKi8KKyAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvZGUgdGhlIG1hdGNoCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAhZGVmaW5lZChMWk9fQ09ERV9NQVRDSF9JTkNMVURFX0ZJTEUpCisjICBkZWZpbmUgTFpPX0NPREVfTUFUQ0hfSU5DTFVERV9GSUxFICAgImx6bzFiX2NtLmNoIgorI2VuZGlmCisKKyNpbmNsdWRlIExaT19DT0RFX01BVENIX0lOQ0xVREVfRklMRQorCisKKyAgICAgICAgLyogaWkgbm93IHBvaW50cyB0byB0aGUgc3RhcnQgb2YgdGhlIG5leHQgbGl0ZXJhbCBydW4gKi8KKyAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKworICAgIH0KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGVuZCBvZiBibG9jaworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgIHsKKyAgICAgICAgbHpvX3VpbnQgaTsKKyAgICAgICAgY29uc3QgbHpvX2J5dGVwIHA7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IERfU0laRTsgaSsrKQorICAgICAgICB7CisgICAgICAgICAgICBwID0gZGljdFtpXTsKKyAgICAgICAgICAgIGlmIChCT1VORFNfQ0hFQ0tJTkdfT0ZGX0lOX0VYUFIocCA9PSBOVUxMIHx8IHAgPCBpbiB8fCBwID4gaW5fZW5kKSkKKyAgICAgICAgICAgICAgICBsem9fc3RhdHMtPnVudXNlZF9kaWN0X2VudHJpZXMrKzsKKyAgICAgICAgfQorICAgICAgICBsem9fc3RhdHMtPnVudXNlZF9kaWN0X2VudHJpZXNfcGVyY2VudCA9CisgICAgICAgICAgICAxMDAuMCAqIGx6b19zdGF0cy0+dW51c2VkX2RpY3RfZW50cmllcyAvIERfU0laRTsKKyAgICB9CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChMWk9fUkVUVVJOX0lGX05PVF9DT01QUkVTU0lCTEUpCisgICAgLyogcmV0dXJuIGlmIG9wID09IG91dCB0byBpbmRpY2F0ZSB0aGF0IHdlCisgICAgICogY291bGRuJ3QgY29tcHJlc3MgYW5kIGRpZG4ndCBjb3B5IGFueXRoaW5nLgorICAgICAqLworICAgIGlmIChvcCA9PSBvdXQpCisgICAgeworICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgICAgIHJldHVybiBMWk9fRV9OT1RfQ09NUFJFU1NJQkxFOworICAgIH0KKyNlbmRpZgorCisgICAgLyogc3RvcmUgdGhlIGZpbmFsIGxpdGVyYWwgcnVuICovCisgICAgaWYgKHBkKGluX2VuZCxpaSkgPiAwKQorICAgIHsKKyAgICAgICAgbHpvX3VpbnQgdCA9IHBkKGluX2VuZCxpaSk7CisgICAgICAgIG9wID0gU1RPUkVfUlVOKG9wLGlpLHQpOworICAgIH0KKworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09LOyAgICAgICAgICAgICAgICAvKiBjb21wcmVzc2lvbiB3ZW50IG9rICovCit9CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfY2MuYyBiL2x6by0yLjAzL3NyYy9sem8xYl9jYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1YjBmODUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfY2MuYwpAQCAtMCwwICsxLDE2NyBAQAorLyogbHpvMWJfY2MuYyAtLSBMWk8xQiBjb21wcmVzc2lvbiBpbnRlcm5hbCBlbnRyeSBwb2ludAorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2luY2x1ZGUgImNvbmZpZzFiLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21wcmVzc2lvbiBpbnRlcm5hbCBlbnRyeSBwb2ludC4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9sem8xYl9kb19jb21wcmVzcyAgICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19jb21wcmVzc190IGZ1bmMgKQoreworICAgIGludCByOworI2lmIGRlZmluZWQoTFpPX1RFU1RfQ09NUFJFU1NfT1ZFUlJVTikKKyAgICBsem9fdWludCBhdmFpbF9vdXQgPSAqb3V0X2xlbjsKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgIF9sem8xYl9zdGF0c19pbml0KGx6b19zdGF0cyk7CisgICAgbHpvX3N0YXRzLT5pbl9sZW4gPSBpbl9sZW47CisjZW5kaWYKKworCisgICAgLyogZG9uJ3QgdHJ5IHRvIGNvbXByZXNzIGEgYmxvY2sgdGhhdCdzIHRvbyBzaG9ydCAqLworICAgIGlmIChpbl9sZW4gPD0gMCkKKyAgICB7CisgICAgICAgICpvdXRfbGVuID0gMDsKKyAgICAgICAgciA9IExaT19FX09LOworICAgIH0KKyAgICBlbHNlIGlmIChpbl9sZW4gPD0gTUlOX0xPT0tBSEVBRCArIDEpCisgICAgeworI2lmIGRlZmluZWQoTFpPX1JFVFVSTl9JRl9OT1RfQ09NUFJFU1NJQkxFKQorICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgICAgIHIgPSBMWk9fRV9OT1RfQ09NUFJFU1NJQkxFOworI2Vsc2UKKyAgICAgICAgKm91dF9sZW4gPSBwZChTVE9SRV9SVU4ob3V0LGluLGluX2xlbiksIG91dCk7CisgICAgICAgIHIgPSAoKm91dF9sZW4gPiBpbl9sZW4pID8gTFpPX0VfT0sgOiBMWk9fRV9FUlJPUjsKKyNlbmRpZgorICAgIH0KKyAgICBlbHNlCisgICAgICAgIHIgPSBmdW5jKGluLGluX2xlbixvdXQsb3V0X2xlbix3cmttZW0pOworCisKKyNpZiBkZWZpbmVkKExaT19FT0ZfQ09ERSkKKyNpZiBkZWZpbmVkKExaT19URVNUX0NPTVBSRVNTX09WRVJSVU4pCisgICAgaWYgKHIgPT0gTFpPX0VfT0sgJiYgYXZhaWxfb3V0IC0gKm91dF9sZW4gPCAzKQorICAgICAgICByID0gTFpPX0VfQ09NUFJFU1NfT1ZFUlJVTjsKKyNlbmRpZgorICAgIGlmIChyID09IExaT19FX09LKQorICAgIHsKKyAgICAgICAgbHpvX2J5dGVwIG9wID0gb3V0ICsgKm91dF9sZW47CisgICAgICAgICpvcCsrID0gTTNfTUFSS0VSIHwgMTsKKyAgICAgICAgKm9wKysgPSAwOworICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICpvdXRfbGVuICs9IDM7CisgICAgfQorI2VuZGlmCisKKworI2lmIGRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisgICAgbHpvX3N0YXRzLT5vdXRfbGVuID0gKm91dF9sZW47CisgICAgbHpvX3N0YXRzLT5tYXRjaF9ieXRlcyA9CisgICAgICAgMSAqIGx6b19zdGF0cy0+bTFfbWF0Y2hlcyArIDIgKiBsem9fc3RhdHMtPm0yX21hdGNoZXMgKworICAgICAgIDMgKiBsem9fc3RhdHMtPm0zX21hdGNoZXMgKyA0ICogbHpvX3N0YXRzLT5tNF9tYXRjaGVzOworICAgIF9sem8xYl9zdGF0c19jYWxjKGx6b19zdGF0cyk7CisjZW5kaWYKKworICAgIHJldHVybiByOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gbm90ZTogdGhpcyBpcyBub3QgdGhyZWFkIHNhZmUsIGJ1dCBhcyBpdCBpcyB1c2VkIGZvciBmaW5ldHVuaW5nIG9ubHkKKy8vICAgICAgIHdlIGRvbid0IGNhcmUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI3VuZGVmIGx6b19zdGF0cworLyogbHpvX3N0YXRzX3QgaXMgc3RpbGwgZGVmaW5lZCAqLworCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorCitzdGF0aWMgbHpvX3N0YXRzX3QgbHpvX3N0YXRpc3RpY3M7Citsem9fc3RhdHNfdCAqIGNvbnN0IGx6bzFiX3N0YXRzID0gJmx6b19zdGF0aXN0aWNzOworCisKK3ZvaWQgX2x6bzFiX3N0YXRzX2luaXQobHpvX3N0YXRzX3QgKmx6b19zdGF0cykKK3sKKyAgICBsem9fbWVtc2V0KGx6b19zdGF0cywwLHNpemVvZigqbHpvX3N0YXRzKSk7Cit9CisKKwordm9pZCBfbHpvMWJfc3RhdHNfY2FsYyhsem9fc3RhdHNfdCAqbHpvX3N0YXRzKQoreworICAgIGx6b19zdGF0cy0+bWF0Y2hlcyA9CisgICAgICAgbHpvX3N0YXRzLT5tMV9tYXRjaGVzICsgbHpvX3N0YXRzLT5tMl9tYXRjaGVzICsKKyAgICAgICBsem9fc3RhdHMtPm0zX21hdGNoZXMgKyBsem9fc3RhdHMtPm00X21hdGNoZXM7CisKKyAgICBsem9fc3RhdHMtPmxpdGVyYWxfb3ZlcmhlYWQgPSBsem9fc3RhdHMtPmxpdF9ydW5zICsKKyAgICAgICAyICogKGx6b19zdGF0cy0+cjBzaG9ydF9ydW5zICsgbHpvX3N0YXRzLT5yMGZhc3RfcnVucyArCisgICAgICAgICAgICBsem9fc3RhdHMtPnIwbG9uZ19ydW5zKTsKKyAgICBsem9fc3RhdHMtPmxpdGVyYWxfYnl0ZXMgPSBsem9fc3RhdHMtPmxpdGVyYWxzICsKKyAgICAgICBsem9fc3RhdHMtPmxpdGVyYWxfb3ZlcmhlYWQ7CisKKyNpZiAwCisgICAgYXNzZXJ0KGx6b19zdGF0cy0+bWF0Y2hfYnl0ZXMgKyBsem9fc3RhdHMtPmxpdGVyYWxfYnl0ZXMgPT0KKyAgICAgICBsem9fc3RhdHMtPm91dF9sZW4pOworI2VuZGlmCisKKyAgICBsem9fc3RhdHMtPm0yX21hdGNoZXMgLT0gbHpvX3N0YXRzLT5yMV9tYXRjaGVzOworICAgIGx6b19zdGF0cy0+bTJfbWF0Y2hbTTJfTUlOX0xFTl0gLT0gbHpvX3N0YXRzLT5yMV9tYXRjaGVzOworCisgICAgaWYgKGx6b19zdGF0cy0+bGl0ZXJhbHMgPiAwKQorICAgICAgICBsem9fc3RhdHMtPmxpdGVyYWxfb3ZlcmhlYWRfcGVyY2VudCA9CisgICAgICAgICAgIDEwMC4wICogbHpvX3N0YXRzLT5saXRlcmFsX292ZXJoZWFkIC8gbHpvX3N0YXRzLT5saXRlcmFsczsKK30KKworCisjZW5kaWYKKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiX2NjLmggYi9sem8tMi4wMy9zcmMvbHpvMWJfY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTg0ZGFkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2NjLmgKQEAgLTAsMCArMSw5MyBAQAorLyogbHpvMWJfY2MuaCAtLSBkZWZpbml0aW9ucyBmb3IgdGhlIHRoZSBMWk8xQiBjb21wcmVzc2lvbiBkcml2ZXIKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaWZuZGVmIF9fTFpPMUJfQ0NfSAorI2RlZmluZSBfX0xaTzFCX0NDX0gKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWJfMV9jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xYl8yX2NvbXByZXNzX2Z1bmM7CitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFiXzNfY29tcHJlc3NfZnVuYzsKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWJfNF9jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xYl81X2NvbXByZXNzX2Z1bmM7CitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFiXzZfY29tcHJlc3NfZnVuYzsKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWJfN19jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xYl84X2NvbXByZXNzX2Z1bmM7CitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFiXzlfY29tcHJlc3NfZnVuYzsKKworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xYl85OV9jb21wcmVzc19mdW5jOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihsem9fYnl0ZXAgKQorX2x6bzFiX3N0b3JlX3J1biAoIGx6b19ieXRlcCBjb25zdCBvbywgY29uc3QgbHpvX2J5dGVwIGNvbnN0IGlpLAorICAgICAgICAgICAgICAgICAgIGx6b191aW50IHJfbGVuKTsKKworI2RlZmluZSBTVE9SRV9SVU4gICBfbHpvMWJfc3RvcmVfcnVuCisKKworbHpvX2NvbXByZXNzX3QgX2x6bzFiX2dldF9jb21wcmVzc19mdW5jKGludCBjbGV2ZWwpOworCitpbnQgX2x6bzFiX2RvX2NvbXByZXNzICAgKCBjb25zdCBsem9fYnl0ZXAgaW4sICBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NvbXByZXNzX3QgZnVuYyApOworCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYl9jbS5jaCBiL2x6by0yLjAzL3NyYy9sem8xYl9jbS5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDc4ODRiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2NtLmNoCkBAIC0wLDAgKzEsMjk0IEBACisvKiBsem8xYl9jbS5jaCAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUIgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvZGUgdGhlIG1hdGNoCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoRERfQklUUyA9PSAwKQorCisgICAgICAgIC8qIHdlIGFscmVhZHkgbWF0Y2hlZCBNMl9NSU5fTEVOIGJ5dGVzLAorICAgICAgICAgKiBtX3BvcyBhbHNvIGFscmVhZHkgYWR2YW5jZWQgTTJfTUlOX0xFTiBieXRlcyAqLworICAgICAgICBpcCArPSBNMl9NSU5fTEVOOworICAgICAgICBhc3NlcnQobV9wb3MgPCBpcCk7CisKKyAgICAgICAgLyogdHJ5IHRvIG1hdGNoIGFub3RoZXIgTTJfTUFYX0xFTiArIDEgLSBNMl9NSU5fTEVOIGJ5dGVzCisgICAgICAgICAqIHRvIHNlZSBpZiB3ZSBnZXQgbW9yZSB0aGFuIGEgTTIgbWF0Y2ggKi8KKyNkZWZpbmUgTTJfT1JfTTMgICAgKE1BVENIX00yKQorCisjZWxzZSAvKiAoRERfQklUUyA9PSAwKSAqLworCisgICAgICAgIC8qIHdlIGFscmVhZHkgbWF0Y2hlZCBtX2xlbiBieXRlcyAqLworICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTJfTUlOX0xFTik7CisgICAgICAgIGlwICs9IG1fbGVuOworICAgICAgICBhc3NlcnQoaXAgPD0gaW5fZW5kKTsKKworI2RlZmluZSBNMl9PUl9NMyAgICAobV9sZW4gPD0gTTJfTUFYX0xFTikKKworI2VuZGlmIC8qIChERF9CSVRTID09IDApICovCisKKworCisgICAgICAgIGlmIChNMl9PUl9NMykKKyAgICAgICAgeworICAgICAgICAvKiB3ZSd2ZSBmb3VuZCBhIE0yIG9yIE0zIG1hdGNoICovCisgICAgICAgICAgICBhc3NlcnQoaXAgPD0gaW5fZW5kKTsKKworICAgICAgICAvKiAyYSkgY29tcHV0ZSBtYXRjaCBwYXJhbWV0ZXJzICovCisjaWYgKEREX0JJVFMgPT0gMCkKKyAgICAgICAgICAgIGFzc2VydChwZChpcCxtX3BvcykgPT0gbV9vZmYpOworICAgICAgICAgICAgLS1pcDsgICAvKiByYW4gb25lIHRvbyBmYXIsIHBvaW50IGJhY2sgdG8gbm9uLW1hdGNoICovCisgICAgICAgICAgICBtX2xlbiA9IHBkKGlwLCBpaSk7CisjZW5kaWYKKworICAgICAgICAvKiAyYTIpIHZlcmlmeSBtYXRjaCBwYXJhbWV0ZXJzICovCisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTJfTUlOX0xFTik7CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPD0gTTJfTUFYX0xFTik7CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPD0gTTNfTUFYX0xFTik7CisKKyAgICAgICAgICAgIGFzc2VydChtX29mZiA+PSBNMl9NSU5fT0ZGU0VUKTsKKyAgICAgICAgICAgIGFzc2VydChtX29mZiA+PSBNM19NSU5fT0ZGU0VUKTsKKyAgICAgICAgICAgIGFzc2VydChtX29mZiA8PSBNM19NQVhfT0ZGU0VUKTsKKyAgICAgICAgICAgIGFzc2VydChpaS1tX29mZiA9PSBtX3Bvc19zYXYpOworICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAobV9wb3Nfc2F2LGlpLG1fbGVuKSA9PSAwKTsKKworICAgICAgICAvKiAyYikgY29kZSB0aGUgbWF0Y2ggKi8KKyNpZiAoX00yX01BWF9PRkZTRVQgIT0gX00zX01BWF9PRkZTRVQpCisgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyNlbHNlCisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpOworI2VuZGlmCisgICAgICAgICAgICAgICAgbV9vZmYgLT0gTTJfTUlOX09GRlNFVDsKKyAgICAgICAgICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiArIGxvdyBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiAtIChNMl9NSU5fTEVOIC0gMikpIDw8IE0yT19CSVRTKSB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1fb2ZmICYgTTJPX01BU0spKTsKKyAgICAgICAgICAgICAgICAvKiBjb2RlIGhpZ2ggb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IE0yT19CSVRTKTsKKyAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5tMl9tYXRjaGVzKyspOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPm0yX21hdGNoW21fbGVuXSsrKTsKKyNpZiAoX00yX01BWF9PRkZTRVQgIT0gX00zX01BWF9PRkZTRVQpCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisjaWYgZGVmaW5lZChMWk9fSEFWRV9SMSkKKyNpZiAoTTNfTUlOX0xFTiA9PSBNMl9NSU5fTEVOKQorICAgICAgICAgICAgICAgIHIxID0gaXBfZW5kOyAgICAvKiBpbnZhbGlkYXRlIFIxIHBvaW50ZXIgKi8KKyNlbmRpZgorI2VuZGlmCisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IE0zX01JTl9MRU4pOworICAgICAgICAgICAgICAgIG1fb2ZmIC09IE0zX01JTl9PRkZTRVQgLSBNM19FT0ZfT0ZGU0VUOworICAgICAgICAgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAoTTNfTUlOX0xFTiAtIDEpKSk7CisgICAgICAgICAgICAgICAgLyogY29kZSBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmICYgTTNPX01BU0spOworICAgICAgICAgICAgICAgIC8qIGNvZGUgaGlnaCBvZmZzZXQgYml0cyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gTTNPX0JJVFMpOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPm0zX21hdGNoZXMrKyk7CisgICAgICAgICAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+bTNfbWF0Y2hbbV9sZW5dKyspOworI2lmIGRlZmluZWQoTFpPX0hBVkVfTTMpCisgICAgICAgICAgICAgICAgbTMgPSBvcDsgICAgICAgIC8qIHNldCBNMyBwb2ludGVyICovCisjZW5kaWYKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiAoX00yX01BWF9PRkZTRVQgIT0gX00zX01BWF9PRkZTRVQpICovCisKKworICAgICAgICAgICAgaWYgKGlwID49IGlwX2VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpaSA9IGlwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgLyogMmMpIEluc2VydCBwaHJhc2VzIChiZWdpbm5pbmcgd2l0aCBpaSsxKSBpbnRvIHRoZSBkaWN0aW9uYXJ5LiAqLworCisjaWYgKENMRVZFTCA9PSA5KSB8fCAoQ0xFVkVMID49IDcgJiYgTTJMX0JJVFMgPD0gNCkgfHwgKENMRVZFTCA+PSA1ICYmIE0yTF9CSVRTIDw9IDMpCisgICAgICAgIC8qIEluc2VydCB0aGUgd2hvbGUgbWF0Y2ggKGlpKzEpLi4oaXAtMSkgaW50byBkaWN0aW9uYXJ5LiAgKi8KKyAgICAgICAgICAgICsraWk7CisgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyNpZiAwCisgICAgICAgICAgICAgICAgVVBEQVRFX0QoZGljdCxkcnVuLGR2LGlpLGluKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgZGljdFsgRElOREVYKGR2LGlpKSBdID0gREVOVFJZKGlpLGluKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIE1JCisgICAgICAgICAgICB9IHdoaWxlICgrK2lpIDwgaXApOworICAgICAgICAgICAgRFZBTF9ORVhUKGR2LGlpKTsKKyAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCk7CisgICAgICAgICAgICBEVkFMX0FTU0VSVChkdixpcCk7CisjZWxpZiAoQ0xFVkVMID49IDMpCisgICAgICAgICAgICBTSSAgIERJIERJICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMikKKyAgICAgICAgICAgIFNJICAgREkgICAgICBYSQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICBYSQorI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBlbHNlCisKKyAgICAgICAgeworICAgICAgICAvKiB3ZSd2ZSBmb3VuZCBhIE0zIG9yIE00IG1hdGNoIC0gc2VlIGhvdyBmYXIgd2UgY2FuIHN0aWxsIGdvICovCisgICAgICAgICAgICBhc3NlcnQoaXAgPD0gaW5fZW5kKTsKKyAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKG1fcG9zX3NhdixpaSwobHpvX3VpbnQpKGlwLWlpKSkgPT0gMCk7CisKKyAgICAgICAgLyogMmEpIGNvbXB1dGUgbWF0Y2ggcGFyYW1ldGVycyAqLworI2lmICFkZWZpbmVkKE1BVENIX0lQX0VORCkKKyAgICAgICAgICAgIGFzc2VydChpaSA9PSBpcCAtIChNMl9NQVhfTEVOICsgMSkpOworI2lmIChERF9CSVRTID4gMCkKKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA9PSAobHpvX3VpbnQpKGlwLWlpKSk7CisgICAgICAgICAgICBtX3BvcyA9IGlwIC0gbV9vZmY7CisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPT0gbV9wb3Nfc2F2ICsgbV9sZW4pOworI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGVuZDsKKyAgICAgICAgICAgICAgICBlbmQgPSBpbl9lbmQ7CisgICAgICAgICAgICAgICAgd2hpbGUgKGlwIDwgZW5kICAmJiAgKm1fcG9zID09ICppcCkKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MrKywgaXArKzsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaXAgPD0gaW5fZW5kKTsKKyAgICAgICAgICAgICAgICBtX2xlbiA9IHBkKGlwLCBpaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQocGQoaXAsbV9wb3MpID09IG1fb2ZmKTsKKyNlbmRpZgorCisgICAgICAgIC8qIDJhMikgdmVyaWZ5IG1hdGNoIHBhcmFtZXRlcnMgKi8KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSBNM19NSU5fTEVOKTsKKworICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID49IE0zX01JTl9PRkZTRVQpOworICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID49IE00X01JTl9PRkZTRVQpOworICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmIDw9IE0zX01BWF9PRkZTRVQpOworICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmIDw9IE00X01BWF9PRkZTRVQpOworICAgICAgICAgICAgYXNzZXJ0KGlpLW1fb2ZmID09IG1fcG9zX3Nhdik7CisgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChtX3Bvc19zYXYsaWksbV9sZW4pID09IDApOworCisgICAgICAgIC8qIDJiKSBjb2RlIHRoZSBtYXRjaCAqLworICAgICAgICAgICAgaWYgKG1fbGVuIDw9IE0zX01BWF9MRU4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogY29kZSBtYXRjaCBsZW4gKi8KKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0zX01BUktFUiB8IChtX2xlbiAtIChNM19NSU5fTEVOIC0gMSkpKTsKKyAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5tM19tYXRjaGVzKyspOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPm0zX21hdGNoW21fbGVuXSsrKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTRfTUlOX0xFTik7CisgICAgICAgICAgICAgICAgLyogY29kZSBNNCBtYXRjaCBsZW4gZmxhZyAqLworICAgICAgICAgICAgICAgICpvcCsrID0gTTRfTUFSS0VSOworICAgICAgICAgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgICAgICAgICAgbV9sZW4gLT0gTTRfTUlOX0xFTiAtIDE7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9sZW4pOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPm00X21hdGNoZXMrKyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG1fb2ZmIC09IE0zX01JTl9PRkZTRVQgLSBNM19FT0ZfT0ZGU0VUOworICAgICAgICAgICAgLyogY29kZSBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgJiBNM09fTUFTSyk7CisgICAgICAgICAgICAvKiBjb2RlIGhpZ2ggb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gTTNPX0JJVFMpOworCisjaWYgZGVmaW5lZChMWk9fSEFWRV9NMykKKyAgICAgICAgICAgIG0zID0gb3A7ICAgICAgICAvKiBzZXQgTTMgcG9pbnRlciAqLworI2VuZGlmCisKKworICAgICAgICAgICAgaWYgKGlwID49IGlwX2VuZCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpaSA9IGlwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisKKyAgICAgICAgLyogMmMpIEluc2VydCBwaHJhc2VzIChiZWdpbm5pbmcgd2l0aCBpaSsxKSBpbnRvIHRoZSBkaWN0aW9uYXJ5LiAqLworI2lmIChDTEVWRUwgPT0gOSkKKyAgICAgICAgLyogSW5zZXJ0IHRoZSB3aG9sZSBtYXRjaCAoaWkrMSkuLihpcC0xKSBpbnRvIGRpY3Rpb25hcnkuICAqLworICAgICAgICAvKiBUaGlzIGlzIG5vdCByZWNvbW1lbmRlZCBiZWNhdXNlIGl0IGNhbiBiZSBzbG93LiAqLworICAgICAgICAgICAgKytpaTsKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworI2lmIDAKKyAgICAgICAgICAgICAgICBVUERBVEVfRChkaWN0LGRydW4sZHYsaWksaW4pOworI2Vsc2UKKyAgICAgICAgICAgICAgICBkaWN0WyBESU5ERVgoZHYsaWkpIF0gPSBERU5UUlkoaWksaW4pOworI2VuZGlmCisgICAgICAgICAgICAgICAgTUkKKyAgICAgICAgICAgIH0gd2hpbGUgKCsraWkgPCBpcCk7CisgICAgICAgICAgICBEVkFMX05FWFQoZHYsaWkpOworICAgICAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKyAgICAgICAgICAgIERWQUxfQVNTRVJUKGR2LGlwKTsKKyNlbGlmIChDTEVWRUwgPj0gOCkKKyAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgREkgREkgREkgREkgICBYSQorI2VsaWYgKENMRVZFTCA+PSA3KQorICAgICAgICAgICAgU0kgICBESSBESSBESSBESSBESSBESSBESSAgICAgIFhJCisjZWxpZiAoQ0xFVkVMID49IDYpCisgICAgICAgICAgICBTSSAgIERJIERJIERJIERJIERJIERJICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gNSkKKyAgICAgICAgICAgIFNJICAgREkgREkgREkgREkgICAgICAgICAgICAgICBYSQorI2VsaWYgKENMRVZFTCA+PSA0KQorICAgICAgICAgICAgU0kgICBESSBESSBESSAgICAgICAgICAgICAgICAgIFhJCisjZWxpZiAoQ0xFVkVMID49IDMpCisgICAgICAgICAgICBTSSAgIERJIERJICAgICAgICAgICAgICAgICAgICAgWEkKKyNlbGlmIChDTEVWRUwgPj0gMikKKyAgICAgICAgICAgIFNJICAgREkgICAgICAgICAgICAgICAgICAgICAgICBYSQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYSQorI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICAvKiBpaSBub3cgcG9pbnRzIHRvIHRoZSBzdGFydCBvZiB0aGUgbmV4dCBsaXRlcmFsIHJ1biAqLworICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiX2NyLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2NyLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5OGUwYTUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfY3IuY2gKQEAgLTAsMCArMSwxMjYgQEAKKy8qIGx6bzFiX2NyLmNoIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xQiBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gc3RvcmUgdGhlIGN1cnJlbnQgbGl0ZXJhbCBydW4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgICAgICBhc3NlcnQoaXAgPCBpcF9lbmQpOworICAgICAgICBpZiAocGQoaXAsaWkpID4gMCkKKyAgICAgICAgeworICAgICAgICAgICAgbHpvX3VpbnQgdCA9IHBkKGlwLGlpKTsKKworI2lmIGRlZmluZWQoTFpPX0hBVkVfUjEpCisgICAgICAgICAgICBpZiAoaXAgPT0gcjEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogQ29kZSBhIGNvbnRleHQgc2Vuc2l0aXZlIFIxIG1hdGNoLiAqLworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdGVyYWxzICs9IHQpOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPnIxX21hdGNoZXMrKyk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KHQgPT0gMSk7CisgICAgICAgICAgICAgICAgLyogbW9kaWZ5IG1hcmtlciBieXRlICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KChvcFstMl0gPj4gTTJPX0JJVFMpID09IChNMl9NQVJLRVIgPj4gTTJPX0JJVFMpKTsKKyAgICAgICAgICAgICAgICBvcFstMl0gJj0gTTJPX01BU0s7CisgICAgICAgICAgICAgICAgYXNzZXJ0KChvcFstMl0gPj4gTTJPX0JJVFMpID09IDApOworICAgICAgICAgICAgICAgIC8qIGNvcHkgMSBsaXRlcmFsICovCisgICAgICAgICAgICAgICAgKm9wKysgPSAqaWkrKzsKKyAgICAgICAgICAgICAgICByMSA9IGlwICsgKE0yX01JTl9MRU4gKyAxKTsgICAgIC8qIHNldCBuZXcgUjEgcG9pbnRlciAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICBpZiAodCA8IFIwTUlOKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGlubGluZSB0aGUgY29weWluZyBvZiBhIHNob3J0IHJ1biAqLworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdGVyYWxzICs9IHQpOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5zKyspOworICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5bdF0rKyk7CisjaWYgZGVmaW5lZChMWk9fSEFWRV9NMykKKyAgICAgICAgICAgICAgICBpZiAodCA8IExaT19TSVpFKDgtTTNPX0JJVFMpICYmIG9wID09IG0zKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAvKiBDb2RlIGEgdmVyeSBzaG9ydCBsaXRlcmFsIHJ1biBpbnRvIHRoZSBsb3cgb2Zmc2V0IGJpdHMKKyAgICAgICAgICAgICAgICAgKiBvZiB0aGUgcHJldmlvdXMgTTMvTTQgbWF0Y2guCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdF9ydW5zX2FmdGVyX20zX21hdGNoKyspOworICAgICAgICAgICAgICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5saXRfcnVuX2FmdGVyX20zX21hdGNoW3RdKyspOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG0zWy0yXSA+PiBNM09fQklUUykgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgIG0zWy0yXSB8PSBMWk9fQllURSh0IDw8IE0zT19CSVRTKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBNRU1DUFlfRFMob3AsIGlpLCB0KTsKKyNpZiBkZWZpbmVkKExaT19IQVZFX1IxKQorICAgICAgICAgICAgICAgIHIxID0gaXAgKyAoTTJfTUlOX0xFTiArIDEpOyAgICAgLyogc2V0IG5ldyBSMSBwb2ludGVyICovCisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKHQgPCBSMEZBU1QpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogaW5saW5lIHRoZSBjb3B5aW5nIG9mIGEgc2hvcnQgUjAgcnVuICovCisgICAgICAgICAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+bGl0ZXJhbHMgKz0gdCk7CisgICAgICAgICAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+cjBzaG9ydF9ydW5zKyspOworICAgICAgICAgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSBMWk9fQllURSh0IC0gUjBNSU4pOworICAgICAgICAgICAgICAgIE1FTUNQWV9EUyhvcCwgaWksIHQpOworI2lmIGRlZmluZWQoTFpPX0hBVkVfUjEpCisgICAgICAgICAgICAgICAgcjEgPSBpcCArIChNMl9NSU5fTEVOICsgMSk7ICAgICAvKiBzZXQgbmV3IFIxIHBvaW50ZXIgKi8KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG9wID0gU1RPUkVfUlVOKG9wLGlpLHQpOworICAgICAgICAgICAgICAgIGlpID0gaXA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIC8qIGlpIG5vdyBwb2ludHMgdG8gdGhlIHN0YXJ0IG9mIHRoZSBjdXJyZW50IG1hdGNoICovCisgICAgICAgIGFzc2VydChpaSA9PSBpcCk7CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfZC5jaCBiL2x6by0yLjAzL3NyYy9sem8xYl9kLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzOGZhZDUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfZC5jaApAQCAtMCwwICsxLDI4MiBAQAorLyogbHpvMWJfZC5jaCAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUIgZGVjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImx6bzFfZC5jaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGRlY29tcHJlc3MgYSBibG9jayBvZiBkYXRhLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK0RPX0RFQ09NUFJFU1MgICAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJlZ2lzdGVyIGx6b19ieXRlcCBvcDsKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisgICAgcmVnaXN0ZXIgbHpvX3VpbnQgdDsKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgbV9wb3M7CisKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW47CisjaWYgZGVmaW5lZChIQVZFX0FOWV9PUCkKKyAgICBsem9fYnl0ZXAgY29uc3Qgb3BfZW5kID0gb3V0ICsgKm91dF9sZW47CisjZW5kaWYKKworICAgIExaT19VTlVTRUQod3JrbWVtKTsKKworICAgIG9wID0gb3V0OworICAgIGlwID0gaW47CisKKyAgICB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKQorICAgIHsKKyAgICAgICAgdCA9ICppcCsrOyAgICAgIC8qIGdldCBtYXJrZXIgKi8KKworICAgICAgICBpZiAodCA8IFIwTUlOKSAgICAgIC8qIGEgbGl0ZXJhbCBydW4gKi8KKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHQgPT0gMCkgICAgICAgICAgICAgLyogYSBSMCBsaXRlcmFsIHJ1biAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgdCA9ICppcCsrOworICAgICAgICAgICAgICAgIGlmICh0ID49IFIwRkFTVCAtIFIwTUlOKSAgICAgICAgICAgIC8qIGEgbG9uZyBSMCBydW4gKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHQgLT0gUjBGQVNUIC0gUjBNSU47CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gUjBGQVNUOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHsKKyNpZiAwCisgICAgICAgICAgICAgICAgICAgICAgICB0ID0gMjU2dSA8PCAoKHVuc2lnbmVkKSB0KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBoZWxwIHRoZSBvcHRpbWl6ZXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IHR0ID0gMjU2OworICAgICAgICAgICAgICAgICAgICAgICAgZG8gdHQgPDw9IDE7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSB0dDsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCh0KTsgTkVFRF9PUCh0KTsKKyNpZiAxICYmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAqIChsem9fdWludDMycCkgKG9wKzApID0gKiAoY29uc3QgbHpvX3VpbnQzMnApIChpcCswKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICogKGx6b191aW50MzJwKSAob3ArNCkgPSAqIChjb25zdCBsem9fdWludDMycCkgKGlwKzQpOworICAgICAgICAgICAgICAgICAgICAgICAgb3AgKz0gODsgaXAgKz0gODsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgLT0gODsKKyAgICAgICAgICAgICAgICAgICAgfSB3aGlsZSAodCA+IDApOworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgTUVNQ1BZOF9EUyhvcCxpcCx0KTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdCArPSBSME1JTjsgICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBzaG9ydCBSMCBydW4gKi8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgTkVFRF9JUCh0KTsgTkVFRF9PUCh0KTsKKyAgICAgICAgICAgIC8qIGNvcHkgbGl0ZXJhbCBydW4gKi8KKyNpZiAxICYmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICAgICAgaWYgKHQgPj0gNCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICogKGx6b191aW50MzJwKSBvcCA9ICogKGNvbnN0IGx6b191aW50MzJwKSBpcDsKKyAgICAgICAgICAgICAgICAgICAgb3AgKz0gNDsgaXAgKz0gNDsgdCAtPSA0OworICAgICAgICAgICAgICAgIH0gd2hpbGUgKHQgPj0gNCk7CisgICAgICAgICAgICAgICAgaWYgKHQgPiAwKSBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIHsKKyNpZiAoTTNPX0JJVFMgPCA3KQorbGl0ZXJhbDE6CisjZW5kaWYKKyAgICAgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgICAgICB9CisKKyNpZiAoTTNPX0JJVFMgPT0gNykKK2xpdGVyYWwyOgorI2VuZGlmCisKKyAgICAgICAgICAgIC8qIGFmdGVyIGEgbGl0ZXJhbCBhIG1hdGNoIG11c3QgZm9sbG93ICovCisgICAgICAgICAgICB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHQgPSAqaXArKzsgICAgICAgICAgLyogZ2V0IFIxIG1hcmtlciAqLworICAgICAgICAgICAgICAgIGlmICh0ID49IFIwTUlOKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoOworCisgICAgICAgICAgICAgICAgTkVFRF9JUCgyKTsgTkVFRF9PUChNMl9NSU5fTEVOICsgMSk7CisKKyAgICAgICAgICAgIC8qIFIxIG1hdGNoIC0gYSBNMl9NSU5fTEVOIG1hdGNoICsgMSBieXRlIGxpdGVyYWwgKi8KKyAgICAgICAgICAgICAgICBhc3NlcnQoKHQgJiBNMk9fTUFTSykgPT0gdCk7CisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcCAtIE0yX01JTl9PRkZTRVQ7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gdCB8ICgoKGx6b191aW50KSAqaXArKykgPDwgTTJPX0JJVFMpOworICAgICAgICAgICAgICAgIGFzc2VydChtX3BvcyA+PSBvdXQpOyBhc3NlcnQobV9wb3MgPCBvcCk7CisgICAgICAgICAgICAgICAgVEVTVF9MQihtX3Bvcyk7CisgICAgICAgICAgICAgICAgQ09QWV9NMjsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICppcCsrOworICAgICAgICAgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1RFU1RfSVApIHx8IGRlZmluZWQoSEFWRV9URVNUX09QKQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgfQorCittYXRjaDoKKworICAgICAgICBpZiAodCA+PSBNMl9NQVJLRVIpICAgICAgICAgICAgIC8qIGEgTTIgbWF0Y2ggKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogZ2V0IG1hdGNoIG9mZnNldCAqLworICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgIG1fcG9zID0gb3AgLSBNMl9NSU5fT0ZGU0VUOworICAgICAgICAgICAgbV9wb3MgLT0gKHQgJiBNMk9fTUFTSykgfCAoKChsem9fdWludCkgKmlwKyspIDw8IE0yT19CSVRTKTsKKyAgICAgICAgICAgIGFzc2VydChtX3BvcyA+PSBvdXQpOyBhc3NlcnQobV9wb3MgPCBvcCk7CisgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsKKworICAgICAgICAgICAgLyogZ2V0IG1hdGNoIGxlbiAqLworICAgICAgICAgICAgdCA9ICh0ID4+IE0yT19CSVRTKSAtIDE7CisgICAgICAgICAgICBORUVEX09QKHQgKyBNMl9NSU5fTEVOIC0gMSk7CisgICAgICAgICAgICBDT1BZX00yWDsKKyAgICAgICAgICAgIE1FTUNQWV9EUyhvcCxtX3Bvcyx0KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGEgTTMgb3IgTTQgbWF0Y2ggKi8KKyAgICAgICAgeworICAgICAgICAgICAgLyogZ2V0IG1hdGNoIGxlbiAqLworICAgICAgICAgICAgdCAmPSBNM0xfTUFTSzsKKyAgICAgICAgICAgIGlmICh0ID09IDApICAgICAgICAgLyogYSBNNCBtYXRjaCAqLworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgd2hpbGUgKCppcCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdCArPSAyNTU7CisgICAgICAgICAgICAgICAgICAgIGlwKys7CisgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgKz0gKE00X01JTl9MRU4gLSBNM19NSU5fTEVOKSArICppcCsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBnZXQgbWF0Y2ggb2Zmc2V0ICovCisgICAgICAgICAgICBORUVEX0lQKDIpOworICAgICAgICAgICAgbV9wb3MgPSBvcCAtIChNM19NSU5fT0ZGU0VUIC0gTTNfRU9GX09GRlNFVCk7CisgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyAmIE0zT19NQVNLOworICAgICAgICAgICAgbV9wb3MgLT0gKGx6b191aW50KSgqaXArKykgPDwgTTNPX0JJVFM7CisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpCisgICAgICAgICAgICBpZiAobV9wb3MgPT0gb3ApCisgICAgICAgICAgICAgICAgZ290byBlb2ZfZm91bmQ7CisjZW5kaWYKKworICAgICAgICAgICAgLyogY29weSBtYXRjaCAqLworICAgICAgICAgICAgYXNzZXJ0KG1fcG9zID49IG91dCk7IGFzc2VydChtX3BvcyA8IG9wKTsKKyAgICAgICAgICAgIFRFU1RfTEIobV9wb3MpOyBORUVEX09QKHQgKyBNM19NSU5fTEVOIC0gMSk7CisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgICAgICBpZiAodCA+PSAyICogNCAtIChNM19NSU5fTEVOIC0gMSkgJiYgKG9wIC0gbV9wb3MpID49IDQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKiAobHpvX3VpbnQzMnApIG9wID0gKiAoY29uc3QgbHpvX3VpbnQzMnApIG1fcG9zOworICAgICAgICAgICAgICAgIG9wICs9IDQ7IG1fcG9zICs9IDQ7IHQgLT0gNCAtIChNM19NSU5fTEVOIC0gMSk7CisgICAgICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICAgICAqIChsem9fdWludDMycCkgb3AgPSAqIChjb25zdCBsem9fdWludDMycCkgbV9wb3M7CisgICAgICAgICAgICAgICAgICAgIG9wICs9IDQ7IG1fcG9zICs9IDQ7IHQgLT0gNDsKKyAgICAgICAgICAgICAgICB9IHdoaWxlICh0ID49IDQpOworICAgICAgICAgICAgICAgIGlmICh0ID4gMCkgZG8gKm9wKysgPSAqbV9wb3MrKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgICAgICB7CisgICAgICAgICAgICBDT1BZX00zWDsKKyAgICAgICAgICAgIE1FTUNQWV9EUyhvcCxtX3Bvcyx0KTsKKyAgICAgICAgICAgIH0KKworCisjaWYgKE0zT19CSVRTIDwgNykKKyAgICAgICAgICAgIHQgPSBpcFstMl0gPj4gTTNPX0JJVFM7CisgICAgICAgICAgICBpZiAodCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBORUVEX0lQKHQpOyBORUVEX09QKHQpOworICAgICAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDE7CisgICAgICAgICAgICB9CisjZWxpZiAoTTNPX0JJVFMgPT0gNykKKyAgICAgICAgICAgIC8qIG9wdGltaXplZCB2ZXJzaW9uICovCisgICAgICAgICAgICBpZiAoaXBbLTJdICYgKDEgPDwgTTNPX0JJVFMpKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7IE5FRURfT1AoMSk7CisgICAgICAgICAgICAgICAgKm9wKysgPSAqaXArKzsKKyAgICAgICAgICAgICAgICBnb3RvIGxpdGVyYWwyOworICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKworI2lmIGRlZmluZWQoTFpPX0VPRl9DT0RFKQorI2lmIGRlZmluZWQoSEFWRV9URVNUX0lQKSB8fCBkZWZpbmVkKEhBVkVfVEVTVF9PUCkKKyAgICAvKiBubyBFT0YgY29kZSB3YXMgZm91bmQgKi8KKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9FT0ZfTk9UX0ZPVU5EOworI2VuZGlmCisKK2VvZl9mb3VuZDoKKyAgICBhc3NlcnQodCA9PSAxKTsKKyNlbmRpZgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIChpcCA9PSBpcF9lbmQgPyBMWk9fRV9PSyA6CisgICAgICAgICAgIChpcCA8IGlwX2VuZCAgPyBMWk9fRV9JTlBVVF9OT1RfQ09OU1VNRUQgOiBMWk9fRV9JTlBVVF9PVkVSUlVOKSk7CisKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX0lQKQoraW5wdXRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9JTlBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTkVFRF9PUCkKK291dHB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09VVFBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKK2xvb2tiZWhpbmRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9MT09LQkVISU5EX09WRVJSVU47CisjZW5kaWYKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiX2QxLmMgYi9sem8tMi4wMy9zcmMvbHpvMWJfZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjI4Y2NjCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2QxLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWJfZDEuYyAtLSBMWk8xQiBkZWNvbXByZXNzaW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxYi5oIgorCisjdW5kZWYgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzFiX2RlY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzFiX2QuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfZDIuYyBiL2x6by0yLjAzL3NyYy9sem8xYl9kMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzOTEzOGQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfZDIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xYl9kMi5jIC0tIExaTzFCIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzFiLmgiCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzFiX2RlY29tcHJlc3Nfc2FmZQorCisjaW5jbHVkZSAibHpvMWJfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYl9kZS5oIGIvbHpvLTIuMDMvc3JjL2x6bzFiX2RlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmFkYmE3MwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xYl9kZS5oCkBAIC0wLDAgKzEsMzQ0IEBACisvKiBsem8xYl9kZS5oIC0tIGRlZmluaXRpb25zIGZvciB0aGUgdGhlIExaTzFCL0xaTzFDIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKyNpZm5kZWYgX19MWk9fREVGU19ICisjZGVmaW5lIF9fTFpPX0RFRlNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKgorICAgICBGb3JtYXQgb2YgdGhlIG1hcmtlciBieXRlCisKKyAgICAgNzY1NDMyMTAKKyAgICAgLS0tLS0tLS0KKyAgICAgMDAwMDAwMDAgICBSMCAtIGEgbG9uZyBsaXRlcmFsIHJ1biAoJ1IwJyBydW4pCisgICAgIDAwMHJycnJyICAgUiAgLSBhIHNob3J0IGxpdGVyYWwgcnVuIHdpdGggbGVuIHIKKyAgICAgMDAxMDAwMDAgICBNNCAtIGEgdmVyeSBsb25nIG1hdGNoCisgICAgIDAwMW1tbW1tICAgTTMgLSBhIGxvbmcgbWF0Y2ggIChsZW4gPSBtK00zX01JTl9MRU4pCisgICAgIG1tbW9vb29vICAgTTIgLSBhIHNob3J0IG1hdGNoIChsZW4gPSBtK00yX01JTl9MRU4sIG8gPSBvZmZzZXQgbG93IGJpdHMpCisKKyAgICAgICAgICAgICAgICBNMSBpcyBub3QgdXNlZCAhCisqLworCisKKyNpZm5kZWYgUl9CSVRTCisjZGVmaW5lIFJfQklUUyAgICAgICAgICAgICAgKDUpCisjZW5kaWYKKworCisjaWZuZGVmIE0xTF9CSVRTCisjZGVmaW5lIE0xTF9CSVRTICAgICAgICAgICAgKDApCisjZW5kaWYKKyNpZm5kZWYgTTJMX0JJVFMKKyNkZWZpbmUgTTJMX0JJVFMgICAgICAgICAgICAoQ0hBUl9CSVQgLSBNMk9fQklUUykKKyNlbmRpZgorI2lmbmRlZiBNM0xfQklUUworI2RlZmluZSBNM0xfQklUUyAgICAgICAgICAgIChSX0JJVFMpCisjZW5kaWYKKyNpZm5kZWYgTTRMX0JJVFMKKyNkZWZpbmUgTTRMX0JJVFMgICAgICAgICAgICAoQ0hBUl9CSVQpCisjZW5kaWYKKworI2lmbmRlZiBNMU9fQklUUworI2RlZmluZSBNMU9fQklUUyAgICAgICAgICAgICg2KQorI2VuZGlmCisjaWZuZGVmIE0yT19CSVRTCisjZGVmaW5lIE0yT19CSVRTICAgICAgICAgICAgKFJfQklUUykKKyNlbmRpZgorI2lmbmRlZiBNM09fQklUUworI2RlZmluZSBNM09fQklUUyAgICAgICAgICAgIChDSEFSX0JJVCkKKyNlbmRpZgorI2lmbmRlZiBNNE9fQklUUworI2RlZmluZSBNNE9fQklUUyAgICAgICAgICAgIChNM09fQklUUykgICAgICAgICAgICAgIC8qIG11c3QgYmUgdGhlIHNhbWUgKi8KKyNlbmRpZgorCisjaWZuZGVmIE0xWF9CSVRTCisjZGVmaW5lIE0xWF9CSVRTICAgICAgICAgICAgKE0xT19CSVRTKQorI2VuZGlmCisjaWZuZGVmIE0yWF9CSVRTCisjZGVmaW5lIE0yWF9CSVRTICAgICAgICAgICAgKE0yT19CSVRTICsgQ0hBUl9CSVQpCisjZW5kaWYKKyNpZm5kZWYgTTNYX0JJVFMKKyNkZWZpbmUgTTNYX0JJVFMgICAgICAgICAgICAoTTNPX0JJVFMgKyBDSEFSX0JJVCkKKyNlbmRpZgorI2lmbmRlZiBNNFhfQklUUworI2RlZmluZSBNNFhfQklUUyAgICAgICAgICAgIE0zWF9CSVRTCisjZW5kaWYKKworCisjZGVmaW5lIF9fTUlOX09GRlNFVChiaXRzKSAgMQorI2RlZmluZSBfX01BWF9PRkZTRVQoYml0cykgIExaT19MU0laRShiaXRzKQorCisjZGVmaW5lIE0xX01JTl9PRkZTRVQgICAgICAgX19NSU5fT0ZGU0VUKE0xWF9CSVRTKQorI2RlZmluZSBNMl9NSU5fT0ZGU0VUICAgICAgIF9fTUlOX09GRlNFVChNMlhfQklUUykKKyNkZWZpbmUgTTNfTUlOX09GRlNFVCAgICAgICBfX01JTl9PRkZTRVQoTTNYX0JJVFMpCisjZGVmaW5lIE00X01JTl9PRkZTRVQgICAgICAgTTNfTUlOX09GRlNFVAorCisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpICYmICFkZWZpbmVkKE0zX0VPRl9PRkZTRVQpCisjZGVmaW5lIE0zX0VPRl9PRkZTRVQgICAgICAgMQorI2Vsc2UKKyNkZWZpbmUgTTNfRU9GX09GRlNFVCAgICAgICAwCisjZW5kaWYKKworI2lmbmRlZiBfTTFfTUFYX09GRlNFVAorI2RlZmluZSBfTTFfTUFYX09GRlNFVCAgICAgIF9fTUFYX09GRlNFVChNMVhfQklUUykKKyNlbmRpZgorI2lmbmRlZiBfTTJfTUFYX09GRlNFVAorI2RlZmluZSBfTTJfTUFYX09GRlNFVCAgICAgIF9fTUFYX09GRlNFVChNMlhfQklUUykKKyNlbmRpZgorI2lmbmRlZiBfTTNfTUFYX09GRlNFVAorI2RlZmluZSBfTTNfTUFYX09GRlNFVCAgICAgIChfX01BWF9PRkZTRVQoTTNYX0JJVFMpIC0gTTNfRU9GX09GRlNFVCkKKyNlbmRpZgorI2lmbmRlZiBfTTRfTUFYX09GRlNFVAorI2RlZmluZSBfTTRfTUFYX09GRlNFVCAgICAgIF9NM19NQVhfT0ZGU0VUCisjZW5kaWYKKyNpZm5kZWYgX01BWF9PRkZTRVQKKyNkZWZpbmUgX01BWF9PRkZTRVQgICAgICAgICBfTTRfTUFYX09GRlNFVAorI2VuZGlmCisKKyNpZiAoTTNfRU9GX09GRlNFVCA+IDApICYmIChfTTJfTUFYX09GRlNFVCA9PSBfTTNfTUFYX09GRlNFVCArIE0zX0VPRl9PRkZTRVQpCisjICB1bmRlZiBfTTJfTUFYX09GRlNFVAorIyAgZGVmaW5lIF9NMl9NQVhfT0ZGU0VUICAgIF9NM19NQVhfT0ZGU0VUCisjZW5kaWYKKyNpZiAoX00yX01BWF9PRkZTRVQgPiBfTTNfTUFYX09GRlNFVCkKKyMgIGVycm9yCisjZW5kaWYKKworI2RlZmluZSBNMV9NQVhfT0ZGU0VUICAgICAgICgobHpvX3VpbnQpIF9NMV9NQVhfT0ZGU0VUKQorI2RlZmluZSBNMl9NQVhfT0ZGU0VUICAgICAgICgobHpvX3VpbnQpIF9NMl9NQVhfT0ZGU0VUKQorI2RlZmluZSBNM19NQVhfT0ZGU0VUICAgICAgICgobHpvX3VpbnQpIF9NM19NQVhfT0ZGU0VUKQorI2RlZmluZSBNNF9NQVhfT0ZGU0VUICAgICAgICgobHpvX3VpbnQpIF9NNF9NQVhfT0ZGU0VUKQorI2RlZmluZSBNQVhfT0ZGU0VUICAgICAgICAgICgobHpvX3VpbnQpIF9NQVhfT0ZGU0VUKQorCisKKyNpZm5kZWYgTTFfTUlOX0xFTgorI2RlZmluZSBNMV9NSU5fTEVOICAgICAgICAgICgyKQorI2VuZGlmCisjaWZuZGVmIE0yX01JTl9MRU4KKyNkZWZpbmUgTTJfTUlOX0xFTiAgICAgICAgICAoMykKKyNlbmRpZgorI2lmbmRlZiBNM19NSU5fTEVOCisjaWYgKE0zWF9CSVRTID09IE0yWF9CSVRTKQorI2RlZmluZSBNM19NSU5fTEVOICAgICAgICAgIChNMl9NQVhfTEVOICsgMSkKKyNlbHNlCisjZGVmaW5lIE0zX01JTl9MRU4gICAgICAgICAgKDQpCisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBNNF9NSU5fTEVOCisjZGVmaW5lIE00X01JTl9MRU4gICAgICAgICAgKE0zX01BWF9MRU4gKyAxKQorI2VuZGlmCisKKyNpZm5kZWYgTTFfTUFYX0xFTgorI2RlZmluZSBNMV9NQVhfTEVOICAgICAgICAgIChNMV9NSU5fTEVOICsgTFpPX1NJWkUoTTFMX0JJVFMpIC0gMSkKKyNlbmRpZgorI2lmbmRlZiBNMl9NQVhfTEVOCisjZGVmaW5lIE0yX01BWF9MRU4gICAgICAgICAgKE0yX01JTl9MRU4gKyBMWk9fU0laRShNMkxfQklUUykgLSAzKQorI2VuZGlmCisjaWZuZGVmIE0zX01BWF9MRU4KKyNkZWZpbmUgTTNfTUFYX0xFTiAgICAgICAgICAoTTNfTUlOX0xFTiArIExaT19TSVpFKE0zTF9CSVRTKSAtIDIpCisjZW5kaWYKKyNpZm5kZWYgTTRfTUFYX0xFTgorI2RlZmluZSBNNF9NQVhfTEVOICAgICAgICAgIChVTE9OR19NQVgpCisjZW5kaWYKKworCisjZGVmaW5lIE0xT19NQVNLICAgICAgICAgICAgTFpPX01BU0soTTFPX0JJVFMpCisjZGVmaW5lIE0xTF9NQVNLICAgICAgICAgICAgTFpPX01BU0soTTFMX0JJVFMpCisjZGVmaW5lIE0yT19NQVNLICAgICAgICAgICAgTFpPX01BU0soTTJPX0JJVFMpCisjZGVmaW5lIE0yTF9NQVNLICAgICAgICAgICAgTFpPX01BU0soTTJMX0JJVFMpCisjZGVmaW5lIE0zT19NQVNLICAgICAgICAgICAgTFpPX01BU0soTTNPX0JJVFMpCisjZGVmaW5lIE0zTF9NQVNLICAgICAgICAgICAgTFpPX01BU0soTTNMX0JJVFMpCisjZGVmaW5lIE00T19NQVNLICAgICAgICAgICAgTFpPX01BU0soTTRPX0JJVFMpCisjZGVmaW5lIE00TF9NQVNLICAgICAgICAgICAgTFpPX01BU0soTTRMX0JJVFMpCisKKworI2RlZmluZSBNMV9NQVJLRVIgICAgICAgICAgICgxIDw8IE0xT19CSVRTKQorI2RlZmluZSBNMl9NQVJLRVIgICAgICAgICAgICgyIDw8IE0yT19CSVRTKQorI2RlZmluZSBNM19NQVJLRVIgICAgICAgICAgICgxIDw8IE0zTF9CSVRTKQorI2RlZmluZSBNNF9NQVJLRVIgICAgICAgICAgIE0zX01BUktFUgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gUjAgbGl0ZXJhbCBydW4gKGEgbG9uZyBydW4pCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZm5kZWYgUjBNSU4KKyNkZWZpbmUgUjBNSU4gICAoTFpPX1NJWkUoUl9CSVRTKSkgIC8qIE1pbmltdW0gbGVuIG9mIFIwIHJ1biBvZiBsaXRlcmFscyAqLworI2VuZGlmCisjZGVmaW5lIFIwTUFYICAgKFIwTUlOICsgMjU2IC0gMSkgICAvKiBNYXhpbXVtIGxlbiBvZiBSMCBydW4gb2YgbGl0ZXJhbHMgKi8KKworI2lmIChSME1BWCAtIChSME1BWCAmIH43dSkgPj0gNykKKyNkZWZpbmUgUjBGQVNUICAoUjBNQVggJiB+N3UpICAgICAgIC8qIFIwTUFYIGFsaWduZWQgdG8gOCBieXRlIGJvdW5kYXJ5ICovCisjZWxzZQorI2RlZmluZSBSMEZBU1QgIChSME1BWCAmIH4xNXUpICAgICAgLyogUjBNQVggYWxpZ25lZCB0byA4IGJ5dGUgYm91bmRhcnkgKi8KKyNlbmRpZgorCisjaWYgKFIwTUFYIC0gUjBGQVNUIDwgNykgfHwgKChSMEZBU1QgJiA3KSAhPSAwKQorIyAgZXJyb3IgInNvbWV0aGluZyB3ZW50IHdyb25nIgorI2VuZGlmCisjaWYgKFIwRkFTVCAqIDIgPCA1MTIpCisjICBlcnJvciAiUjBGQVNUIGlzIG5vdCBiaWcgZW5vdWdoIgorI2VuZGlmCisKKy8qIDcgc3BlY2lhbCBjb2RlcyBmcm9tIFIwRkFTVCsxIC4uIFIwTUFYCisgKiB0aGVzZSBjb2RlcyBtZWFuIGxvbmcgUjAgcnVucyB3aXRoIGxlbmd0aHMKKyAqIDUxMiwgMTAyNCwgMjA0OCwgNDA5NiwgODE5MiwgMTYzODQsIDMyNzY4CisgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gbWF0Y2hpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBQUyAgKm1fcG9zKysgIT0gKmlwKysKKworCisvKiBXZSBhbHJlYWR5IG1hdGNoZWQgTTJfTUlOX0xFTiBieXRlcy4KKyAqIFRyeSB0byBtYXRjaCBhbm90aGVyIE0yX01BWF9MRU4gLSBNMl9NSU5fTEVOIGJ5dGVzLiAqLworCisjaWYgKE0yX01BWF9MRU4gLSBNMl9NSU5fTEVOID09IDQpCisjICBkZWZpbmUgTUFUQ0hfTTJYICAgICAoUFMgfHwgUFMgfHwgUFMgfHwgUFMpCisjZWxpZiAoTTJfTUFYX0xFTiAtIE0yX01JTl9MRU4gPT0gNSkKKyMgIGRlZmluZSBNQVRDSF9NMlggICAgIChQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUykKKyNlbGlmIChNMl9NQVhfTEVOIC0gTTJfTUlOX0xFTiA9PSA2KQorIyAgZGVmaW5lIE1BVENIX00yWCAgICAgKFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTKQorI2VsaWYgKE0yX01BWF9MRU4gLSBNMl9NSU5fTEVOID09IDcpCisjICBkZWZpbmUgTUFUQ0hfTTJYICAgICAoUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMpCisjZWxpZiAoTTJfTUFYX0xFTiAtIE0yX01JTl9MRU4gPT0gMTMpCisjICBkZWZpbmUgTUFUQ0hfTTJYICAgICAoUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTKQorI2VsaWYgKE0yX01BWF9MRU4gLSBNMl9NSU5fTEVOID09IDE0KQorIyAgZGVmaW5lIE1BVENIX00yWCAgICAgKFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUykKKyNlbGlmIChNMl9NQVhfTEVOIC0gTTJfTUlOX0xFTiA9PSAxNikKKyMgIGRlZmluZSBNQVRDSF9NMlggICAgIChQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMpCisjZWxpZiAoTTJfTUFYX0xFTiAtIE0yX01JTl9MRU4gPT0gMjkpCisjICBkZWZpbmUgTUFUQ0hfTTJYICAgICAoUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgIFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFBTIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBQUyB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgUFMgfHwgUFMgfHwgUFMgfHwgUFMgfHwgUFMpCisjZWxzZQorIyAgZXJyb3IgIk1BVENIX00yWCBub3QgeWV0IGltcGxlbWVudGVkIgorI2VuZGlmCisKKworLyogV2UgYWxyZWFkeSBtYXRjaGVkIE0yX01JTl9MRU4gYnl0ZXMuCisgKiBUcnkgdG8gbWF0Y2ggYW5vdGhlciBNMl9NQVhfTEVOICsgMSAtIE0yX01JTl9MRU4gYnl0ZXMKKyAqIHRvIHNlZSBpZiB3ZSBnZXQgbW9yZSB0aGFuIGEgTTIgbWF0Y2ggKi8KKworI2RlZmluZSBNQVRDSF9NMiAgICAgICAgKE1BVENIX00yWCB8fCBQUykKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvcHlpbmcKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBfQ1AgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKworCisjaWYgKE0yX01JTl9MRU4gPT0gMikKKyMgIGRlZmluZSBDT1BZX00yWCAgICAgIF9DUAorI2VsaWYgKE0yX01JTl9MRU4gPT0gMykKKyMgIGRlZmluZSBDT1BZX00yWCAgICAgIF9DUDsgX0NQCisjZWxpZiAoTTJfTUlOX0xFTiA9PSA0KQorIyAgZGVmaW5lIENPUFlfTTJYICAgICAgX0NQOyBfQ1A7IF9DUAorI2Vsc2UKKyMgIGVycm9yICJDT1BZX00yWCBub3QgeWV0IGltcGxlbWVudGVkIgorI2VuZGlmCisKKyNpZiAoTTNfTUlOX0xFTiA9PSAzKQorIyAgZGVmaW5lIENPUFlfTTNYICAgICAgX0NQOyBfQ1AKKyNlbGlmIChNM19NSU5fTEVOID09IDQpCisjICBkZWZpbmUgQ09QWV9NM1ggICAgICBfQ1A7IF9DUDsgX0NQCisjZWxpZiAoTTNfTUlOX0xFTiA9PSA5KQorIyAgZGVmaW5lIENPUFlfTTNYICAgICAgX0NQOyBfQ1A7IF9DUDsgX0NQOyBfQ1A7IF9DUDsgX0NQOyBfQ1AKKyNlbHNlCisjICBlcnJvciAiQ09QWV9NM1ggbm90IHlldCBpbXBsZW1lbnRlZCIKKyNlbmRpZgorCisjZGVmaW5lIENPUFlfTTIgICAgICAgICBDT1BZX00yWDsgKm9wKysgPSAqbV9wb3MrKworI2RlZmluZSBDT1BZX00zICAgICAgICAgQ09QWV9NM1g7ICpvcCsrID0gKm1fcG9zKysKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKExaT19ORUVEX0RJQ1RfSCkKKworI2RlZmluZSBETF9NSU5fTEVOICAgICAgICAgIE0yX01JTl9MRU4KKyNkZWZpbmUgRF9JTkRFWDEoZCxwKSAgICAgICBkID0gRE0oRE1VTCgweDIxLERYMyhwLDUsNSw2KSkgPj4gNSkKKyNkZWZpbmUgRF9JTkRFWDIoZCxwKSAgICAgICBkID0gKGQgJiAoRF9NQVNLICYgMHg3ZmYpKSBeIChEX0hJR0ggfCAweDFmKQorI2luY2x1ZGUgImx6b19kaWN0LmgiCisKKyNpZm5kZWYgTUlOX0xPT0tBSEVBRAorI2RlZmluZSBNSU5fTE9PS0FIRUFEICAgICAgIChNMl9NQVhfTEVOICsgMSkKKyNlbmRpZgorI2lmbmRlZiBNQVhfTE9PS0JFSElORAorI2RlZmluZSBNQVhfTE9PS0JFSElORCAgICAgIChNQVhfT0ZGU0VUKQorI2VuZGlmCisKKyNlbmRpZiAvKiBkZWZpbmVkKExaT19ORUVEX0RJQ1RfSCkgKi8KKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfci5jaCBiL2x6by0yLjAzL3NyYy9sem8xYl9yLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNTA3NDgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfci5jaApAQCAtMCwwICsxLDExNyBAQAorLyogbHpvMWJfci5jaCAtLSBsaXRlcmFsIHJ1biBoYW5kbGluZyBmb3IgdGhlIHRoZSBMWk8xQi9MWk8xQyBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBzdG9yZSBhIGxpdGVyYWwgcnVuIChpbnRlcm5hbCkKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhsem9fYnl0ZXAgKQorU1RPUkVfUlVOICggbHpvX2J5dGVwIGNvbnN0IG9vLCBjb25zdCBsem9fYnl0ZXAgY29uc3QgaWksIGx6b191aW50IHJfbGVuKQoreworICAgIHJlZ2lzdGVyIGx6b19ieXRlcCBvcDsKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisgICAgcmVnaXN0ZXIgbHpvX3VpbnQgdDsKKworICAgIExaT19TVEFUUyhsem9fc3RhdHMtPmxpdGVyYWxzICs9IHJfbGVuKTsKKworICAgIG9wID0gb287CisgICAgaXAgPSBpaTsKKyAgICBhc3NlcnQocl9sZW4gPiAwKTsKKworICAgIC8qIGNvZGUgYSBsb25nIFIwIHJ1biAqLworICAgIGlmIChyX2xlbiA+PSA1MTIpCisgICAgeworICAgICAgICB1bnNpZ25lZCByX2JpdHMgPSA2OyAgICAgICAgLyogMjU2IDw8IDYgPT0gMTYzODQgKi8KKyAgICAgICAgbHpvX3VpbnQgdHQgPSAzMjc2OHU7CisKKyAgICAgICAgd2hpbGUgKHJfbGVuID49ICh0ID0gdHQpKQorICAgICAgICB7CisgICAgICAgICAgICByX2xlbiAtPSB0OworICAgICAgICAgICAgKm9wKysgPSAwOyAqb3ArKyA9IChSMEZBU1QgLSBSME1JTikgKyA3OworICAgICAgICAgICAgTUVNQ1BZOF9EUyhvcCwgaXAsIHQpOworICAgICAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+cjBsb25nX3J1bnMrKyk7CisgICAgICAgIH0KKyAgICAgICAgdHQgPj49IDE7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGlmIChyX2xlbiA+PSAodCA9IHR0KSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByX2xlbiAtPSB0OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSBMWk9fQllURSgoUjBGQVNUIC0gUjBNSU4pICsgcl9iaXRzKTsKKyAgICAgICAgICAgICAgICBNRU1DUFk4X0RTKG9wLCBpcCwgdCk7CisgICAgICAgICAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+cjBsb25nX3J1bnMrKyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0dCA+Pj0gMTsKKyAgICAgICAgfSB3aGlsZSAoLS1yX2JpdHMgPiAwKTsKKyAgICB9CisgICAgYXNzZXJ0KHJfbGVuIDwgNTEyKTsKKworICAgIHdoaWxlIChyX2xlbiA+PSAodCA9IFIwRkFTVCkpCisgICAgeworICAgICAgICByX2xlbiAtPSB0OworICAgICAgICAqb3ArKyA9IDA7ICpvcCsrID0gKFIwRkFTVCAtIFIwTUlOKTsKKyAgICAgICAgTUVNQ1BZOF9EUyhvcCwgaXAsIHQpOworICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5yMGZhc3RfcnVucysrKTsKKyAgICB9CisKKyAgICB0ID0gcl9sZW47CisgICAgaWYgKHQgPj0gUjBNSU4pCisgICAgeworICAgICAgICAvKiBjb2RlIGEgc2hvcnQgUjAgcnVuICovCisgICAgICAgICpvcCsrID0gMDsgKm9wKysgPSBMWk9fQllURSh0IC0gUjBNSU4pOworICAgICAgICBNRU1DUFlfRFMob3AsIGlwLCB0KTsKKyAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+cjBzaG9ydF9ydW5zKyspOworICAgIH0KKyAgICBlbHNlIGlmICh0ID4gMCkKKyAgICB7CisgICAgICAgIC8qIGNvZGUgYSBzaG9ydCBsaXRlcmFsIHJ1biAqLworICAgICAgICBMWk9fU1RBVFMobHpvX3N0YXRzLT5saXRfcnVucysrKTsKKyAgICAgICAgTFpPX1NUQVRTKGx6b19zdGF0cy0+bGl0X3J1blt0XSsrKTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURSh0KTsKKyAgICAgICAgTUVNQ1BZX0RTKG9wLCBpcCwgdCk7CisgICAgfQorCisgICAgcmV0dXJuIG9wOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWJfcnIuYyBiL2x6by0yLjAzL3NyYy9sem8xYl9yci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YTNmYzQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfcnIuYwpAQCAtMCwwICsxLDQzIEBACisvKiBsem8xYl9yci5jIC0tIGxpdGVyYWwgcnVuIGhhbmRsaW5nCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxYi5oIgorCisjaW5jbHVkZSAibHpvMWJfci5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xYl9zbS5jaCBiL2x6by0yLjAzL3NyYy9sem8xYl9zbS5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTY3ZjIxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiX3NtLmNoCkBAIC0wLDAgKzEsMjEwIEBACisvKiBsem8xYl9zbS5jaCAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUIgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHNlYXJjaCBmb3IgYSBtYXRjaAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgKEREX0JJVFMgPT0gMCkKKworICAgICAgICAvKiBzZWFyY2ggaXAgaW4gdGhlIGRpY3Rpb25hcnkgKi8KKyAgICAgICAgRElOREVYMShkaW5kZXgsaXApOworICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNM19NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyNpZiAxCisgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUIHx8IG1fcG9zWzNdID09IGlwWzNdKQorICAgICAgICAgICAgZ290byB0cnlfbWF0Y2g7CisgICAgICAgIERJTkRFWDIoZGluZGV4LGlwKTsKKyNlbmRpZgorICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNM19NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQgfHwgbV9wb3NbM10gPT0gaXBbM10pCisgICAgICAgICAgICBnb3RvIHRyeV9tYXRjaDsKKyAgICAgICAgZ290byBsaXRlcmFsOworCisKKyNlbHNlIC8qIChERF9CSVRTID09IDApICovCisKKworCisgICAgICAgIC8qIHNlYXJjaCBpcCBpbiB0aGUgZGVlcGVuZWQgZGljdGlvbmFyeSAqLworICAgICAgICB7CisgICAgICAgICAgICBsem9fZGljdF9wIGQgPSAmZGljdCBbIERJTkRFWChkdixpcCkgXTsKKyAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBpcF9zYXY7CisgICAgICAgICAgICB1bnNpZ25lZCBqID0gRERfU0laRTsKKyAgICAgICAgICAgIGx6b191aW50IHhfbGVuOworICAgICAgICAgICAgbHpvX3VpbnQgeF9vZmY7CisKKyAgICAgICAgICAgIERWQUxfQVNTRVJUKGR2LGlwKTsKKworICAgICAgICAgICAgaXBfc2F2ID0gaXA7CisgICAgICAgICAgICBtX2xlbiA9IDA7CisgICAgICAgICAgICBkbyB7CisjaWYgIWRlZmluZWQoTkRFQlVHKQorICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCB6X3BvcyA9IE5VTEw7CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19ESUNUX1VTRV9QVFIpCisgICAgICAgICAgICAgICAgbV9wb3MgPSAqZDsKKyAgICAgICAgICAgICAgICBhc3NlcnQoKHpfcG9zID0gbV9wb3MpID09ICpkKTsKKyNpZiBkZWZpbmVkKExaT19ERVRFUk1JTklTVElDKQorICAgICAgICAgICAgICAgIGFzc2VydChtX3BvcyA9PSBOVUxMIHx8IG1fcG9zID49IGluKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobV9wb3MgPT0gTlVMTCB8fCBtX3BvcyA8IGlwKTsKKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICB4X29mZiA9ICpkOworI2VuZGlmCisgICAgICAgICAgICAgICAgYXNzZXJ0KGlwID09IGlwX3Nhdik7CisKKyAgICAgICAgICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1MobV9wb3MseF9vZmYsaW4saXAsTUFYX09GRlNFVCkpCisjaWYgKENMRVZFTCA9PSA5KQorICAgICAgICAgICAgICAgICAgICAqZCA9IERFTlRSWShpcCxpbik7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICAoKHZvaWQpKDApKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGVsc2UgaWYgKG1fcG9zW21fbGVuXSAhPSBpcFttX2xlbl0pCisgICAgICAgICAgICAgICAgICAgICgodm9pZCkoMCkpOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKCptX3BvcysrID09ICppcCsrICYmICptX3BvcysrID09ICppcCsrICYmICptX3BvcysrID09ICppcCsrKQorICAgICAgICAgICAgICAgIHsKKyNpZiAhZGVmaW5lZChMWk9fRElDVF9VU0VfUFRSKQorICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKHpfcG9zID0gaXAgLSAzIC0geF9vZmYpID09IChtX3BvcyAtIDMpKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAvKiBhIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgIGlmIChNQVRDSF9NMikKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgeF9sZW4gPSBwZCgoaXAgLSAxKSwgaXBfc2F2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xlbiA+IG1fbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVuID0geF9sZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSB4X29mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG1fcG9zX3NhdiA9IHpfcG9zKSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZiAoQ0xFVkVMID09IDkpCisgICAgICAgICAgICAgICAgICAgICAgICAvKiB0cnkgdG8gZmluZCBhIGNsb3NlciBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeF9sZW4gPT0gbV9sZW4gJiYgeF9vZmYgPCBtX29mZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX29mZiA9IHhfb2ZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgobV9wb3Nfc2F2ID0gel9wb3MpICE9IE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKGlwIC0gaXBfc2F2KSA9PSBNMl9NQVhfTEVOICsgMSk7CisjaWYgKENMRVZFTCA9PSA5KQorI2lmIGRlZmluZWQoTUFUQ0hfSVBfRU5EKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBlbmQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kID0gTUFUQ0hfSVBfRU5EOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIChpcCA8IGVuZCAgJiYgICptX3BvcyA9PSAqaXApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zKyssIGlwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlwIDw9IGluX2VuZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgeF9sZW4gPSBwZChpcCwgaXBfc2F2KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh4X2xlbiA+IG1fbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVuID0geF9sZW47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSB4X29mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG1fcG9zX3NhdiA9IHpfcG9zKSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXAgPj0gTUFUQ0hfSVBfRU5EKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXAgPSBpcF9zYXY7CisjaWYgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBub3QgbmVlZGVkIC0gd2UgYXJlIGF0IHRoZSBlbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCAtPSBERF9TSVpFIC0gajsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGQgPT0gJmRpY3QgWyBESU5ERVgoZHYsaXApIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVUERBVEVfUChkLGRydW4saXAsaW4pOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoeF9sZW4gPT0gbV9sZW4gJiYgeF9vZmYgPCBtX29mZikKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX29mZiA9IHhfb2ZmOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgobV9wb3Nfc2F2ID0gel9wb3MpICE9IE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyeSB0byBmaW5kIGEgY2xvc2VyIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9sZW4gPCBNMl9NQVhfTEVOICsgMSB8fCB4X29mZiA8IG1fb2ZmKQorICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbGVuID0gTTJfTUFYX0xFTiArIDE7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSB4X29mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKG1fcG9zX3NhdiA9IHpfcG9zKSAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvbid0IHNlYXJjaCBmb3IgYSBsb25nZXIvY2xvc2VyIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbiA9IE0yX01BWF9MRU4gKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSB4X29mZjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgobV9wb3Nfc2F2ID0gel9wb3MpICE9IE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgaXAgPSBpcF9zYXY7CisgICAgICAgICAgICAgICAgICAgICAgICBkIC09IEREX1NJWkUgLSBqOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGQgPT0gJmRpY3QgWyBESU5ERVgoZHYsaXApIF0pOworICAgICAgICAgICAgICAgICAgICAgICAgVVBEQVRFX1AoZCxkcnVuLGlwLGluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpcCA9IGlwX3NhdjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBpcCA9IGlwX3NhdjsKKyAgICAgICAgICAgICAgICBkKys7CisgICAgICAgICAgICB9IHdoaWxlICgtLWogPiAwKTsKKyAgICAgICAgICAgIGFzc2VydChpcCA9PSBpcF9zYXYpOworCisgICAgICAgICAgICBkIC09IEREX1NJWkU7CisgICAgICAgICAgICBhc3NlcnQoZCA9PSAmZGljdCBbIERJTkRFWChkdixpcCkgXSk7CisgICAgICAgICAgICBVUERBVEVfUChkLGRydW4saXAsaW4pOworICAgICAgICB9CisKKyNlbmRpZiAvKiAoRERfQklUUyA9PSAwKSAqLworCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiX3RtLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzFiX3RtLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkOTI5ZGUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWJfdG0uY2gKQEAgLTAsMCArMSw5OSBAQAorLyogbHpvMWJfdG0uY2ggLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIExaTzFCIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB0ZXN0IGZvciBhIHBvdGVudGlhbCBtYXRjaAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKyNpZiAoRERfQklUUyA9PSAwKQorCit0cnlfbWF0Y2g6CisjaWYgIWRlZmluZWQoTkRFQlVHKSAmJiBkZWZpbmVkKExaT19ESUNUX1VTRV9QVFIpCisjaWYgZGVmaW5lZChMWk9fREVURVJNSU5JU1RJQykKKyAgICAgICAgYXNzZXJ0KG1fcG9zID09IE5VTEwgfHwgbV9wb3MgPj0gaW4pOworICAgICAgICBhc3NlcnQobV9wb3MgPT0gTlVMTCB8fCBtX3BvcyA8IGlwKTsKKyNlbmRpZgorICAgICAgICBtX3Bvc19zYXYgPSBtX3BvczsKKyNlbmRpZgorICAgICAgICBpZiAobV9wb3NbMF0gPT0gaXBbMF0gJiYgbV9wb3NbMV0gPT0gaXBbMV0gJiYgbV9wb3NbMl0gPT0gaXBbMl0pCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fcG9zICs9IDM7CisgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICB9CisKKworI2Vsc2UgLyogKEREX0JJVFMgPT0gMCkgKi8KKworCisgICAgLyogdGVzdCBwb3RlbnRpYWwgbWF0Y2ggKi8KKworICAgICAgICBpZiAobV9sZW4gPiBNMl9NSU5fTEVOKQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgaWYgKG1fbGVuID09IE0yX01JTl9MRU4pCisgICAgICAgIHsKKyNpZiAoX01BWF9PRkZTRVQgPT0gX00yX01BWF9PRkZTRVQpCisgICAgICAgICAgICBnb3RvIG1hdGNoOworI2Vsc2UKKyAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUKQorICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjaWYgMCAmJiAoTTNfTUlOX0xFTiA9PSBNMl9NSU5fTEVOKQorICAgICAgICAgICAgaWYgKGlwID09IGlpKQorICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjZW5kaWYKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGdvdG8gbGl0ZXJhbDsKKworCisjZW5kaWYgLyogKEREX0JJVFMgPT0gMCkgKi8KKworCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFiX3h4LmMgYi9sem8tMi4wMy9zcmMvbHpvMWJfeHguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWNmZTM1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFiX3h4LmMKQEAgLTAsMCArMSw5OCBAQAorLyogbHpvMWJfeHguYyAtLSBMWk8xQiBjb21wcmVzc2lvbiBwdWJsaWMgZW50cnkgcG9pbnQKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzFiLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgY29uc3QgbHpvX2NvbXByZXNzX3QgKiBjb25zdCBjX2Z1bmNzIFs5XSA9Cit7CisgICAgJl9sem8xYl8xX2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl8yX2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl8zX2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl80X2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl81X2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl82X2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl83X2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl84X2NvbXByZXNzX2Z1bmMsCisgICAgJl9sem8xYl85X2NvbXByZXNzX2Z1bmMKK307CisKKworbHpvX2NvbXByZXNzX3QgX2x6bzFiX2dldF9jb21wcmVzc19mdW5jKGludCBjbGV2ZWwpCit7CisgICAgY29uc3QgbHpvX2NvbXByZXNzX3QgKmY7CisKKyAgICBpZiAoY2xldmVsIDwgTFpPMUJfQkVTVF9TUEVFRCB8fCBjbGV2ZWwgPiBMWk8xQl9CRVNUX0NPTVBSRVNTSU9OKQorICAgIHsKKyAgICAgICAgaWYgKGNsZXZlbCA9PSBMWk8xQl9ERUZBVUxUX0NPTVBSRVNTSU9OKQorICAgICAgICAgICAgY2xldmVsID0gTFpPMUJfQkVTVF9TUEVFRDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGYgPSBjX2Z1bmNzW2NsZXZlbC0xXTsKKyAgICBhc3NlcnQoZiAmJiAqZik7CisgICAgcmV0dXJuICpmOworfQorCisKK0xaT19QVUJMSUMoaW50KQorbHpvMWJfY29tcHJlc3MgKCBjb25zdCBsem9fYnl0ZXAgc3JjLCBsem9fdWludCAgc3JjX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIGRzdCwgbHpvX3VpbnRwIGRzdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgIGludCBjbGV2ZWwgKQoreworICAgIGx6b19jb21wcmVzc190IGY7CisKKyAgICBmID0gX2x6bzFiX2dldF9jb21wcmVzc19mdW5jKGNsZXZlbCk7CisgICAgaWYgKCFmKQorICAgICAgICByZXR1cm4gTFpPX0VfRVJST1I7CisgICAgcmV0dXJuIF9sem8xYl9kb19jb21wcmVzcyhzcmMsc3JjX2xlbixkc3QsZHN0X2xlbix3cmttZW0sZik7Cit9CisKKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzEuYyBiL2x6by0yLjAzL3NyYy9sem8xY18xLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzNTg4MgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY18xLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfMS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDEKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMQorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzIuYyBiL2x6by0yLjAzL3NyYy9sem8xY18yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJiNTJiMgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY18yLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfMi5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDIKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMgorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzMuYyBiL2x6by0yLjAzL3NyYy9sem8xY18zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIxZWE5OQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY18zLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfMy5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDMKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMAorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzQuYyBiL2x6by0yLjAzL3NyYy9sem8xY180LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzYzkzZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY180LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfNC5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDQKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMgorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzUuYyBiL2x6by0yLjAzL3NyYy9sem8xY181LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI1OTY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY181LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfNS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDUKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzYuYyBiL2x6by0yLjAzL3NyYy9sem8xY182LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2MxNDI5NwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY182LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfNi5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDYKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMQorI2RlZmluZSBDTEVWRUwgICAgICAgICAgNQorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzcuYyBiL2x6by0yLjAzL3NyYy9sem8xY183LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQxZWJkYgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY183LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfNy5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDcKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgMworI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzguYyBiL2x6by0yLjAzL3NyYy9sem8xY184LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc1NDJlNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY184LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfOC5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDgKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgOAorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzkuYyBiL2x6by0yLjAzL3NyYy9sem8xY185LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjg0YTAxYQotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY185LmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWNfOS5jIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgQ09NUFJFU1NfSUQgICAgIDkKKworI2RlZmluZSBEREJJVFMgICAgICAgICAgMgorI2RlZmluZSBDTEVWRUwgICAgICAgICAgOQorI2luY2x1ZGUgImNvbXByMWMuaCIKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjXzk5LmMgYi9sem8tMi4wMy9zcmMvbHpvMWNfOTkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDYwNDAyCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFjXzk5LmMKQEAgLTAsMCArMSw0OSBAQAorLyogbHpvMWNfOTkuYyAtLSBtYWluIGludGVybmFsIGNvbmZpZ3VyYXRpb24gZmlsZSBmb3IgdGhlIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIENPTVBSRVNTX0lEICAgICA5OQorCisjZGVmaW5lIEREQklUUyAgICAgICAgICAzCisjZGVmaW5lIENMRVZFTCAgICAgICAgICA5CisKKyNkZWZpbmUgRF9CSVRTICAgICAgICAgIDE2CisjZGVmaW5lIE1BVENIX0lQX0VORCAgICAgICAgaW5fZW5kCisjaW5jbHVkZSAiY29tcHIxYy5oIgorCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWNfOXguYyBiL2x6by0yLjAzL3NyYy9sem8xY185eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5NmMzZTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWNfOXguYwpAQCAtMCwwICsxLDM3OSBAQAorLyogbHpvMWNfOXguYyAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMUMtOTk5IGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMWMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTiAgICAgICAgICAgMTYzODMgICAgICAgICAgIC8qIHNpemUgb2YgcmluZyBidWZmZXIgKi8KKyNkZWZpbmUgVEhSRVNIT0xEICAgICAgIDIgICAgICAgICAgIC8qIGxvd2VyIGxpbWl0IGZvciBtYXRjaCBsZW5ndGggKi8KKyNkZWZpbmUgRiAgICAgICAgICAgIDIwNDggICAgICAgICAgIC8qIHVwcGVyIGxpbWl0IGZvciBtYXRjaCBsZW5ndGggKi8KKworCisjZGVmaW5lIExaTzFDCisjZGVmaW5lIExaT19DT01QUkVTU19UICBsem8xY185OTlfdAorI2RlZmluZSBsem9fc3dkX3QgICAgICAgbHpvMWNfOTk5X3N3ZF90CisjaW5jbHVkZSAibHpvX21jaHcuY2giCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBsem9fYnl0ZXAKK2NvZGVfbWF0Y2ggKCBMWk9fQ09NUFJFU1NfVCAqYywgbHpvX2J5dGVwIG9wLCBsem9fdWludCBtX2xlbiwgbHpvX3VpbnQgbV9vZmYgKQoreworICAgIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpCisgICAgeworICAgICAgICBhc3NlcnQobV9sZW4gPj0gTTJfTUlOX0xFTik7CisgICAgICAgIGFzc2VydChtX29mZiA+PSBNMl9NSU5fT0ZGU0VUKTsKKworICAgICAgICBtX29mZiAtPSBNMl9NSU5fT0ZGU0VUOworICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiArIGxvdyBvZmZzZXQgYml0cyAqLworICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSAoTTJfTUlOX0xFTiAtIDIpKSA8PCBNMk9fQklUUykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAobV9vZmYgJiBNMk9fTUFTSykpOworICAgICAgICAvKiBjb2RlIGhpZ2ggb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiBNMk9fQklUUyk7CisgICAgICAgIGMtPm0yX20rKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fbGVuID49IE0zX01JTl9MRU4pOworICAgICAgICBhc3NlcnQobV9vZmYgPD0gTTNfTUFYX09GRlNFVCk7CisKKyAgICAgICAgbV9vZmYgLT0gTTNfTUlOX09GRlNFVCAtIE0zX0VPRl9PRkZTRVQ7CisgICAgICAgIC8qIGNvZGUgbWF0Y2ggbGVuICovCisgICAgICAgIGlmIChtX2xlbiA8PSBNM19NQVhfTEVOKQorICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAoTTNfTUlOX0xFTiAtIDEpKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IE00X01JTl9MRU4pOworICAgICAgICAgICAgLyogY29kZSBNNCBtYXRjaCBsZW4gZmxhZyAqLworICAgICAgICAgICAgKm9wKysgPSBNNF9NQVJLRVI7CisgICAgICAgICAgICAvKiBjb2RlIG1hdGNoIGxlbiAqLworICAgICAgICAgICAgbV9sZW4gLT0gTTRfTUlOX0xFTiAtIDE7CisgICAgICAgICAgICB3aGlsZSAobV9sZW4gPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9sZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbik7CisgICAgICAgIH0KKyAgICAgICAgLyogY29kZSBsb3cgb2Zmc2V0IGJpdHMgKi8KKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiAmIE0zT19NQVNLKTsKKyAgICAgICAgLyogY29kZSBoaWdoIG9mZnNldCBiaXRzICovCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gTTNPX0JJVFMpOworCisgICAgICAgIGMtPnIxX21fbGVuID0gMDsKKyAgICAgICAgYy0+bTMgPSBvcDsKKyAgICAgICAgYy0+bTNfbSsrOworICAgIH0KKyAgICByZXR1cm4gb3A7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB0aGlzIGlzIGEgcHVibGljIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIGEgaGVhZGVyIGZpbGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihpbnQpCitsem8xY185OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKTsKKworTFpPX1BVQkxJQyhpbnQpCitsem8xY185OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKQoreworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX3VpbnQgbGl0OworICAgIGx6b191aW50IG1fbGVuLCBtX29mZjsKKyAgICBMWk9fQ09NUFJFU1NfVCBjYzsKKyAgICBMWk9fQ09NUFJFU1NfVCAqIGNvbnN0IGMgPSAmY2M7CisgICAgbHpvX3N3ZF9wIGNvbnN0IHN3ZCA9IChsem9fc3dkX3ApIHdya21lbTsKKyAgICBpbnQgcjsKKworICAgIC8qIHNhbml0eSBjaGVjayAqLworICAgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKExaTzFDXzk5OV9NRU1fQ09NUFJFU1MgPj0gU0laRU9GX0xaT19TV0RfVCkKKworICAgIGMtPmluaXQgPSAwOworICAgIGMtPmlwID0gYy0+aW4gPSBpbjsKKyAgICBjLT5pbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjLT5jYiA9IGNiOworICAgIGMtPnIxX3IgPSBjLT5tM19yID0gYy0+bTJfbSA9IGMtPm0zX20gPSAwOworCisgICAgb3AgPSBvdXQ7CisgICAgaWkgPSBjLT5pcDsgICAgICAgICAgICAgLyogcG9pbnQgdG8gc3RhcnQgb2YgbGl0ZXJhbCBydW4gKi8KKyAgICBsaXQgPSAwOworICAgIGMtPnIxX21fbGVuID0gMDsKKyAgICBjLT5tMyA9IG91dCArIDE7ICAgICAgICAvKiBwb2ludGVyIGFmdGVyIGxhc3QgbTMvbTQgbWF0Y2ggKi8KKworICAgIHIgPSBpbml0X21hdGNoKGMsc3dkLE5VTEwsMCwwKTsKKyAgICBpZiAociAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKyAgICBpZiAobWF4X2NoYWluID4gMCkKKyAgICAgICAgc3dkLT5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CisKKyAgICByID0gZmluZF9tYXRjaChjLHN3ZCwwLDApOworICAgIGlmIChyICE9IDApCisgICAgICAgIHJldHVybiByOworICAgIHdoaWxlIChjLT5sb29rID4gMCkKKyAgICB7CisgICAgICAgIGludCBsYXp5X21hdGNoX21pbl9nYWluID0gLTE7CisgICAgICAgIGx6b191aW50IGFoZWFkID0gMDsKKworICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICBtX29mZiA9IGMtPm1fb2ZmOworCisjaWYgMAorICAgICAgICBwcmludGYoIiU1bGQ6ICU1ZCBsZW46JTNkIG9mZjolNWRcbiIsIChjLT5pcC1jLT5sb29rKS1pbiwgYy0+bG9vaywKKyAgICAgICAgICAgICAgICBtX2xlbiwgbV9vZmYpOworI2VuZGlmCisKKyAgICAgICAgYXNzZXJ0KGMtPmlwIC0gYy0+bG9vayA+PSBpbik7CisgICAgICAgIGlmIChsaXQgPT0gMCkKKyAgICAgICAgICAgIGlpID0gYy0+aXAgLSBjLT5sb29rOworICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgYXNzZXJ0KHN3ZC0+Yl9jaGFyID09ICooYy0+aXAgLSBjLT5sb29rKSk7CisKKyAgICAgICAgaWYgKChtX2xlbiA8IE0yX01JTl9MRU4pIHx8CisgICAgICAgICAgICAobV9sZW4gPCBNM19NSU5fTEVOICYmIG1fb2ZmID4gTTJfTUFYX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiA+PSBpbik7CisgICAgICAgICAgICBhc3NlcnQoYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYgKyBtX2xlbiA8IGMtPmlwKTsKKyAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKGMtPmlwIC0gYy0+bG9vaywgYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisKKyAgICAgICAgICAgIGlmIChsaXQgPiAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgYSBjdXJyZW50IGxpdGVyYWwgcnVuOiBkbyBub3QgdHJ5IGEgbGF6eSBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICBpZiB0aGUgbGl0ZXJhbCBjb3VsZCBiZSBjb2RlZCBpbnRvIGEgcjEgb3IgbTMgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBpZiAobGl0ID09IDEgJiYgYy0+cjFfbV9sZW4gPT0gTTJfTUlOX0xFTikKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IC0xOworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpdCA9PSAzICYmIG9wID09IGMtPm0zKQorICAgICAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gLTE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobGl0IDwgMyAmJiBvcCA9PSBjLT5tMykKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gMTsKKworI2lmIChNMl9NSU5fTEVOID09IDIpCisgICAgICAgICAgICAgICAgaWYgKG1fbGVuID09IDIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBkb24ndCBjb2RlIGEgbWF0Y2ggb2YgbGVuIDIgaWYgd2UgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAgICBjb2RlIGEgbGl0ZXJhbCBydW4uIENvZGUgYSBsaXRlcmFsIGluc3RlYWQuICovCisgICAgICAgICAgICAgICAgICAgIG1fbGVuID0gMDsKKyAgICAgICAgICAgICAgICB9CisjZW5kaWYKKyNpZiAoTTJfTUlOX0xFTiA9PSBNM19NSU5fTEVOKQorICAgICAgICAgICAgICAgIGlmIChtX2xlbiA9PSBNMl9NSU5fTEVOICYmIG1fb2ZmID4gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIC8qIGRvbid0IGNvZGUgYSBNMyBtYXRjaCBvZiBsZW4gMyBpZiB3ZSBoYXZlIHRvCisgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgYSBsaXRlcmFsIHJ1bi4gQ29kZSBhIGxpdGVyYWwgaW5zdGVhZC4gKi8KKyAgICAgICAgICAgICAgICAgICAgbV9sZW4gPSAwOworICAgICAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIG5vIGN1cnJlbnQgbGl0ZXJhbCBydW46IG9ubHkgdHJ5IGEgbGF6eSBtYXRjaCwKKyAgICAgICAgICAgICAgICAgICBpZiB0aGUgbGl0ZXJhbCBjb3VsZCBiZSBjb2RlZCBpbnRvIGEgcjEgb3IgbTMgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBpZiAoYy0+cjFfbV9sZW4gPT0gTTJfTUlOX0xFTiB8fCBvcCA9PSBjLT5tMykKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gLTE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgICAgIC8qIHRyeSBhIGxhenkgbWF0Y2ggKi8KKyAgICAgICAgaWYgKG1fbGVuID09IDApCisgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gLTE7CisgICAgICAgIGlmIChsYXp5X21hdGNoX21pbl9nYWluID49IDAgJiYgYy0+bG9vayA+IG1fbGVuKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPiAwKTsKKworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICAgICAgYXNzZXJ0KGMtPmxvb2sgPiAwKTsKKworICAgICAgICAgICAgaWYgKG1fbGVuIDw9IE0yX01BWF9MRU4gJiYgbV9vZmYgPD0gTTJfTUFYX09GRlNFVCAmJgorICAgICAgICAgICAgICAgIGMtPm1fb2ZmID4gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluICs9IDE7CisKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA+PSBtX2xlbiArIGxhenlfbWF0Y2hfbWluX2dhaW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYy0+bGF6eSsrOworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICAgICAgICAgIG1fb2ZmID0gYy0+bV9vZmY7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+aXAgLSBjLT5sb29rLCBjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBsaXQrKzsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhaGVhZCA9IDE7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGlpICsgbGl0ICsgMSA9PSBjLT5pcCAtIGMtPmxvb2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID4gMCk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGlpICsgbGl0ICsgYWhlYWQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKworCisgICAgICAgIGlmIChtX2xlbiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBhIGxpdGVyYWwgKi8KKyAgICAgICAgICAgIGxpdCsrOworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogMSAtIHN0b3JlIHJ1biAqLworICAgICAgICAgICAgaWYgKGxpdCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogY29kZSBjdXJyZW50IGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICAgICAgaWYgKGxpdCA9PSAxICYmIGMtPnIxX21fbGVuID09IE0yX01JTl9MRU4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBDb2RlIGEgY29udGV4dCBzZW5zaXRpdmUgUjEgbWF0Y2guICovCisgICAgICAgICAgICAgICAgICAgIGFzc2VydCgob3BbLTJdID4+IE0yT19CSVRTKSA9PSAoTTJfTUFSS0VSID4+IE0yT19CSVRTKSk7CisgICAgICAgICAgICAgICAgICAgIG9wWy0yXSAmPSBNMk9fTUFTSzsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KChvcFstMl0gPj4gTTJPX0JJVFMpID09IDApOworICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IDEgbGl0ZXJhbCAqLworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9ICppaSsrOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaWkgKyBhaGVhZCA9PSBjLT5pcCAtIGMtPmxvb2spOworICAgICAgICAgICAgICAgICAgICBjLT5yMV9yKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKGxpdCA8IDQgJiYgb3AgPT0gYy0+bTMpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoKGMtPm0zWy0yXSA+PiBNM09fQklUUykgPT0gMCk7CisgICAgICAgICAgICAgICAgICAgIGMtPm0zWy0yXSB8PSBMWk9fQllURShsaXQgPDwgTTNPX0JJVFMpOworICAgICAgICAgICAgICAgICAgICBNRU1DUFlfRFMob3AsIGlpLCBsaXQpOworICAgICAgICAgICAgICAgICAgICBhc3NlcnQoaWkgKyBhaGVhZCA9PSBjLT5pcCAtIGMtPmxvb2spOworICAgICAgICAgICAgICAgICAgICBjLT5tM19yKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG9wID0gU1RPUkVfUlVOKG9wLGlpLGxpdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChsaXQgPCBSMEZBU1QpCisgICAgICAgICAgICAgICAgICAgIGMtPnIxX21fbGVuID0gbV9sZW47CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjLT5yMV9tX2xlbiA9IDA7CisgICAgICAgICAgICAgICAgbGl0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjLT5yMV9tX2xlbiA9IDA7CisKKyAgICAgICAgICAgIC8qIDIgLSBjb2RlIG1hdGNoICovCisgICAgICAgICAgICBvcCA9IGNvZGVfbWF0Y2goYyxvcCxtX2xlbixtX29mZik7CisgICAgICAgICAgICByID0gZmluZF9tYXRjaChjLHN3ZCxtX2xlbiwxK2FoZWFkKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICB9CisKKyAgICAgICAgYy0+Y29kZXNpemUgPSBwZChvcCwgb3V0KTsKKyAgICB9CisKKworICAgIC8qIHN0b3JlIGZpbmFsIHJ1biAqLworICAgIGlmIChsaXQgPiAwKQorICAgICAgICBvcCA9IFNUT1JFX1JVTihvcCxpaSxsaXQpOworCisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpCisgICAgKm9wKysgPSBNM19NQVJLRVIgfCAxOworICAgICpvcCsrID0gMDsKKyAgICAqb3ArKyA9IDA7CisjZW5kaWYKKworICAgIGMtPmNvZGVzaXplID0gcGQob3AsIG91dCk7CisgICAgYXNzZXJ0KGMtPnRleHRzaXplID09IGluX2xlbik7CisKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworCisgICAgaWYgKGMtPmNiICYmIGMtPmNiLT5ucHJvZ3Jlc3MpCisgICAgICAgICgqYy0+Y2ItPm5wcm9ncmVzcykoYy0+Y2IsIGMtPnRleHRzaXplLCBjLT5jb2Rlc2l6ZSwgMCk7CisKKyNpZiAwCisgICAgcHJpbnRmKCIlbGQgJWxkIC0+ICVsZDogJWxkICVsZCAlbGQgJWxkICVsZFxuIiwKKyAgICAgICAgKGxvbmcpIGMtPnRleHRzaXplLCAobG9uZylpbl9sZW4sIChsb25nKSBjLT5jb2Rlc2l6ZSwKKyAgICAgICAgYy0+cjFfciwgYy0+bTNfciwgYy0+bTJfbSwgYy0+bTNfbSwgYy0+bGF6eSk7CisjZW5kaWYKKyAgICByZXR1cm4gTFpPX0VfT0s7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMoaW50KQorbHpvMWNfOTk5X2NvbXByZXNzICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzFjXzk5OV9jb21wcmVzc19jYWxsYmFjayhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGx6b19jYWxsYmFja19wKSAwLCAwKTsKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjX2NjLmMgYi9sem8tMi4wMy9zcmMvbHpvMWNfY2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZTM2N2RmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFjX2NjLmMKQEAgLTAsMCArMSwxNjcgQEAKKy8qIGx6bzFjX2NjLmMgLS0gTFpPMUMgY29tcHJlc3Npb24gaW50ZXJuYWwgZW50cnkgcG9pbnQKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2RlZmluZSBMWk9fTkVFRF9ESUNUX0gKKyNpbmNsdWRlICJjb25maWcxYy5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gY29tcHJlc3Npb24gaW50ZXJuYWwgZW50cnkgcG9pbnQuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBfbHpvMWNfZG9fY29tcHJlc3MgICAoIGNvbnN0IGx6b19ieXRlcCBpbiwgIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY29tcHJlc3NfdCBmdW5jICkKK3sKKyAgICBpbnQgcjsKKyNpZiBkZWZpbmVkKExaT19URVNUX0NPTVBSRVNTX09WRVJSVU4pCisgICAgbHpvX3VpbnQgYXZhaWxfb3V0ID0gKm91dF9sZW47CisjZW5kaWYKKworCisjaWYgZGVmaW5lZChMWk9fQ09MTEVDVF9TVEFUUykKKyAgICBfbHpvMWNfc3RhdHNfaW5pdChsem9fc3RhdHMpOworICAgIGx6b19zdGF0cy0+aW5fbGVuID0gaW5fbGVuOworI2VuZGlmCisKKworICAgIC8qIGRvbid0IHRyeSB0byBjb21wcmVzcyBhIGJsb2NrIHRoYXQncyB0b28gc2hvcnQgKi8KKyAgICBpZiAoaW5fbGVuIDw9IDApCisgICAgeworICAgICAgICAqb3V0X2xlbiA9IDA7CisgICAgICAgIHIgPSBMWk9fRV9PSzsKKyAgICB9CisgICAgZWxzZSBpZiAoaW5fbGVuIDw9IE1JTl9MT09LQUhFQUQgKyAxKQorICAgIHsKKyNpZiBkZWZpbmVkKExaT19SRVRVUk5fSUZfTk9UX0NPTVBSRVNTSUJMRSkKKyAgICAgICAgKm91dF9sZW4gPSAwOworICAgICAgICByID0gTFpPX0VfTk9UX0NPTVBSRVNTSUJMRTsKKyNlbHNlCisgICAgICAgICpvdXRfbGVuID0gcGQoU1RPUkVfUlVOKG91dCxpbixpbl9sZW4pLCBvdXQpOworICAgICAgICByID0gKCpvdXRfbGVuID4gaW5fbGVuKSA/IExaT19FX09LIDogTFpPX0VfRVJST1I7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICByID0gZnVuYyhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtKTsKKworCisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpCisjaWYgZGVmaW5lZChMWk9fVEVTVF9DT01QUkVTU19PVkVSUlVOKQorICAgIGlmIChyID09IExaT19FX09LICYmIGF2YWlsX291dCAtICpvdXRfbGVuIDwgMykKKyAgICAgICAgciA9IExaT19FX0NPTVBSRVNTX09WRVJSVU47CisjZW5kaWYKKyAgICBpZiAociA9PSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIGx6b19ieXRlcCBvcCA9IG91dCArICpvdXRfbGVuOworICAgICAgICAqb3ArKyA9IE0zX01BUktFUiB8IDE7CisgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgKm9wKysgPSAwOworICAgICAgICAqb3V0X2xlbiArPSAzOworICAgIH0KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKExaT19DT0xMRUNUX1NUQVRTKQorICAgIGx6b19zdGF0cy0+b3V0X2xlbiA9ICpvdXRfbGVuOworICAgIGx6b19zdGF0cy0+bWF0Y2hfYnl0ZXMgPQorICAgICAgIDEgKiBsem9fc3RhdHMtPm0xX21hdGNoZXMgKyAyICogbHpvX3N0YXRzLT5tMl9tYXRjaGVzICsKKyAgICAgICAzICogbHpvX3N0YXRzLT5tM19tYXRjaGVzICsgNCAqIGx6b19zdGF0cy0+bTRfbWF0Y2hlczsKKyAgICBfbHpvMWNfc3RhdHNfY2FsYyhsem9fc3RhdHMpOworI2VuZGlmCisKKyAgICByZXR1cm4gcjsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIG5vdGU6IHRoaXMgaXMgbm90IHRocmVhZCBzYWZlLCBidXQgYXMgaXQgaXMgdXNlZCBmb3IgZmluZXR1bmluZyBvbmx5CisvLyAgICAgICB3ZSBkb24ndCBjYXJlCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyN1bmRlZiBsem9fc3RhdHMKKy8qIGx6b19zdGF0c190IGlzIHN0aWxsIGRlZmluZWQgKi8KKworCisjaWYgZGVmaW5lZChMWk9fQ09MTEVDVF9TVEFUUykKKworc3RhdGljIGx6b19zdGF0c190IGx6b19zdGF0aXN0aWNzOworbHpvX3N0YXRzX3QgKiBjb25zdCBsem8xY19zdGF0cyA9ICZsem9fc3RhdGlzdGljczsKKworCit2b2lkIF9sem8xY19zdGF0c19pbml0KGx6b19zdGF0c190ICpsem9fc3RhdHMpCit7CisgICAgbHpvX21lbXNldChsem9fc3RhdHMsMCxzaXplb2YoKmx6b19zdGF0cykpOworfQorCisKK3ZvaWQgX2x6bzFjX3N0YXRzX2NhbGMobHpvX3N0YXRzX3QgKmx6b19zdGF0cykKK3sKKyAgICBsem9fc3RhdHMtPm1hdGNoZXMgPQorICAgICAgIGx6b19zdGF0cy0+bTFfbWF0Y2hlcyArIGx6b19zdGF0cy0+bTJfbWF0Y2hlcyArCisgICAgICAgbHpvX3N0YXRzLT5tM19tYXRjaGVzICsgbHpvX3N0YXRzLT5tNF9tYXRjaGVzOworCisgICAgbHpvX3N0YXRzLT5saXRlcmFsX292ZXJoZWFkID0gbHpvX3N0YXRzLT5saXRfcnVucyArCisgICAgICAgMiAqIChsem9fc3RhdHMtPnIwc2hvcnRfcnVucyArIGx6b19zdGF0cy0+cjBmYXN0X3J1bnMgKworICAgICAgICAgICAgbHpvX3N0YXRzLT5yMGxvbmdfcnVucyk7CisgICAgbHpvX3N0YXRzLT5saXRlcmFsX2J5dGVzID0gbHpvX3N0YXRzLT5saXRlcmFscyArCisgICAgICAgbHpvX3N0YXRzLT5saXRlcmFsX292ZXJoZWFkOworCisjaWYgMAorICAgIGFzc2VydChsem9fc3RhdHMtPm1hdGNoX2J5dGVzICsgbHpvX3N0YXRzLT5saXRlcmFsX2J5dGVzID09CisgICAgICAgbHpvX3N0YXRzLT5vdXRfbGVuKTsKKyNlbmRpZgorCisgICAgbHpvX3N0YXRzLT5tMl9tYXRjaGVzIC09IGx6b19zdGF0cy0+cjFfbWF0Y2hlczsKKyAgICBsem9fc3RhdHMtPm0yX21hdGNoW00yX01JTl9MRU5dIC09IGx6b19zdGF0cy0+cjFfbWF0Y2hlczsKKworICAgIGlmIChsem9fc3RhdHMtPmxpdGVyYWxzID4gMCkKKyAgICAgICAgbHpvX3N0YXRzLT5saXRlcmFsX292ZXJoZWFkX3BlcmNlbnQgPQorICAgICAgICAgICAxMDAuMCAqIGx6b19zdGF0cy0+bGl0ZXJhbF9vdmVyaGVhZCAvIGx6b19zdGF0cy0+bGl0ZXJhbHM7Cit9CisKKworI2VuZGlmCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xY19jYy5oIGIvbHpvLTIuMDMvc3JjL2x6bzFjX2NjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRjNTkwNAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY19jYy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qIGx6bzFjX2NjLmggLS0gZGVmaW5pdGlvbnMgZm9yIHRoZSB0aGUgTFpPMUMgY29tcHJlc3Npb24gZHJpdmVyCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaTzFDX0NDX0gKKyNkZWZpbmUgX19MWk8xQ19DQ19ICisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFjXzFfY29tcHJlc3NfZnVuYzsKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWNfMl9jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xY18zX2NvbXByZXNzX2Z1bmM7CitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFjXzRfY29tcHJlc3NfZnVuYzsKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWNfNV9jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xY182X2NvbXByZXNzX2Z1bmM7CitleHRlcm4gY29uc3QgbHpvX2NvbXByZXNzX3QgX2x6bzFjXzdfY29tcHJlc3NfZnVuYzsKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWNfOF9jb21wcmVzc19mdW5jOworZXh0ZXJuIGNvbnN0IGx6b19jb21wcmVzc190IF9sem8xY185X2NvbXByZXNzX2Z1bmM7CisKK2V4dGVybiBjb25zdCBsem9fY29tcHJlc3NfdCBfbHpvMWNfOTlfY29tcHJlc3NfZnVuYzsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19FWFRFUk4obHpvX2J5dGVwICkKK19sem8xY19zdG9yZV9ydW4gKCBsem9fYnl0ZXAgY29uc3Qgb28sIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpaSwKKyAgICAgICAgICAgICAgICAgICBsem9fdWludCByX2xlbik7CisKKyNkZWZpbmUgU1RPUkVfUlVOICAgX2x6bzFjX3N0b3JlX3J1bgorCisKK2x6b19jb21wcmVzc190IF9sem8xY19nZXRfY29tcHJlc3NfZnVuYyhpbnQgY2xldmVsKTsKKworaW50IF9sem8xY19kb19jb21wcmVzcyAgICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19jb21wcmVzc190IGZ1bmMgKTsKKworCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWNfZDEuYyBiL2x6by0yLjAzL3NyYy9sem8xY19kMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyNzQzOGMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWNfZDEuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xY19kMS5jIC0tIExaTzFDIGRlY29tcHJlc3Npb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzFjLmgiCisKKyN1bmRlZiBMWk9fVEVTVF9PVkVSUlVOCisjZGVmaW5lIERPX0RFQ09NUFJFU1MgICAgICAgbHpvMWNfZGVjb21wcmVzcworCisjaW5jbHVkZSAibHpvMWJfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xY19kMi5jIGIvbHpvLTIuMDMvc3JjL2x6bzFjX2QyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwZmVmOAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xY19kMi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGx6bzFjX2QyLmMgLS0gTFpPMUMgZGVjb21wcmVzc2lvbiB3aXRoIG92ZXJydW4gdGVzdGluZworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMWMuaCIKKworI2RlZmluZSBMWk9fVEVTVF9PVkVSUlVOCisjZGVmaW5lIERPX0RFQ09NUFJFU1MgICAgICAgbHpvMWNfZGVjb21wcmVzc19zYWZlCisKKyNpbmNsdWRlICJsem8xYl9kLmNoIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFjX3JyLmMgYi9sem8tMi4wMy9zcmMvbHpvMWNfcnIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzI3OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFjX3JyLmMKQEAgLTAsMCArMSw0MyBAQAorLyogbHpvMWNfcnIuYyAtLSBsaXRlcmFsIHJ1biBoYW5kbGluZworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMWMuaCIKKworI2luY2x1ZGUgImx6bzFiX3IuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWNfeHguYyBiL2x6by0yLjAzL3NyYy9sem8xY194eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTU0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWNfeHguYwpAQCAtMCwwICsxLDk4IEBACisvKiBsem8xY194eC5jIC0tIExaTzFDIGNvbXByZXNzaW9uIHB1YmxpYyBlbnRyeSBwb2ludAorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMWMuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBjb25zdCBsem9fY29tcHJlc3NfdCAqIGNvbnN0IGNfZnVuY3MgWzldID0KK3sKKyAgICAmX2x6bzFjXzFfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzJfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzNfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzRfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzVfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzZfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzdfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzhfY29tcHJlc3NfZnVuYywKKyAgICAmX2x6bzFjXzlfY29tcHJlc3NfZnVuYworfTsKKworCitsem9fY29tcHJlc3NfdCBfbHpvMWNfZ2V0X2NvbXByZXNzX2Z1bmMoaW50IGNsZXZlbCkKK3sKKyAgICBjb25zdCBsem9fY29tcHJlc3NfdCAqZjsKKworICAgIGlmIChjbGV2ZWwgPCBMWk8xQ19CRVNUX1NQRUVEIHx8IGNsZXZlbCA+IExaTzFDX0JFU1RfQ09NUFJFU1NJT04pCisgICAgeworICAgICAgICBpZiAoY2xldmVsID09IExaTzFDX0RFRkFVTFRfQ09NUFJFU1NJT04pCisgICAgICAgICAgICBjbGV2ZWwgPSBMWk8xQ19CRVNUX1NQRUVEOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgZiA9IGNfZnVuY3NbY2xldmVsLTFdOworICAgIGFzc2VydChmICYmICpmKTsKKyAgICByZXR1cm4gKmY7Cit9CisKKworTFpPX1BVQkxJQyhpbnQpCitsem8xY19jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBzcmMsIGx6b191aW50ICBzcmNfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgZHN0LCBsem9fdWludHAgZHN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50IGNsZXZlbCApCit7CisgICAgbHpvX2NvbXByZXNzX3QgZjsKKworICAgIGYgPSBfbHpvMWNfZ2V0X2NvbXByZXNzX2Z1bmMoY2xldmVsKTsKKyAgICBpZiAoIWYpCisgICAgICAgIHJldHVybiBMWk9fRV9FUlJPUjsKKyAgICByZXR1cm4gX2x6bzFjX2RvX2NvbXByZXNzKHNyYyxzcmNfbGVuLGRzdCxkc3RfbGVuLHdya21lbSxmKTsKK30KKworCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWZfMS5jIGIvbHpvLTIuMDMvc3JjL2x6bzFmXzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzYwOGNlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFmXzEuYwpAQCAtMCwwICsxLDMxMiBAQAorLyogbHpvMWZfMS5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xRi0xIGNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKyNpbmNsdWRlICJsem8vbHpvMWYuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgTTJfTUFYX09GRlNFVCAgIDB4MDgwMAorI2RlZmluZSBNM19NQVhfT0ZGU0VUICAgMHgzZmZmCisjZGVmaW5lIE0zX01BUktFUiAgICAgICAyMjQKKworCisjaWZuZGVmIExaT19IQVNICisjZGVmaW5lIExaT19IQVNIICAgICAgICBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQQorI2VuZGlmCisjZGVmaW5lIERfQklUUyAgICAgICAgICAxNAorI2RlZmluZSBEX0lOREVYMShkLHApICAgZCA9IERNKERNVUwoMHgyMSxEWDMocCw1LDUsNikpID4+IDUpCisjZGVmaW5lIERfSU5ERVgyKGQscCkgICBkID0gKGQgJiAoRF9NQVNLICYgMHg3ZmYpKSBeIChEX0hJR0ggfCAweDFmKQorI2luY2x1ZGUgImx6b19kaWN0LmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBjb21wcmVzcyBhIGJsb2NrIG9mIGRhdGEuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBfX2x6b19ub2lubGluZQoraW50IGRvX2NvbXByZXNzICAgICAgICAgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaW5fZW5kID0gaW4gKyBpbl9sZW47CisgICAgY29uc3QgbHpvX2J5dGVwIGNvbnN0IGlwX2VuZCA9IGluICsgaW5fbGVuIC0gOTsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX2RpY3RfcCBjb25zdCBkaWN0ID0gKGx6b19kaWN0X3ApIHdya21lbTsKKworICAgIG9wID0gb3V0OworICAgIGlwID0gaW47CisgICAgaWkgPSBpcDsKKworICAgIGlwKys7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyAgICAgICAgbHpvX3VpbnQgbV9vZmY7CisgICAgICAgIGx6b191aW50IG1fbGVuOworICAgICAgICBsem9fdWludCBkaW5kZXg7CisgICAgICAgIGx6b191aW50IGxpdDsKKworICAgICAgICBESU5ERVgxKGRpbmRleCxpcCk7CisgICAgICAgIEdJTkRFWChtX3BvcyxtX29mZixkaWN0LGRpbmRleCxpbik7CisgICAgICAgIGlmIChMWk9fQ0hFQ0tfTVBPU19OT05fREVUKG1fcG9zLG1fb2ZmLGluLGlwLE0zX01BWF9PRkZTRVQpKQorICAgICAgICAgICAgZ290byBsaXRlcmFsOworI2lmIDEKKyAgICAgICAgaWYgKG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQgfHwgbV9wb3NbM10gPT0gaXBbM10pCisgICAgICAgICAgICBnb3RvIHRyeV9tYXRjaDsKKyAgICAgICAgRElOREVYMihkaW5kZXgsaXApOworI2VuZGlmCisgICAgICAgIEdJTkRFWChtX3BvcyxtX29mZixkaWN0LGRpbmRleCxpbik7CisgICAgICAgIGlmIChMWk9fQ0hFQ0tfTVBPU19OT05fREVUKG1fcG9zLG1fb2ZmLGluLGlwLE0zX01BWF9PRkZTRVQpKQorICAgICAgICAgICAgZ290byBsaXRlcmFsOworICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCB8fCBtX3Bvc1szXSA9PSBpcFszXSkKKyAgICAgICAgICAgIGdvdG8gdHJ5X21hdGNoOworICAgICAgICBnb3RvIGxpdGVyYWw7CisKKwordHJ5X21hdGNoOgorI2lmIDAgJiYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzIpCisgICAgICAgIGlmICgqIChjb25zdCBsem9fdXNob3J0cCkgbV9wb3MgIT0gKiAoY29uc3QgbHpvX3VzaG9ydHApIGlwKQorI2Vsc2UKKyAgICAgICAgaWYgKG1fcG9zWzBdICE9IGlwWzBdIHx8IG1fcG9zWzFdICE9IGlwWzFdKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Bvc1syXSA9PSBpcFsyXSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3BvcyArPSAzOworI2lmIDAKKyAgICAgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgICBpZiAobGl0IDw9IDMpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICAgICAgaWYgKGxpdCA9PSAzKSAgICAgICAgICAgLyogYmV0dGVyIGNvbXByZXNzaW9uLCBidXQgc2xvd2VyICovCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBhc3NlcnQob3AgLSAyID4gb3V0KTsgb3BbLTJdIHw9IExaT19CWVRFKDMpOworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9ICppaSsrOyAqb3ArKyA9ICppaSsrOyAqb3ArKyA9ICppaSsrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGNvZGVfbWF0Y2g7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICgqbV9wb3MgPT0gaXBbM10pCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisKKyAgICAvKiBhIGxpdGVyYWwgKi8KK2xpdGVyYWw6CisgICAgICAgIFVQREFURV9JKGRpY3QsMCxkaW5kZXgsaXAsaW4pOworICAgICAgICBpZiAoKytpcCA+PSBpcF9lbmQpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY29udGludWU7CisKKworICAgIC8qIGEgbWF0Y2ggKi8KK21hdGNoOgorICAgICAgICBVUERBVEVfSShkaWN0LDAsZGluZGV4LGlwLGluKTsKKyAgICAgICAgLyogc3RvcmUgY3VycmVudCBsaXRlcmFsIHJ1biAqLworICAgICAgICBsaXQgPSBwZChpcCxpaSk7CisgICAgICAgIGlmIChsaXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICByZWdpc3RlciBsem9fdWludCB0ID0gbGl0OworCisgICAgICAgICAgICBpZiAodCA8IDQgJiYgb3AgPiBvdXQpCisgICAgICAgICAgICAgICAgb3BbLTJdIHw9IExaT19CWVRFKHQpOworICAgICAgICAgICAgZWxzZSBpZiAodCA8PSAzMSkKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGx6b191aW50IHR0ID0gdCAtIDMxOworCisgICAgICAgICAgICAgICAgKm9wKysgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlICh0dCA+IDI1NSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHR0IC09IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBhc3NlcnQodHQgPiAwKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHR0KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGRvICpvcCsrID0gKmlpKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgfQorICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworCisKKyAgICAgICAgLyogY29kZSB0aGUgbWF0Y2ggKi8KKyAgICAgICAgaXAgKz0gMzsKKyAgICAgICAgaWYgKCptX3BvcysrICE9ICppcCsrIHx8ICptX3BvcysrICE9ICppcCsrIHx8ICptX3BvcysrICE9ICppcCsrIHx8CisgICAgICAgICAgICAqbV9wb3MrKyAhPSAqaXArKyB8fCAqbV9wb3MrKyAhPSAqaXArKyB8fCAqbV9wb3MrKyAhPSAqaXArKykKKyAgICAgICAgeworICAgICAgICAgICAgLS1pcDsKKyAgICAgICAgICAgIG1fbGVuID0gcGQoaXAsIGlpKTsKKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSAzKTsgYXNzZXJ0KG1fbGVuIDw9IDgpOworCisgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAxOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiAtIDIpIDw8IDUpIHwgKChtX29mZiAmIDcpIDw8IDIpKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobV9sZW4gPT0gMyAmJiBtX29mZiA8PSAyKk0yX01BWF9PRkZTRVQgJiYgbGl0ID4gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAxOworICAgICAgICAgICAgICAgIC8qIG1fb2ZmIC09IE0yX01BWF9PRkZTRVQ7ICovCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgoKG1fb2ZmICYgNykgPDwgMikpOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAyKSk7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgobV9vZmYgJiA2MykgPDwgMik7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiA2KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZW5kOworICAgICAgICAgICAgICAgIGVuZCA9IGluX2VuZDsKKyAgICAgICAgICAgICAgICB3aGlsZSAoaXAgPCBlbmQgJiYgKm1fcG9zID09ICppcCkKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MrKywgaXArKzsKKyAgICAgICAgICAgICAgICBtX2xlbiA9IHBkKGlwLCBpaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPj0gMyk7CisKKyAgICAgICAgICAgIGlmIChtX2xlbiA8PSAzMykKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0zX01BUktFUiB8IChtX2xlbiAtIDIpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX2xlbiAtPSAzMzsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IE0zX01BUktFUiB8IDA7CisgICAgICAgICAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbV9sZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9sZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgobV9vZmYgJiA2MykgPDwgMik7CisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDYpOworICAgICAgICB9CisKKyAgICAgICAgaWkgPSBpcDsKKyAgICAgICAgaWYgKGlwID49IGlwX2VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworCisgICAgLyogc3RvcmUgZmluYWwgbGl0ZXJhbCBydW4gKi8KKyAgICBpZiAocGQoaW5fZW5kLGlpKSA+IDApCisgICAgeworICAgICAgICByZWdpc3RlciBsem9fdWludCB0ID0gcGQoaW5fZW5kLGlpKTsKKworICAgICAgICBpZiAodCA8IDQgJiYgb3AgPiBvdXQpCisgICAgICAgICAgICBvcFstMl0gfD0gTFpPX0JZVEUodCk7CisgICAgICAgIGVsc2UgaWYgKHQgPD0gMzEpCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGx6b191aW50IHR0ID0gdCAtIDMxOworCisgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICB3aGlsZSAodHQgPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHQgLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCh0dCA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSh0dCk7CisgICAgICAgIH0KKyAgICAgICAgZG8gKm9wKysgPSAqaWkrKzsgd2hpbGUgKC0tdCA+IDApOworICAgIH0KKworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09LOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gcHVibGljIGVudHJ5IHBvaW50CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMoaW50KQorbHpvMWZfMV9jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgbHpvX2J5dGVwIG9wID0gb3V0OworICAgIGludCByID0gTFpPX0VfT0s7CisKKyAgICBpZiAoaW5fbGVuIDw9IDApCisgICAgICAgICpvdXRfbGVuID0gMDsKKyAgICBlbHNlIGlmIChpbl9sZW4gPD0gMTApCisgICAgeworICAgICAgICAqb3ArKyA9IExaT19CWVRFKGluX2xlbik7CisgICAgICAgIGRvICpvcCsrID0gKmluKys7IHdoaWxlICgtLWluX2xlbiA+IDApOworICAgICAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHIgPSBkb19jb21wcmVzcyhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtKTsKKworICAgIGlmIChyID09IExaT19FX09LKQorICAgIHsKKyAgICAgICAgb3AgPSBvdXQgKyAqb3V0X2xlbjsKKyAgICAgICAgKm9wKysgPSBNM19NQVJLRVIgfCAxOworICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgKm91dF9sZW4gKz0gMzsKKyAgICB9CisKKyAgICByZXR1cm4gcjsKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFmXzl4LmMgYi9sem8tMi4wMy9zcmMvbHpvMWZfOXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjQwYTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFmXzl4LmMKQEAgLTAsMCArMSwzNDUgQEAKKy8qIGx6bzFmXzl4LmMgLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIExaTzFGLTk5OSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzFmLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE4gICAgICAgICAgIDE2MzgzICAgICAgICAgICAvKiBzaXplIG9mIHJpbmcgYnVmZmVyICovCisjZGVmaW5lIFRIUkVTSE9MRCAgICAgICAyICAgICAgICAgICAvKiBsb3dlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisjZGVmaW5lIEYgICAgICAgICAgICAyMDQ4ICAgICAgICAgICAvKiB1cHBlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisKKworI2RlZmluZSBMWk8xRgorI2RlZmluZSBMWk9fQ09NUFJFU1NfVCAgbHpvMWZfOTk5X3QKKyNkZWZpbmUgbHpvX3N3ZF90ICAgICAgIGx6bzFmXzk5OV9zd2RfdAorI2luY2x1ZGUgImx6b19tY2h3LmNoIgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgbHpvX2J5dGVwCitjb2RlX21hdGNoICggTFpPX0NPTVBSRVNTX1QgKmMsIGx6b19ieXRlcCBvcCwgbHpvX3VpbnQgbV9sZW4sIGx6b191aW50IG1fb2ZmICkKK3sKKyAgICBpZiAobV9sZW4gPD0gTTJfTUFYX0xFTiAmJiBtX29mZiA8PSBNMl9NQVhfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURSgoKG1fbGVuIC0gMikgPDwgNSkgfCAoKG1fb2ZmICYgNykgPDwgMikpOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDMpOworICAgICAgICBjLT5tMl9tKys7CisgICAgfQorICAgIGVsc2UgaWYgKG1fbGVuID09IE0yX01JTl9MRU4gJiYgbV9vZmYgPD0gMiAqIE0yX01BWF9PRkZTRVQgJiYKKyAgICAgICAgICAgICBjLT5yMV9saXQgPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fb2ZmID4gTTJfTUFYX09GRlNFVCk7CisgICAgICAgIG1fb2ZmIC09IDEgKyBNMl9NQVhfT0ZGU0VUOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9vZmYgJiA3KSA8PCAyKSk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMyk7CisgICAgICAgIGMtPnIxX3IrKzsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgaWYgKG1fbGVuIDw9IE0zX01BWF9MRU4pCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0zX01BUktFUiB8IChtX2xlbiAtIDIpKTsKKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBtX2xlbiAtPSBNM19NQVhfTEVOOworICAgICAgICAgICAgKm9wKysgPSBNM19NQVJLRVIgfCAwOworICAgICAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbGVuIC09IDI1NTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPiAwKTsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9sZW4pOworICAgICAgICB9CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKG1fb2ZmICYgNjMpIDw8IDIpOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDYpOworICAgICAgICBjLT5tM19tKys7CisgICAgfQorCisgICAgcmV0dXJuIG9wOworfQorCisKK3N0YXRpYyBsem9fYnl0ZXAKK1NUT1JFX1JVTiAoIGx6b19ieXRlcCBvcCwgY29uc3QgbHpvX2J5dGVwIGlpLCBsem9fdWludCB0LCBsem9fYnl0ZXAgb3V0ICkKK3sKKyAgICBpZiAodCA8IDQgJiYgb3AgPiBvdXQpCisgICAgICAgIG9wWy0yXSB8PSBMWk9fQllURSh0KTsKKyAgICBlbHNlIGlmICh0IDw9IDMxKQorICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQpOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGx6b191aW50IHR0ID0gdCAtIDMxOworCisgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgd2hpbGUgKHR0ID4gMjU1KQorICAgICAgICB7CisgICAgICAgICAgICB0dCAtPSAyNTU7CisgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHR0ID4gMCk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUodHQpOworICAgIH0KKyAgICBkbyAqb3ArKyA9ICppaSsrOyB3aGlsZSAoLS10ID4gMCk7CisKKyAgICByZXR1cm4gb3A7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyB0aGlzIGlzIGEgcHVibGljIGZ1bmN0aW9uLCBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIGEgaGVhZGVyIGZpbGUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX0VYVEVSTihpbnQpCitsem8xZl85OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKTsKKworTFpPX1BVQkxJQyhpbnQpCitsem8xZl85OTlfY29tcHJlc3NfY2FsbGJhY2sgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2NhbGxiYWNrX3AgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfY2hhaW4gKQoreworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX3VpbnQgbGl0OworICAgIGx6b191aW50IG1fbGVuLCBtX29mZjsKKyAgICBMWk9fQ09NUFJFU1NfVCBjYzsKKyAgICBMWk9fQ09NUFJFU1NfVCAqIGNvbnN0IGMgPSAmY2M7CisgICAgbHpvX3N3ZF9wIGNvbnN0IHN3ZCA9IChsem9fc3dkX3ApIHdya21lbTsKKyAgICBpbnQgcjsKKworICAgIC8qIHNhbml0eSBjaGVjayAqLworICAgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKExaTzFGXzk5OV9NRU1fQ09NUFJFU1MgPj0gU0laRU9GX0xaT19TV0RfVCkKKworICAgIGMtPmluaXQgPSAwOworICAgIGMtPmlwID0gYy0+aW4gPSBpbjsKKyAgICBjLT5pbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjLT5jYiA9IGNiOworICAgIGMtPnIxX3IgPSBjLT5tMl9tID0gYy0+bTNfbSA9IDA7CisKKyAgICBvcCA9IG91dDsKKyAgICBpaSA9IGMtPmlwOyAgICAgICAgICAgICAvKiBwb2ludCB0byBzdGFydCBvZiBsaXRlcmFsIHJ1biAqLworICAgIGxpdCA9IDA7CisgICAgYy0+cjFfbGl0ID0gYy0+cjFfbV9sZW4gPSAwOworCisgICAgciA9IGluaXRfbWF0Y2goYyxzd2QsTlVMTCwwLDApOworICAgIGlmIChyICE9IDApCisgICAgICAgIHJldHVybiByOworICAgIGlmIChtYXhfY2hhaW4gPiAwKQorICAgICAgICBzd2QtPm1heF9jaGFpbiA9IG1heF9jaGFpbjsKKworICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDAsMCk7CisgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgcmV0dXJuIHI7CisgICAgd2hpbGUgKGMtPmxvb2sgPiAwKQorICAgIHsKKyAgICAgICAgaW50IGxhenlfbWF0Y2hfbWluX2dhaW4gPSAtMTsKKyAgICAgICAgbHpvX3VpbnQgYWhlYWQgPSAwOworCisgICAgICAgIG1fbGVuID0gYy0+bV9sZW47CisgICAgICAgIG1fb2ZmID0gYy0+bV9vZmY7CisKKyAgICAgICAgYXNzZXJ0KGMtPmlwIC0gYy0+bG9vayA+PSBpbik7CisgICAgICAgIGlmIChsaXQgPT0gMCkKKyAgICAgICAgICAgIGlpID0gYy0+aXAgLSBjLT5sb29rOworICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgYXNzZXJ0KHN3ZC0+Yl9jaGFyID09ICooYy0+aXAgLSBjLT5sb29rKSk7CisKKyAgICAgICAgaWYgKChtX2xlbiA8IE0yX01JTl9MRU4pIHx8CisgICAgICAgICAgICAobV9sZW4gPCBNM19NSU5fTEVOICYmIG1fb2ZmID4gTTJfTUFYX09GRlNFVCkpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiA+PSBpbik7CisgICAgICAgICAgICBhc3NlcnQoYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYgKyBtX2xlbiA8IGMtPmlwKTsKKyAgICAgICAgICAgIGFzc2VydChsem9fbWVtY21wKGMtPmlwIC0gYy0+bG9vaywgYy0+aXAgLSBjLT5sb29rIC0gbV9vZmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisKKyAgICAgICAgICAgIGlmIChsaXQgPCAzKQorICAgICAgICAgICAgICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gPSAxOworICAgICAgICAgICAgZWxzZSBpZiAobGl0ID09IDMpCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDM7CisgICAgICAgICAgICBlbHNlIGlmIChsaXQgPT0gMzEpCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDM7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisgICAgICAgIH0KKworICAgICAgICAvKiB0cnkgYSBsYXp5IG1hdGNoICovCisgICAgICAgIGlmIChtX2xlbiA+IDAgJiYgbGF6eV9tYXRjaF9taW5fZ2FpbiA+PSAwICYmIGMtPmxvb2sgPiBtX2xlbikKKyAgICAgICAgeworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICAgICAgYXNzZXJ0KGMtPmxvb2sgPiAwKTsKKworICAgICAgICAgICAgaWYgKG1fbGVuIDw9IE0yX01BWF9MRU4gJiYgbV9vZmYgPD0gTTJfTUFYX09GRlNFVCAmJgorICAgICAgICAgICAgICAgIGMtPm1fb2ZmID4gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChjLT5tX2xlbiA8PSBNMl9NQVhfTEVOICYmCisgICAgICAgICAgICAgICAgICAgICBjLT5tX29mZiA8PSBNMl9NQVhfT0ZGU0VUICYmCisgICAgICAgICAgICAgICAgICAgICBtX29mZiA+IE0yX01BWF9PRkZTRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxhenlfbWF0Y2hfbWluX2dhaW4gPiAwKQorICAgICAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluIC09IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtX2xlbiA9PSBNMl9NSU5fTEVOICYmIGMtPm1fbGVuID09IE0yX01JTl9MRU4gJiYKKyAgICAgICAgICAgICAgICAgICAgIGMtPm1fb2ZmIDw9IDIgKiBNMl9NQVhfT0ZGU0VUICYmCisgICAgICAgICAgICAgICAgICAgICBtX29mZiA+IE0yX01BWF9PRkZTRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKGxhenlfbWF0Y2hfbWluX2dhaW4gPiAwKQorICAgICAgICAgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluIC09IDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA+PSBtX2xlbiArIGxhenlfbWF0Y2hfbWluX2dhaW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYy0+bGF6eSsrOworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICAgICAgICAgIG1fb2ZmID0gYy0+bV9vZmY7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+aXAgLSBjLT5sb29rLCBjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBsaXQrKzsKKyAgICAgICAgICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhaGVhZCA9IDE7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGlpICsgbGl0ICsgMSA9PSBjLT5pcCAtIGMtPmxvb2spOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID4gMCk7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KGlpICsgbGl0ICsgYWhlYWQgPT0gYy0+aXAgLSBjLT5sb29rKTsKKworCisgICAgICAgIGlmIChtX2xlbiA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICAvKiBhIGxpdGVyYWwgKi8KKyAgICAgICAgICAgIGxpdCsrOworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgLyogMSAtIHN0b3JlIHJ1biAqLworICAgICAgICAgICAgaWYgKGxpdCA+IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb3AgPSBTVE9SRV9SVU4ob3AsaWksbGl0LG91dCk7CisgICAgICAgICAgICAgICAgYy0+cjFfbV9sZW4gPSBtX2xlbjsKKyAgICAgICAgICAgICAgICBjLT5yMV9saXQgPSBsaXQ7CisgICAgICAgICAgICAgICAgbGl0ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBjLT5yMV9saXQgPSBjLT5yMV9tX2xlbiA9IDA7CisKKyAgICAgICAgICAgIC8qIDIgLSBjb2RlIG1hdGNoICovCisgICAgICAgICAgICBvcCA9IGNvZGVfbWF0Y2goYyxvcCxtX2xlbixtX29mZik7CisgICAgICAgICAgICByID0gZmluZF9tYXRjaChjLHN3ZCxtX2xlbiwxK2FoZWFkKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICB9CisKKyAgICAgICAgYy0+Y29kZXNpemUgPSBwZChvcCwgb3V0KTsKKyAgICB9CisKKworICAgIC8qIHN0b3JlIGZpbmFsIHJ1biAqLworICAgIGlmIChsaXQgPiAwKQorICAgICAgICBvcCA9IFNUT1JFX1JVTihvcCxpaSxsaXQsb3V0KTsKKworI2lmIGRlZmluZWQoTFpPX0VPRl9DT0RFKQorICAgICpvcCsrID0gTTNfTUFSS0VSIHwgMTsKKyAgICAqb3ArKyA9IDA7CisgICAgKm9wKysgPSAwOworI2VuZGlmCisKKyAgICBjLT5jb2Rlc2l6ZSA9IHBkKG9wLCBvdXQpOworICAgIGFzc2VydChjLT50ZXh0c2l6ZSA9PSBpbl9sZW4pOworCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKworICAgIGlmIChjLT5jYiAmJiBjLT5jYi0+bnByb2dyZXNzKQorICAgICAgICAoKmMtPmNiLT5ucHJvZ3Jlc3MpKGMtPmNiLCBjLT50ZXh0c2l6ZSwgYy0+Y29kZXNpemUsIDApOworCisjaWYgMAorICAgIHByaW50ZigiJWxkICVsZCAtPiAlbGQ6ICVsZCAlbGQgJWxkICVsZFxuIiwKKyAgICAgICAgKGxvbmcpIGMtPnRleHRzaXplLCAobG9uZylpbl9sZW4sIChsb25nKSBjLT5jb2Rlc2l6ZSwKKyAgICAgICAgYy0+cjFfciwgYy0+bTJfbSwgYy0+bTNfbSwgYy0+bGF6eSk7CisjZW5kaWYKKyAgICByZXR1cm4gTFpPX0VfT0s7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMoaW50KQorbHpvMWZfOTk5X2NvbXByZXNzICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmV0dXJuIGx6bzFmXzk5OV9jb21wcmVzc19jYWxsYmFjayhpbixpbl9sZW4sb3V0LG91dF9sZW4sd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGx6b19jYWxsYmFja19wKSAwLCAwKTsKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFmX2QuY2ggYi9sem8tMi4wMy9zcmMvbHpvMWZfZC5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODJhYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFmX2QuY2gKQEAgLTAsMCArMSwyMjMgQEAKKy8qIGx6bzFmX2QuY2ggLS0gaW1wbGVtZW50YXRpb24gb2YgdGhlIExaTzFGIGRlY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJsem8xX2QuY2giCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkZWNvbXByZXNzIGEgYmxvY2sgb2YgZGF0YS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitET19ERUNPTVBSRVNTICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZWdpc3RlciBsem9fYnl0ZXAgb3A7CisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIHJlZ2lzdGVyIGx6b191aW50IHQ7CisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIG1fcG9zOworCisgICAgY29uc3QgbHpvX2J5dGVwIGNvbnN0IGlwX2VuZCA9IGluICsgaW5fbGVuOworI2lmIGRlZmluZWQoSEFWRV9BTllfT1ApCisgICAgbHpvX2J5dGVwIGNvbnN0IG9wX2VuZCA9IG91dCArICpvdXRfbGVuOworI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKHdya21lbSk7CisKKyAgICAqb3V0X2xlbiA9IDA7CisKKyAgICBvcCA9IG91dDsKKyAgICBpcCA9IGluOworCisgICAgd2hpbGUgKFRFU1RfSVAgJiYgVEVTVF9PUCkKKyAgICB7CisgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgaWYgKHQgPiAzMSkKKyAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisKKyAgICAgICAgLyogYSBsaXRlcmFsIHJ1biAqLworICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgd2hpbGUgKCppcCA9PSAwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHQgKz0gMjU1OworICAgICAgICAgICAgICAgIGlwKys7CisgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHQgKz0gMzEgKyAqaXArKzsKKyAgICAgICAgfQorICAgICAgICAvKiBjb3B5IGxpdGVyYWxzICovCisgICAgICAgIGFzc2VydCh0ID4gMCk7IE5FRURfT1AodCk7IE5FRURfSVAodCsxKTsKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkKKyAgICAgICAgaWYgKHQgPj0gNCkKKyAgICAgICAgeworICAgICAgICAgICAgZG8geworICAgICAgICAgICAgICAgICogKGx6b191aW50MzJwKSBvcCA9ICogKGNvbnN0IGx6b191aW50MzJwKSBpcDsKKyAgICAgICAgICAgICAgICBvcCArPSA0OyBpcCArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICB9IHdoaWxlICh0ID49IDQpOworICAgICAgICAgICAgaWYgKHQgPiAwKSBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKworICAgICAgICB0ID0gKmlwKys7CisKKyAgICAgICAgd2hpbGUgKFRFU1RfSVAgJiYgVEVTVF9PUCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogaGFuZGxlIG1hdGNoZXMgKi8KKyAgICAgICAgICAgIGlmICh0IDwgMzIpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcCAtIDEgLSAweDgwMDsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCA+PiAyKSAmIDc7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMzsKKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgTkVFRF9PUCgzKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgKHQgPCBNM19NQVJLRVIpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKHQgPj4gMikgJiA3OworICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAzOworICAgICAgICAgICAgICAgICAgICB0ID4+PSA1OworICAgICAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMtMSk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gY29weV9tYXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgdCAmPSAzMTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB0ICs9IDMxICsgKmlwKys7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgyKTsKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MgPSBvcDsKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfMikgJiYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09ICgqIChjb25zdCBsem9fdXNob3J0cCkgaXApID4+IDI7CisgICAgICAgICAgICAgICAgICAgIGlwICs9IDI7CisjZWxzZQorICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA+PiAyOworICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCA2OworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGlmIChtX3BvcyA9PSBvcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW9mX2ZvdW5kOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIGNvcHkgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMtMSk7CisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgICAgICAgICAgaWYgKHQgPj0gMiAqIDQgLSAoMyAtIDEpICYmIChvcCAtIG1fcG9zKSA+PSA0KQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgKiAobHpvX3VpbnQzMnApIG9wID0gKiAoY29uc3QgbHpvX3VpbnQzMnApIG1fcG9zOworICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQgLSAoMyAtIDEpOworICAgICAgICAgICAgICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgICAgICAgICAqIChsem9fdWludDMycCkgb3AgPSAqIChjb25zdCBsem9fdWludDMycCkgbV9wb3M7CisgICAgICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICAgICAgICAgIH0gd2hpbGUgKHQgPj0gNCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID4gMCkgZG8gKm9wKysgPSAqbV9wb3MrKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgICAgICB7Citjb3B5X21hdGNoOgorICAgICAgICAgICAgICAgICpvcCsrID0gKm1fcG9zKys7ICpvcCsrID0gKm1fcG9zKys7CisgICAgICAgICAgICAgICAgZG8gKm9wKysgPSAqbV9wb3MrKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHQgPSBpcFstMl0gJiAzOworICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogY29weSBsaXRlcmFscyAqLworICAgICAgICAgICAgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KTsgTkVFRF9JUCh0KzEpOworICAgICAgICAgICAgZG8gKm9wKysgPSAqaXArKzsgd2hpbGUgKC0tdCA+IDApOworICAgICAgICAgICAgdCA9ICppcCsrOworICAgICAgICB9CisgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1RFU1RfSVApIHx8IGRlZmluZWQoSEFWRV9URVNUX09QKQorICAgIC8qIG5vIEVPRiBjb2RlIHdhcyBmb3VuZCAqLworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX0VPRl9OT1RfRk9VTkQ7CisjZW5kaWYKKworZW9mX2ZvdW5kOgorICAgIGFzc2VydCh0ID09IDEpOworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIChpcCA9PSBpcF9lbmQgPyBMWk9fRV9PSyA6CisgICAgICAgICAgIChpcCA8IGlwX2VuZCAgPyBMWk9fRV9JTlBVVF9OT1RfQ09OU1VNRUQgOiBMWk9fRV9JTlBVVF9PVkVSUlVOKSk7CisKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX0lQKQoraW5wdXRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9JTlBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTkVFRF9PUCkKK291dHB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09VVFBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKK2xvb2tiZWhpbmRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9MT09LQkVISU5EX09WRVJSVU47CisjZW5kaWYKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzFmX2QxLmMgYi9sem8tMi4wMy9zcmMvbHpvMWZfZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjcwYmZkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzFmX2QxLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMWZfZDEuYyAtLSBMWk8xRiBkZWNvbXByZXNzaW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxZi5oIgorCisjdW5kZWYgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzFmX2RlY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzFmX2QuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMWZfZDIuYyBiL2x6by0yLjAzL3NyYy9sem8xZl9kMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNjVkY2YKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMWZfZDIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xZl9kMi5jIC0tIExaTzFGIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzFmLmgiCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzFmX2RlY29tcHJlc3Nfc2FmZQorCisjaW5jbHVkZSAibHpvMWZfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF8xLmMgYi9sem8tMi4wMy9zcmMvbHpvMXhfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjNGI4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXhfMS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIGx6bzF4XzEuYyAtLSBMWk8xWC0xIGNvbXByZXNzaW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgTFpPX05FRURfRElDVF9ICisjZGVmaW5lIERfQklUUyAgICAgICAgICAxNAorI2RlZmluZSBEX0lOREVYMShkLHApICAgICAgIGQgPSBETShETVVMKDB4MjEsRFgzKHAsNSw1LDYpKSA+PiA1KQorI2RlZmluZSBEX0lOREVYMihkLHApICAgICAgIGQgPSAoZCAmIChEX01BU0sgJiAweDdmZikpIF4gKERfSElHSCB8IDB4MWYpCisKKyNpbmNsdWRlICJjb25maWcxeC5oIgorCisjZGVmaW5lIERPX0NPTVBSRVNTICAgICBsem8xeF8xX2NvbXByZXNzCisKKyNpbmNsdWRlICJsem8xeF9jLmNoIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF4XzFrLmMgYi9sem8tMi4wMy9zcmMvbHpvMXhfMWsuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTAwZmYxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF4XzFrLmMKQEAgLTAsMCArMSw1MCBAQAorLyogbHpvMXhfMWsuYyAtLSBMWk8xWC0xKDExKSBjb21wcmVzc2lvbiAobmVlZHMgb25seSA4a0Igd29yayBtZW1vcnkpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgTFpPX05FRURfRElDVF9ICisjZGVmaW5lIERfQklUUyAgICAgICAgICAxMQorI2RlZmluZSBEX0lOREVYMShkLHApICAgICAgIGQgPSBETShETVVMKDB4MjEsRFgyKHAsMyw1KSkgPj4gNSkKKyNkZWZpbmUgRF9JTkRFWDIoZCxwKSAgICAgICBkID0gZCBeIERfTUFTSworCisjaW5jbHVkZSAiY29uZmlnMXguaCIKKworI2RlZmluZSBET19DT01QUkVTUyAgICAgbHpvMXhfMV8xMV9jb21wcmVzcworCisjaW5jbHVkZSAibHpvMXhfYy5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF8xbC5jIGIvbHpvLTIuMDMvc3JjL2x6bzF4XzFsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU3MTgzMAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeF8xbC5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qIGx6bzF4XzFsLmMgLS0gTFpPMVgtMSgxMikgY29tcHJlc3Npb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2RlZmluZSBMWk9fTkVFRF9ESUNUX0gKKyNkZWZpbmUgRF9CSVRTICAgICAgICAgIDEyCisjZGVmaW5lIERfSU5ERVgxKGQscCkgICAgICAgZCA9IERNKERNVUwoMHgyMSxEWDIocCw0LDUpKSA+PiA1KQorI2RlZmluZSBEX0lOREVYMihkLHApICAgICAgIGQgPSBkIF4gRF9NQVNLCisKKyNpbmNsdWRlICJjb25maWcxeC5oIgorCisjZGVmaW5lIERPX0NPTVBSRVNTICAgICBsem8xeF8xXzEyX2NvbXByZXNzCisKKyNpbmNsdWRlICJsem8xeF9jLmNoIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF4XzFvLmMgYi9sem8tMi4wMy9zcmMvbHpvMXhfMW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzljYTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF4XzFvLmMKQEAgLTAsMCArMSw1MCBAQAorLyogbHpvMXhfMW8uYyAtLSBMWk8xWC0xKDE1KSBjb21wcmVzc2lvbgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2RlZmluZSBEX0JJVFMgICAgICAgICAgMTUKKyNkZWZpbmUgRF9JTkRFWDEoZCxwKSAgICAgICBkID0gRE0oRE1VTCgweDIxLERYMyhwLDUsNSw2KSkgPj4gNSkKKyNkZWZpbmUgRF9JTkRFWDIoZCxwKSAgICAgICBkID0gKGQgJiAoRF9NQVNLICYgMHg3ZmYpKSBeIChEX0hJR0ggfCAweDFmKQorCisjaW5jbHVkZSAiY29uZmlnMXguaCIKKworI2RlZmluZSBET19DT01QUkVTUyAgICAgbHpvMXhfMV8xNV9jb21wcmVzcworCisjaW5jbHVkZSAibHpvMXhfYy5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF85eC5jIGIvbHpvLTIuMDMvc3JjL2x6bzF4Xzl4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwOGJmOAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeF85eC5jCkBAIC0wLDAgKzEsODgxIEBACisvKiBsem8xeF85eC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xWC05OTkgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZiAhZGVmaW5lZChMWk8xWCkgJiYgIWRlZmluZWQoTFpPMVkpICYmICFkZWZpbmVkKExaTzFaKQorIyAgZGVmaW5lIExaTzFYCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPMVgpCisjICBpbmNsdWRlICJjb25maWcxeC5oIgorI2VsaWYgZGVmaW5lZChMWk8xWSkKKyMgIGluY2x1ZGUgImNvbmZpZzF5LmgiCisjZWxpZiBkZWZpbmVkKExaTzFaKQorIyAgaW5jbHVkZSAiY29uZmlnMXouaCIKKyNlbHNlCisjICBlcnJvcgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIE4gICAgICAgICAgIE00X01BWF9PRkZTRVQgICAvKiBzaXplIG9mIHJpbmcgYnVmZmVyICovCisjZGVmaW5lIFRIUkVTSE9MRCAgICAgICAxICAgICAgICAgICAvKiBsb3dlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisjZGVmaW5lIEYgICAgICAgICAgICAyMDQ4ICAgICAgICAgICAvKiB1cHBlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisKKyNkZWZpbmUgU1dEX0JFU1RfT0ZGICAgIChMWk9fTUFYMyggTTJfTUFYX0xFTiwgTTNfTUFYX0xFTiwgTTRfTUFYX0xFTiApICsgMSkKKworI2lmIGRlZmluZWQoTFpPMVgpCisjICBkZWZpbmUgTFpPX0NPTVBSRVNTX1QgICAgICAgICAgICAgICAgbHpvMXhfOTk5X3QKKyMgIGRlZmluZSBsem9fc3dkX3QgICAgICAgICAgICAgICAgICAgICBsem8xeF85OTlfc3dkX3QKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisjICBkZWZpbmUgTFpPX0NPTVBSRVNTX1QgICAgICAgICAgICAgICAgbHpvMXlfOTk5X3QKKyMgIGRlZmluZSBsem9fc3dkX3QgICAgICAgICAgICAgICAgICAgICBsem8xeV85OTlfc3dkX3QKKyMgIGRlZmluZSBsem8xeF85OTlfY29tcHJlc3NfaW50ZXJuYWwgICBsem8xeV85OTlfY29tcHJlc3NfaW50ZXJuYWwKKyMgIGRlZmluZSBsem8xeF85OTlfY29tcHJlc3NfZGljdCAgICAgICBsem8xeV85OTlfY29tcHJlc3NfZGljdAorIyAgZGVmaW5lIGx6bzF4Xzk5OV9jb21wcmVzc19sZXZlbCAgICAgIGx6bzF5Xzk5OV9jb21wcmVzc19sZXZlbAorIyAgZGVmaW5lIGx6bzF4Xzk5OV9jb21wcmVzcyAgICAgICAgICAgIGx6bzF5Xzk5OV9jb21wcmVzcworI2VsaWYgZGVmaW5lZChMWk8xWikKKyMgIGRlZmluZSBMWk9fQ09NUFJFU1NfVCAgICAgICAgICAgICAgICBsem8xel85OTlfdAorIyAgZGVmaW5lIGx6b19zd2RfdCAgICAgICAgICAgICAgICAgICAgIGx6bzF6Xzk5OV9zd2RfdAorIyAgZGVmaW5lIGx6bzF4Xzk5OV9jb21wcmVzc19pbnRlcm5hbCAgIGx6bzF6Xzk5OV9jb21wcmVzc19pbnRlcm5hbAorIyAgZGVmaW5lIGx6bzF4Xzk5OV9jb21wcmVzc19kaWN0ICAgICAgIGx6bzF6Xzk5OV9jb21wcmVzc19kaWN0CisjICBkZWZpbmUgbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsICAgICAgbHpvMXpfOTk5X2NvbXByZXNzX2xldmVsCisjICBkZWZpbmUgbHpvMXhfOTk5X2NvbXByZXNzICAgICAgICAgICAgbHpvMXpfOTk5X2NvbXByZXNzCisjZWxzZQorIyAgZXJyb3IKKyNlbmRpZgorCisjaWYgMAorIyAgZGVmaW5lIEhFQUQzKGIscCkgXAorICAgICgoKCgoKGx6b194aW50KWJbcF08PDMpXmJbcCsxXSk8PDMpXmJbcCsyXSkgJiAoU1dEX0hTSVpFLTEpKQorI2VuZGlmCisjaWYgMCAmJiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkgJiYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisjICBkZWZpbmUgSEVBRDMoYixwKSBcCisgICAgKCgoKiAobHpvX3VpbnQzMnApICZiW3BdKSBeICgoKiAobHpvX3VpbnQzMnApICZiW3BdKT4+MTApKSAmIChTV0RfSFNJWkUtMSkpCisjZW5kaWYKKworI2luY2x1ZGUgImx6b19tY2h3LmNoIgorCisKKy8qIHRoaXMgaXMgYSBwdWJsaWMgZnVuY3Rpb25zLCBidXQgdGhlcmUgaXMgbm8gcHJvdG90eXBlIGluIGEgaGVhZGVyIGZpbGUgKi8KK0xaT19FWFRFUk4oaW50KQorbHpvMXhfOTk5X2NvbXByZXNzX2ludGVybmFsICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19jYWxsYmFja19wIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHRyeV9sYXp5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgZ29vZF9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBtYXhfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG5pY2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgbWF4X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQzMiBmbGFncyApOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGx6b19ieXRlcAorY29kZV9tYXRjaCAoIExaT19DT01QUkVTU19UICpjLCBsem9fYnl0ZXAgb3AsIGx6b191aW50IG1fbGVuLCBsem9fdWludCBtX29mZiApCit7CisgICAgbHpvX3VpbnQgeF9sZW4gPSBtX2xlbjsKKyAgICBsem9fdWludCB4X29mZiA9IG1fb2ZmOworCisgICAgYy0+bWF0Y2hfYnl0ZXMgKz0gKHVuc2lnbmVkIGxvbmcpIG1fbGVuOworCisjaWYgMAorLyoKKyAgICBzdGF0aWMgbHpvX3VpbnQgbGFzdF9tX2xlbiA9IDAsIGxhc3RfbV9vZmYgPSAwOworICAgIHN0YXRpYyBsem9fdWludCBwcmV2X21fb2ZmWzRdOworICAgIHN0YXRpYyBpbnQgcHJldl9tX29mZl9wdHIgPSAwOworICAgIGludCBpOworCisgICAgLy9pZiAobV9sZW4gPj0gMyAmJiBtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpCisgICAgaWYgKG1fbGVuID49IDMgJiYgbV9sZW4gPD0gTTJfTUFYX0xFTikKKyAgICB7CisgICAgLy9pZiAobV9sZW4gPT0gbGFzdF9tX2xlbiAmJiBtX29mZiA9PSBsYXN0X21fb2ZmKQorICAgICAgICAvL3ByaW50ZigibGFzdF9tX2xlbiArIGxhc3RfbV9vZmZcbiIpOworICAgIC8vZWxzZQorICAgIGlmIChtX29mZiA9PSBsYXN0X21fb2ZmKQorICAgICAgICBwcmludGYoImxhc3RfbV9vZmZcbiIpOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCisgICAgICAgICAgICBpZiAobV9vZmYgPT0gcHJldl9tX29mZltpXSkKKyAgICAgICAgICAgICAgICBwcmludGYoInByZXZfbV9vZmYgJWQ6ICU1bGRcbiIsaSwobG9uZyltX29mZik7CisgICAgfQorICAgIH0KKyAgICBsYXN0X21fbGVuID0gbV9sZW47CisgICAgbGFzdF9tX29mZiA9IHByZXZfbV9vZmZbcHJldl9tX29mZl9wdHJdID0gbV9vZmY7CisgICAgcHJldl9tX29mZl9wdHIgPSAocHJldl9tX29mZl9wdHIgKyAxKSAmIDM7CisqLworI2VuZGlmCisKKyAgICBhc3NlcnQob3AgPiBjLT5vdXQpOworICAgIGlmIChtX2xlbiA9PSAyKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fb2ZmIDw9IE0xX01BWF9PRkZTRVQpOworICAgICAgICBhc3NlcnQoYy0+cjFfbGl0ID4gMCk7IGFzc2VydChjLT5yMV9saXQgPCA0KTsKKyAgICAgICAgbV9vZmYgLT0gMTsKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0xX01BUktFUiB8IChtX29mZiA+PiA2KSk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPDwgMik7CisjZWxzZQorICAgICAgICAqb3ArKyA9IExaT19CWVRFKE0xX01BUktFUiB8ICgobV9vZmYgJiAzKSA8PCAyKSk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMik7CisjZW5kaWYKKyAgICAgICAgYy0+bTFhX20rKzsKKyAgICB9CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICBlbHNlIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUIHx8IG1fb2ZmID09IGMtPmxhc3RfbV9vZmYpKQorI2Vsc2UKKyAgICBlbHNlIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpCisjZW5kaWYKKyAgICB7CisgICAgICAgIGFzc2VydChtX2xlbiA+PSAzKTsKKyNpZiBkZWZpbmVkKExaTzFYKQorICAgICAgICBtX29mZiAtPSAxOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSAxKSA8PCA1KSB8ICgobV9vZmYgJiA3KSA8PCAyKSk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMyk7CisgICAgICAgIGFzc2VydChvcFstMl0gPj0gTTJfTUFSS0VSKTsKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgIG1fb2ZmIC09IDE7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiArIDEpIDw8IDQpIHwgKChtX29mZiAmIDMpIDw8IDIpKTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiAyKTsKKyAgICAgICAgYXNzZXJ0KG9wWy0yXSA+PSBNMl9NQVJLRVIpOworI2VsaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgaWYgKG1fb2ZmID09IGMtPmxhc3RfbV9vZmYpCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKCgobV9sZW4gLSAxKSA8PCA1KSB8ICgweDcwMCA+PiA2KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiAtIDEpIDw8IDUpIHwgKG1fb2ZmID4+IDYpKTsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPDwgMik7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICBjLT5tMl9tKys7CisgICAgfQorICAgIGVsc2UgaWYgKG1fbGVuID09IE0yX01JTl9MRU4gJiYgbV9vZmYgPD0gTVhfTUFYX09GRlNFVCAmJiBjLT5yMV9saXQgPj0gNCkKKyAgICB7CisgICAgICAgIGFzc2VydChtX2xlbiA9PSAzKTsKKyAgICAgICAgYXNzZXJ0KG1fb2ZmID4gTTJfTUFYX09GRlNFVCk7CisgICAgICAgIG1fb2ZmIC09IDEgKyBNMl9NQVhfT0ZGU0VUOworI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTFfTUFSS0VSIHwgKG1fb2ZmID4+IDYpKTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA8PCAyKTsKKyNlbHNlCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTFfTUFSS0VSIHwgKChtX29mZiAmIDMpIDw8IDIpKTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiAyKTsKKyNlbmRpZgorICAgICAgICBjLT5tMWJfbSsrOworICAgIH0KKyAgICBlbHNlIGlmIChtX29mZiA8PSBNM19NQVhfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KG1fbGVuID49IDMpOworICAgICAgICBtX29mZiAtPSAxOworICAgICAgICBpZiAobV9sZW4gPD0gTTNfTUFYX0xFTikKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTNfTUFSS0VSIHwgKG1fbGVuIC0gMikpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fbGVuIC09IE0zX01BWF9MRU47CisgICAgICAgICAgICAqb3ArKyA9IE0zX01BUktFUiB8IDA7CisgICAgICAgICAgICB3aGlsZSAobV9sZW4gPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9sZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShtX2xlbik7CisgICAgICAgIH0KKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDYpOworICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmIDw8IDIpOworI2Vsc2UKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA8PCAyKTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiA2KTsKKyNlbmRpZgorICAgICAgICBjLT5tM19tKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGx6b191aW50IGs7CisKKyAgICAgICAgYXNzZXJ0KG1fbGVuID49IDMpOworICAgICAgICBhc3NlcnQobV9vZmYgPiAweDQwMDApOyBhc3NlcnQobV9vZmYgPD0gMHhiZmZmKTsKKyAgICAgICAgbV9vZmYgLT0gMHg0MDAwOworICAgICAgICBrID0gKG1fb2ZmICYgMHg0MDAwKSA+PiAxMTsKKyAgICAgICAgaWYgKG1fbGVuIDw9IE00X01BWF9MRU4pCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE00X01BUktFUiB8IGsgfCAobV9sZW4gLSAyKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgbV9sZW4gLT0gTTRfTUFYX0xFTjsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTRfTUFSS0VSIHwgayB8IDApOworICAgICAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fbGVuIC09IDI1NTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPiAwKTsKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9sZW4pOworICAgICAgICB9CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA+PiA2KTsKKyAgICAgICAgKm9wKysgPSBMWk9fQllURShtX29mZiA8PCAyKTsKKyNlbHNlCisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPDwgMik7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gNik7CisjZW5kaWYKKyAgICAgICAgYy0+bTRfbSsrOworICAgIH0KKworICAgIGMtPmxhc3RfbV9sZW4gPSB4X2xlbjsKKyAgICBjLT5sYXN0X21fb2ZmID0geF9vZmY7CisgICAgcmV0dXJuIG9wOworfQorCisKK3N0YXRpYyBsem9fYnl0ZXAKK1NUT1JFX1JVTiAoIExaT19DT01QUkVTU19UICpjLCBsem9fYnl0ZXAgb3AsIGNvbnN0IGx6b19ieXRlcCBpaSwgbHpvX3VpbnQgdCApCit7CisgICAgYy0+bGl0X2J5dGVzICs9ICh1bnNpZ25lZCBsb25nKSB0OworCisgICAgaWYgKG9wID09IGMtPm91dCAmJiB0IDw9IDIzOCkKKyAgICB7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUoMTcgKyB0KTsKKyAgICB9CisgICAgZWxzZSBpZiAodCA8PSAzKQorICAgIHsKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICBvcFstMV0gfD0gTFpPX0JZVEUodCk7CisjZWxzZQorICAgICAgICBvcFstMl0gfD0gTFpPX0JZVEUodCk7CisjZW5kaWYKKyAgICAgICAgYy0+bGl0MV9yKys7CisgICAgfQorICAgIGVsc2UgaWYgKHQgPD0gMTgpCisgICAgeworICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQgLSAzKTsKKyAgICAgICAgYy0+bGl0Ml9yKys7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGx6b191aW50IHR0ID0gdCAtIDE4OworCisgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgd2hpbGUgKHR0ID4gMjU1KQorICAgICAgICB7CisgICAgICAgICAgICB0dCAtPSAyNTU7CisgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KHR0ID4gMCk7CisgICAgICAgICpvcCsrID0gTFpPX0JZVEUodHQpOworICAgICAgICBjLT5saXQzX3IrKzsKKyAgICB9CisgICAgZG8gKm9wKysgPSAqaWkrKzsgd2hpbGUgKC0tdCA+IDApOworCisgICAgcmV0dXJuIG9wOworfQorCisKK3N0YXRpYyBsem9fYnl0ZXAKK2NvZGVfcnVuICggTFpPX0NPTVBSRVNTX1QgKmMsIGx6b19ieXRlcCBvcCwgY29uc3QgbHpvX2J5dGVwIGlpLAorICAgICAgICAgICBsem9fdWludCBsaXQsIGx6b191aW50IG1fbGVuICkKK3sKKyAgICBpZiAobGl0ID4gMCkKKyAgICB7CisgICAgICAgIGFzc2VydChtX2xlbiA+PSAyKTsKKyAgICAgICAgb3AgPSBTVE9SRV9SVU4oYyxvcCxpaSxsaXQpOworICAgICAgICBjLT5yMV9tX2xlbiA9IG1fbGVuOworICAgICAgICBjLT5yMV9saXQgPSBsaXQ7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGFzc2VydChtX2xlbiA+PSAzKTsKKyAgICAgICAgYy0+cjFfbV9sZW4gPSAwOworICAgICAgICBjLT5yMV9saXQgPSAwOworICAgIH0KKworICAgIHJldHVybiBvcDsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQKK2xlbl9vZl9jb2RlZF9tYXRjaCAoIGx6b191aW50IG1fbGVuLCBsem9fdWludCBtX29mZiwgbHpvX3VpbnQgbGl0ICkKK3sKKyAgICBpbnQgbiA9IDQ7CisKKyAgICBpZiAobV9sZW4gPCAyKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1fbGVuID09IDIpCisgICAgICAgIHJldHVybiAobV9vZmYgPD0gTTFfTUFYX09GRlNFVCAmJiBsaXQgPiAwICYmIGxpdCA8IDQpID8gMiA6IC0xOworICAgIGlmIChtX2xlbiA8PSBNMl9NQVhfTEVOICYmIG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQpCisgICAgICAgIHJldHVybiAyOworICAgIGlmIChtX2xlbiA9PSBNMl9NSU5fTEVOICYmIG1fb2ZmIDw9IE1YX01BWF9PRkZTRVQgJiYgbGl0ID49IDQpCisgICAgICAgIHJldHVybiAyOworICAgIGlmIChtX29mZiA8PSBNM19NQVhfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGVuIDw9IE0zX01BWF9MRU4pCisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgbV9sZW4gLT0gTTNfTUFYX0xFTjsKKyAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICB7CisgICAgICAgICAgICBtX2xlbiAtPSAyNTU7CisgICAgICAgICAgICBuKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG47CisgICAgfQorICAgIGlmIChtX29mZiA8PSBNNF9NQVhfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgaWYgKG1fbGVuIDw9IE00X01BWF9MRU4pCisgICAgICAgICAgICByZXR1cm4gMzsKKyAgICAgICAgbV9sZW4gLT0gTTRfTUFYX0xFTjsKKyAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICB7CisgICAgICAgICAgICBtX2xlbiAtPSAyNTU7CisgICAgICAgICAgICBuKys7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG47CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKworCitzdGF0aWMgbHpvX2ludAorbWluX2dhaW4obHpvX3VpbnQgYWhlYWQsIGx6b191aW50IGxpdDEsIGx6b191aW50IGxpdDIsIGludCBsMSwgaW50IGwyLCBpbnQgbDMpCit7CisgICAgbHpvX2ludCBsYXp5X21hdGNoX21pbl9nYWluID0gMDsKKworICAgIGFzc2VydCAoYWhlYWQgPj0gMSk7CisgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiArPSBhaGVhZDsKKworI2lmIDAKKyAgICBpZiAobDMgPiAwKQorICAgICAgICBsaXQyIC09IGFoZWFkOworI2VuZGlmCisKKyAgICBpZiAobGl0MSA8PSAzKQorICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluICs9IChsaXQyIDw9IDMpID8gMCA6IDI7CisgICAgZWxzZSBpZiAobGl0MSA8PSAxOCkKKyAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiArPSAobGl0MiA8PSAxOCkgPyAwIDogMTsKKworICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gKz0gKGwyIC0gbDEpICogMjsKKyAgICBpZiAobDMgPiAwKQorICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluIC09IChhaGVhZCAtIGwzKSAqIDI7CisKKyAgICBpZiAobGF6eV9tYXRjaF9taW5fZ2FpbiA8IDApCisgICAgICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gPSAwOworCisjaWYgMAorICAgIGlmIChsMSA9PSAyKQorICAgICAgICBpZiAobGF6eV9tYXRjaF9taW5fZ2FpbiA9PSAwKQorICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisjZW5kaWYKKworICAgIHJldHVybiBsYXp5X21hdGNoX21pbl9nYWluOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKE5ERUJVRykKK3N0YXRpYwordm9pZCBhc3NlcnRfbWF0Y2goIGNvbnN0IGx6b19zd2RfcCBzd2QsIGx6b191aW50IG1fbGVuLCBsem9fdWludCBtX29mZiApCit7CisgICAgY29uc3QgTFpPX0NPTVBSRVNTX1QgKmMgPSBzd2QtPmM7CisgICAgbHpvX3VpbnQgZF9vZmY7CisKKyAgICBhc3NlcnQobV9sZW4gPj0gMik7CisgICAgaWYgKG1fb2ZmIDw9IChsem9fdWludCkgKGMtPmJwIC0gYy0+aW4pKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGMtPmJwIC0gbV9vZmYgKyBtX2xlbiA8IGMtPmlwKTsKKyAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+YnAsIGMtPmJwIC0gbV9vZmYsIG1fbGVuKSA9PSAwKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KHN3ZC0+ZGljdCAhPSBOVUxMKTsKKyAgICAgICAgZF9vZmYgPSBtX29mZiAtIChsem9fdWludCkgKGMtPmJwIC0gYy0+aW4pOworICAgICAgICBhc3NlcnQoZF9vZmYgPD0gc3dkLT5kaWN0X2xlbik7CisgICAgICAgIGlmIChtX2xlbiA+IGRfb2ZmKQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChjLT5icCwgc3dkLT5kaWN0X2VuZCAtIGRfb2ZmLCBkX29mZikgPT0gMCk7CisgICAgICAgICAgICBhc3NlcnQoYy0+aW4gKyBtX2xlbiAtIGRfb2ZmIDwgYy0+aXApOworICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+YnAgKyBkX29mZiwgYy0+aW4sIG1fbGVuIC0gZF9vZmYpID09IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+YnAsIHN3ZC0+ZGljdF9lbmQgLSBkX29mZiwgbV9sZW4pID09IDApOworICAgICAgICB9CisgICAgfQorfQorI2Vsc2UKKyMgIGRlZmluZSBhc3NlcnRfbWF0Y2goYSxiLGMpICAgKCh2b2lkKTApCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChTV0RfQkVTVF9PRkYpCisKK3N0YXRpYyB2b2lkCitiZXR0ZXJfbWF0Y2ggKCBjb25zdCBsem9fc3dkX3Agc3dkLCBsem9fdWludCAqbV9sZW4sIGx6b191aW50ICptX29mZiApCit7CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICBjb25zdCBMWk9fQ09NUFJFU1NfVCAqYyA9IHN3ZC0+YzsKKyNlbmRpZgorCisgICAgaWYgKCptX2xlbiA8PSBNMl9NSU5fTEVOKQorICAgICAgICByZXR1cm47CisjaWYgZGVmaW5lZChMWk8xWikKKyAgICBpZiAoKm1fb2ZmID09IGMtPmxhc3RfbV9vZmYgJiYgKm1fbGVuIDw9IE0yX01BWF9MRU4pCisgICAgICAgIHJldHVybjsKKyNpZiAxCisgICAgaWYgKCptX2xlbiA+PSBNMl9NSU5fTEVOICsgMSAmJiAqbV9sZW4gPD0gTTJfTUFYX0xFTiArIDEgJiYKKyAgICAgICAgYy0+bGFzdF9tX29mZiAmJiBzd2QtPmJlc3Rfb2ZmWyptX2xlbi0xXSA9PSBjLT5sYXN0X21fb2ZmKQorICAgIHsKKyAgICAgICAgKm1fbGVuID0gKm1fbGVuIC0gMTsKKyAgICAgICAgKm1fb2ZmID0gc3dkLT5iZXN0X29mZlsqbV9sZW5dOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjZW5kaWYKKworICAgIGlmICgqbV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgcmV0dXJuOworCisjaWYgMQorICAgIC8qIE0zL000IC0+IE0yICovCisgICAgaWYgKCptX29mZiA+IE0yX01BWF9PRkZTRVQgJiYKKyAgICAgICAgKm1fbGVuID49IE0yX01JTl9MRU4gKyAxICYmICptX2xlbiA8PSBNMl9NQVhfTEVOICsgMSAmJgorICAgICAgICBzd2QtPmJlc3Rfb2ZmWyptX2xlbi0xXSAmJiBzd2QtPmJlc3Rfb2ZmWyptX2xlbi0xXSA8PSBNMl9NQVhfT0ZGU0VUKQorICAgIHsKKyAgICAgICAgKm1fbGVuID0gKm1fbGVuIC0gMTsKKyAgICAgICAgKm1fb2ZmID0gc3dkLT5iZXN0X29mZlsqbV9sZW5dOworICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisKKyNpZiAxCisgICAgLyogTTQgLT4gTTIgKi8KKyAgICBpZiAoKm1fb2ZmID4gTTNfTUFYX09GRlNFVCAmJgorICAgICAgICAqbV9sZW4gPj0gTTRfTUFYX0xFTiArIDEgJiYgKm1fbGVuIDw9IE0yX01BWF9MRU4gKyAyICYmCisgICAgICAgIHN3ZC0+YmVzdF9vZmZbKm1fbGVuLTJdICYmIHN3ZC0+YmVzdF9vZmZbKm1fbGVuLTJdIDw9IE0yX01BWF9PRkZTRVQpCisgICAgeworICAgICAgICAqbV9sZW4gPSAqbV9sZW4gLSAyOworICAgICAgICAqbV9vZmYgPSBzd2QtPmJlc3Rfb2ZmWyptX2xlbl07CisgICAgICAgIHJldHVybjsKKyAgICB9CisjZW5kaWYKKworI2lmIDEKKyAgICAvKiBNNCAtPiBNMyAqLworICAgIGlmICgqbV9vZmYgPiBNM19NQVhfT0ZGU0VUICYmCisgICAgICAgICptX2xlbiA+PSBNNF9NQVhfTEVOICsgMSAmJiAqbV9sZW4gPD0gTTNfTUFYX0xFTiArIDEgJiYKKyAgICAgICAgc3dkLT5iZXN0X29mZlsqbV9sZW4tMV0gJiYgc3dkLT5iZXN0X29mZlsqbV9sZW4tMV0gPD0gTTNfTUFYX09GRlNFVCkKKyAgICB7CisgICAgICAgICptX2xlbiA9ICptX2xlbiAtIDE7CisgICAgICAgICptX29mZiA9IHN3ZC0+YmVzdF9vZmZbKm1fbGVuXTsKKyAgICB9CisjZW5kaWYKK30KKworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK2x6bzF4Xzk5OV9jb21wcmVzc19pbnRlcm5hbCAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY2FsbGJhY2tfcCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cnlfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IGdvb2RfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3VpbnQgbWF4X2xhenksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdWludCBuaWNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG1heF9jaGFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50MzIgZmxhZ3MgKQoreworICAgIGx6b19ieXRlcCBvcDsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX3VpbnQgbGl0OworICAgIGx6b191aW50IG1fbGVuLCBtX29mZjsKKyAgICBMWk9fQ09NUFJFU1NfVCBjYzsKKyAgICBMWk9fQ09NUFJFU1NfVCAqIGNvbnN0IGMgPSAmY2M7CisgICAgbHpvX3N3ZF9wIGNvbnN0IHN3ZCA9IChsem9fc3dkX3ApIHdya21lbTsKKyAgICBpbnQgcjsKKworICAgIC8qIHNhbml0eSBjaGVjayAqLworI2lmIGRlZmluZWQoTFpPMVgpCisgICAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlQoTFpPMVhfOTk5X01FTV9DT01QUkVTUyA+PSBTSVpFT0ZfTFpPX1NXRF9UKQorI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChMWk8xWV85OTlfTUVNX0NPTVBSRVNTID49IFNJWkVPRl9MWk9fU1dEX1QpCisjZWxpZiBkZWZpbmVkKExaTzFaKQorICAgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKExaTzFaXzk5OV9NRU1fQ09NUFJFU1MgPj0gU0laRU9GX0xaT19TV0RfVCkKKyNlbHNlCisjICBlcnJvcgorI2VuZGlmCisKKy8qIHNldHVwIHBhcmFtZXRlciBkZWZhdWx0cyAqLworICAgIC8qIG51bWJlciBvZiBsYXp5IG1hdGNoIHRyaWVzICovCisgICAgaWYgKHRyeV9sYXp5IDwgMCkKKyAgICAgICAgdHJ5X2xhenkgPSAxOworICAgIC8qIHJlZHVjZSBsYXp5IG1hdGNoIHNlYXJjaCBpZiB3ZSBhbHJlYWR5IGhhdmUgYSBtYXRjaCB3aXRoIHRoaXMgbGVuZ3RoICovCisgICAgaWYgKGdvb2RfbGVuZ3RoIDw9IDApCisgICAgICAgIGdvb2RfbGVuZ3RoID0gMzI7CisgICAgLyogZG8gbm90IHRyeSBhIGxhenkgbWF0Y2ggaWYgd2UgYWxyZWFkeSBoYXZlIGEgbWF0Y2ggd2l0aCB0aGlzIGxlbmd0aCAqLworICAgIGlmIChtYXhfbGF6eSA8PSAwKQorICAgICAgICBtYXhfbGF6eSA9IDMyOworICAgIC8qIHN0b3Agc2VhcmNoaW5nIGZvciBsb25nZXIgbWF0Y2hlcyB0aGFuIHRoaXMgb25lICovCisgICAgaWYgKG5pY2VfbGVuZ3RoIDw9IDApCisgICAgICAgIG5pY2VfbGVuZ3RoID0gMDsKKyAgICAvKiBkb24ndCBzZWFyY2ggbW9yZSBwb3NpdGlvbnMgdGhhbiB0aGlzICovCisgICAgaWYgKG1heF9jaGFpbiA8PSAwKQorICAgICAgICBtYXhfY2hhaW4gPSBTV0RfTUFYX0NIQUlOOworCisgICAgYy0+aW5pdCA9IDA7CisgICAgYy0+aXAgPSBjLT5pbiA9IGluOworICAgIGMtPmluX2VuZCA9IGluICsgaW5fbGVuOworICAgIGMtPm91dCA9IG91dDsKKyAgICBjLT5jYiA9IGNiOworICAgIGMtPm0xYV9tID0gYy0+bTFiX20gPSBjLT5tMl9tID0gYy0+bTNfbSA9IGMtPm00X20gPSAwOworICAgIGMtPmxpdDFfciA9IGMtPmxpdDJfciA9IGMtPmxpdDNfciA9IDA7CisKKyAgICBvcCA9IG91dDsKKyAgICBpaSA9IGMtPmlwOyAgICAgICAgICAgICAvKiBwb2ludCB0byBzdGFydCBvZiBsaXRlcmFsIHJ1biAqLworICAgIGxpdCA9IDA7CisgICAgYy0+cjFfbGl0ID0gYy0+cjFfbV9sZW4gPSAwOworCisgICAgciA9IGluaXRfbWF0Y2goYyxzd2QsZGljdCxkaWN0X2xlbixmbGFncyk7CisgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgcmV0dXJuIHI7CisgICAgaWYgKG1heF9jaGFpbiA+IDApCisgICAgICAgIHN3ZC0+bWF4X2NoYWluID0gbWF4X2NoYWluOworICAgIGlmIChuaWNlX2xlbmd0aCA+IDApCisgICAgICAgIHN3ZC0+bmljZV9sZW5ndGggPSBuaWNlX2xlbmd0aDsKKworICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDAsMCk7CisgICAgaWYgKHIgIT0gMCkKKyAgICAgICAgcmV0dXJuIHI7CisgICAgd2hpbGUgKGMtPmxvb2sgPiAwKQorICAgIHsKKyAgICAgICAgbHpvX3VpbnQgYWhlYWQ7CisgICAgICAgIGx6b191aW50IG1heF9haGVhZDsKKyAgICAgICAgaW50IGwxLCBsMiwgbDM7CisKKyAgICAgICAgYy0+Y29kZXNpemUgPSBwZChvcCwgb3V0KTsKKworICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICBtX29mZiA9IGMtPm1fb2ZmOworCisgICAgICAgIGFzc2VydChjLT5icCA9PSBjLT5pcCAtIGMtPmxvb2spOworICAgICAgICBhc3NlcnQoYy0+YnAgPj0gaW4pOworICAgICAgICBpZiAobGl0ID09IDApCisgICAgICAgICAgICBpaSA9IGMtPmJwOworICAgICAgICBhc3NlcnQoaWkgKyBsaXQgPT0gYy0+YnApOworICAgICAgICBhc3NlcnQoc3dkLT5iX2NoYXIgPT0gKihjLT5icCkpOworCisgICAgICAgIGlmICggbV9sZW4gPCAyIHx8CisgICAgICAgICAgICAobV9sZW4gPT0gMiAmJiAobV9vZmYgPiBNMV9NQVhfT0ZGU0VUIHx8IGxpdCA9PSAwIHx8IGxpdCA+PSA0KSkgfHwKKyNpZiAxCisgICAgICAgICAgICAvKiBEbyBub3QgYWNjZXB0IHRoaXMgbWF0Y2ggZm9yIGNvbXByZXNzZWQtZGF0YSBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgKiB3aXRoIExaTyB2MS4wMSBhbmQgYmVmb3JlCisgICAgICAgICAgICAgKiBbIG1pZ2h0IGJlIGEgcHJvYmxlbSBmb3IgZGVjb21wcmVzcygpIGFuZCBvcHRpbWl6ZSgpIF0KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgKG1fbGVuID09IDIgJiYgb3AgPT0gb3V0KSB8fAorI2VuZGlmCisgICAgICAgICAgICAob3AgPT0gb3V0ICYmIGxpdCA9PSAwKSkKKyAgICAgICAgeworICAgICAgICAgICAgLyogYSBsaXRlcmFsICovCisgICAgICAgICAgICBtX2xlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobV9sZW4gPT0gTTJfTUlOX0xFTikKKyAgICAgICAgeworICAgICAgICAgICAgLyogY29tcHJlc3Npb24gcmF0aW8gaW1wcm92ZXMgaWYgd2UgY29kZSBhIGxpdGVyYWwgaW4gc29tZSBjYXNlcyAqLworICAgICAgICAgICAgaWYgKG1fb2ZmID4gTVhfTUFYX09GRlNFVCAmJiBsaXQgPj0gNCkKKyAgICAgICAgICAgICAgICBtX2xlbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9sZW4gPT0gMCkKKyAgICAgICAgeworICAgIC8qIGEgbGl0ZXJhbCAqLworICAgICAgICAgICAgbGl0Kys7CisgICAgICAgICAgICBzd2QtPm1heF9jaGFpbiA9IG1heF9jaGFpbjsKKyAgICAgICAgICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDEsMCk7CisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAvKiBhIG1hdGNoICovCisjaWYgZGVmaW5lZChTV0RfQkVTVF9PRkYpCisgICAgICAgIGlmIChzd2QtPnVzZV9iZXN0X29mZikKKyAgICAgICAgICAgIGJldHRlcl9tYXRjaChzd2QsJm1fbGVuLCZtX29mZik7CisjZW5kaWYKKyAgICAgICAgYXNzZXJ0X21hdGNoKHN3ZCxtX2xlbixtX29mZik7CisKKworCisgICAgICAgIC8qIHNoYWxsIHdlIHRyeSBhIGxhenkgbWF0Y2ggPyAqLworICAgICAgICBhaGVhZCA9IDA7CisgICAgICAgIGlmICh0cnlfbGF6eSA8PSAwIHx8IG1fbGVuID49IG1heF9sYXp5KQorICAgICAgICB7CisgICAgICAgICAgICAvKiBubyAqLworICAgICAgICAgICAgbDEgPSAwOworICAgICAgICAgICAgbWF4X2FoZWFkID0gMDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qIHllcywgdHJ5IGEgbGF6eSBtYXRjaCAqLworICAgICAgICAgICAgbDEgPSBsZW5fb2ZfY29kZWRfbWF0Y2gobV9sZW4sbV9vZmYsbGl0KTsKKyAgICAgICAgICAgIGFzc2VydChsMSA+IDApOworI2lmIDEKKyAgICAgICAgICAgIG1heF9haGVhZCA9IExaT19NSU4oKGx6b191aW50KXRyeV9sYXp5LCAobHpvX3VpbnQpbDEgLSAxKTsKKyNlbHNlCisgICAgICAgICAgICBtYXhfYWhlYWQgPSBMWk9fTUlOMyh0cnlfbGF6eSwgbDEsIG1fbGVuIC0gMSk7CisjZW5kaWYKKyAgICAgICAgfQorCisKKyAgICAgICAgd2hpbGUgKGFoZWFkIDwgbWF4X2FoZWFkICYmIGMtPmxvb2sgPiBtX2xlbikKKyAgICAgICAgeworICAgICAgICAgICAgbHpvX2ludCBsYXp5X21hdGNoX21pbl9nYWluOworCisgICAgICAgICAgICBpZiAobV9sZW4gPj0gZ29vZF9sZW5ndGgpCisgICAgICAgICAgICAgICAgc3dkLT5tYXhfY2hhaW4gPSBtYXhfY2hhaW4gPj4gMjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzd2QtPm1heF9jaGFpbiA9IG1heF9jaGFpbjsKKyAgICAgICAgICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLDEsMCk7CisgICAgICAgICAgICBhaGVhZCsrOworCisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgICAgIGFzc2VydChjLT5sb29rID4gMCk7CisgICAgICAgICAgICBhc3NlcnQoaWkgKyBsaXQgKyBhaGVhZCA9PSBjLT5icCk7CisKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgaWYgKG1fb2ZmID09IGMtPmxhc3RfbV9vZmYgJiYgYy0+bV9vZmYgIT0gYy0+bGFzdF9tX29mZikKKyAgICAgICAgICAgICAgICBpZiAobV9sZW4gPj0gTTJfTUlOX0xFTiAmJiBtX2xlbiA8PSBNMl9NQVhfTEVOKQorICAgICAgICAgICAgICAgICAgICBjLT5tX2xlbiA9IDA7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA8IG1fbGVuKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIDEKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA9PSBtX2xlbiAmJiBjLT5tX29mZiA+PSBtX29mZikKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoU1dEX0JFU1RfT0ZGKQorICAgICAgICAgICAgaWYgKHN3ZC0+dXNlX2Jlc3Rfb2ZmKQorICAgICAgICAgICAgICAgIGJldHRlcl9tYXRjaChzd2QsJmMtPm1fbGVuLCZjLT5tX29mZik7CisjZW5kaWYKKyAgICAgICAgICAgIGwyID0gbGVuX29mX2NvZGVkX21hdGNoKGMtPm1fbGVuLGMtPm1fb2ZmLGxpdCthaGVhZCk7CisgICAgICAgICAgICBpZiAobDIgPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmIDAKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA9PSBtX2xlbiAmJiBsMiA+PSBsMSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorCisKKyNpZiAxCisgICAgICAgICAgICAvKiBjb21wcmVzc2VkLWRhdGEgY29tcGF0aWJpbGl0eSBbc2VlIGFib3ZlXSAqLworICAgICAgICAgICAgbDMgPSAob3AgPT0gb3V0KSA/IC0xIDogbGVuX29mX2NvZGVkX21hdGNoKGFoZWFkLG1fb2ZmLGxpdCk7CisjZWxzZQorICAgICAgICAgICAgbDMgPSBsZW5fb2ZfY29kZWRfbWF0Y2goYWhlYWQsbV9vZmYsbGl0KTsKKyNlbmRpZgorCisgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gbWluX2dhaW4oYWhlYWQsbGl0LGxpdCthaGVhZCxsMSxsMixsMyk7CisgICAgICAgICAgICBpZiAoYy0+bV9sZW4gPj0gbV9sZW4gKyBsYXp5X21hdGNoX21pbl9nYWluKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGMtPmxhenkrKzsKKyAgICAgICAgICAgICAgICBhc3NlcnRfbWF0Y2goc3dkLGMtPm1fbGVuLGMtPm1fb2ZmKTsKKworICAgICAgICAgICAgICAgIGlmIChsMyA+IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAvKiBjb2RlIHByZXZpb3VzIHJ1biAqLworICAgICAgICAgICAgICAgICAgICBvcCA9IGNvZGVfcnVuKGMsb3AsaWksbGl0LGFoZWFkKTsKKyAgICAgICAgICAgICAgICAgICAgbGl0ID0gMDsKKyAgICAgICAgICAgICAgICAgICAgLyogY29kZSBzaG9ydGVuZWQgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgb3AgPSBjb2RlX21hdGNoKGMsb3AsYWhlYWQsbV9vZmYpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsaXQgKz0gYWhlYWQ7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChpaSArIGxpdCA9PSBjLT5icCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGdvdG8gbGF6eV9tYXRjaF9kb25lOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKworICAgICAgICBhc3NlcnQoaWkgKyBsaXQgKyBhaGVhZCA9PSBjLT5icCk7CisKKyAgICAgICAgLyogMSAtIGNvZGUgcnVuICovCisgICAgICAgIG9wID0gY29kZV9ydW4oYyxvcCxpaSxsaXQsbV9sZW4pOworICAgICAgICBsaXQgPSAwOworCisgICAgICAgIC8qIDIgLSBjb2RlIG1hdGNoICovCisgICAgICAgIG9wID0gY29kZV9tYXRjaChjLG9wLG1fbGVuLG1fb2ZmKTsKKyAgICAgICAgc3dkLT5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CisgICAgICAgIHIgPSBmaW5kX21hdGNoKGMsc3dkLG1fbGVuLDErYWhlYWQpOworICAgICAgICBhc3NlcnQociA9PSAwKTsKKworbGF6eV9tYXRjaF9kb25lOiA7CisgICAgfQorCisKKyAgICAvKiBzdG9yZSBmaW5hbCBydW4gKi8KKyAgICBpZiAobGl0ID4gMCkKKyAgICAgICAgb3AgPSBTVE9SRV9SVU4oYyxvcCxpaSxsaXQpOworCisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpCisgICAgKm9wKysgPSBNNF9NQVJLRVIgfCAxOworICAgICpvcCsrID0gMDsKKyAgICAqb3ArKyA9IDA7CisjZW5kaWYKKworICAgIGMtPmNvZGVzaXplID0gcGQob3AsIG91dCk7CisgICAgYXNzZXJ0KGMtPnRleHRzaXplID09IGluX2xlbik7CisKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworCisgICAgaWYgKGMtPmNiICYmIGMtPmNiLT5ucHJvZ3Jlc3MpCisgICAgICAgICgqYy0+Y2ItPm5wcm9ncmVzcykoYy0+Y2IsIGMtPnRleHRzaXplLCBjLT5jb2Rlc2l6ZSwgMCk7CisKKyNpZiAwCisgICAgcHJpbnRmKCIlbGQgJWxkIC0+ICVsZCAgJWxkOiAlbGQgJWxkICVsZCAlbGQgJWxkICAlbGQ6ICVsZCAlbGQgJWxkICAlbGRcbiIsCisgICAgICAgIChsb25nKSBjLT50ZXh0c2l6ZSwgKGxvbmcpIGluX2xlbiwgKGxvbmcpIGMtPmNvZGVzaXplLAorICAgICAgICBjLT5tYXRjaF9ieXRlcywgYy0+bTFhX20sIGMtPm0xYl9tLCBjLT5tMl9tLCBjLT5tM19tLCBjLT5tNF9tLAorICAgICAgICBjLT5saXRfYnl0ZXMsIGMtPmxpdDFfciwgYy0+bGl0Ml9yLCBjLT5saXQzX3IsIGMtPmxhenkpOworI2VuZGlmCisgICAgYXNzZXJ0KGMtPmxpdF9ieXRlcyArIGMtPm1hdGNoX2J5dGVzID09IGluX2xlbik7CisKKyAgICByZXR1cm4gTFpPX0VfT0s7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK2x6bzF4Xzk5OV9jb21wcmVzc19sZXZlbCAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY2FsbGJhY2tfcCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21wcmVzc2lvbl9sZXZlbCApCit7CisgICAgc3RhdGljIGNvbnN0IHN0cnVjdAorICAgIHsKKyAgICAgICAgaW50IHRyeV9sYXp5OworICAgICAgICBsem9fdWludCBnb29kX2xlbmd0aDsKKyAgICAgICAgbHpvX3VpbnQgbWF4X2xhenk7CisgICAgICAgIGx6b191aW50IG5pY2VfbGVuZ3RoOworICAgICAgICBsem9fdWludCBtYXhfY2hhaW47CisgICAgICAgIGx6b191aW50MzIgZmxhZ3M7CisgICAgfSBjWzldID0geworICAgICAgICB7ICAgMCwgICAwLCAgIDAsICAgOCwgICAgNCwgICAwIH0sICAgICAgLyogZmFzdGVyIGNvbXByZXNzaW9uICovCisgICAgICAgIHsgICAwLCAgIDAsICAgMCwgIDE2LCAgICA4LCAgIDAgfSwKKyAgICAgICAgeyAgIDAsICAgMCwgICAwLCAgMzIsICAgMTYsICAgMCB9LAorCisgICAgICAgIHsgICAxLCAgIDQsICAgNCwgIDE2LCAgIDE2LCAgIDAgfSwKKyAgICAgICAgeyAgIDEsICAgOCwgIDE2LCAgMzIsICAgMzIsICAgMCB9LAorICAgICAgICB7ICAgMSwgICA4LCAgMTYsIDEyOCwgIDEyOCwgICAwIH0sCisKKyAgICAgICAgeyAgIDIsICAgOCwgIDMyLCAxMjgsICAyNTYsICAgMCB9LAorICAgICAgICB7ICAgMiwgIDMyLCAxMjgsICAgRiwgMjA0OCwgICAxIH0sCisgICAgICAgIHsgICAyLCAgIEYsICAgRiwgICBGLCA0MDk2LCAgIDEgfSAgICAgICAvKiBtYXguIGNvbXByZXNzaW9uICovCisgICAgfTsKKworICAgIGlmIChjb21wcmVzc2lvbl9sZXZlbCA8IDEgfHwgY29tcHJlc3Npb25fbGV2ZWwgPiA5KQorICAgICAgICByZXR1cm4gTFpPX0VfRVJST1I7CisKKyAgICBjb21wcmVzc2lvbl9sZXZlbCAtPSAxOworICAgIHJldHVybiBsem8xeF85OTlfY29tcHJlc3NfaW50ZXJuYWwoaW4sIGluX2xlbiwgb3V0LCBvdXRfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaWN0LCBkaWN0X2xlbiwgY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjW2NvbXByZXNzaW9uX2xldmVsXS50cnlfbGF6eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNbY29tcHJlc3Npb25fbGV2ZWxdLmdvb2RfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tjb21wcmVzc2lvbl9sZXZlbF0ubWF4X2xhenksCisjaWYgMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tjb21wcmVzc2lvbl9sZXZlbF0ubmljZV9sZW5ndGgsCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tjb21wcmVzc2lvbl9sZXZlbF0ubWF4X2NoYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY1tjb21wcmVzc2lvbl9sZXZlbF0uZmxhZ3MpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitsem8xeF85OTlfY29tcHJlc3NfZGljdCAgICAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIGRpY3QsIGx6b191aW50IGRpY3RfbGVuICkKK3sKKyAgICByZXR1cm4gbHpvMXhfOTk5X2NvbXByZXNzX2xldmVsKGluLCBpbl9sZW4sIG91dCwgb3V0X2xlbiwgd3JrbWVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGljdCwgZGljdF9sZW4sIDAsIDgpOworfQorCitMWk9fUFVCTElDKGludCkKK2x6bzF4Xzk5OV9jb21wcmVzcyAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8xeF85OTlfY29tcHJlc3NfbGV2ZWwoaW4sIGluX2xlbiwgb3V0LCBvdXRfbGVuLCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAobHpvX2NhbGxiYWNrX3ApIDAsIDgpOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXhfYy5jaCBiL2x6by0yLjAzL3NyYy9sem8xeF9jLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDYxNWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXhfYy5jaApAQCAtMCwwICsxLDM1MSBAQAorLyogbHpvMXhfYy5jaCAtLSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPMVtYWV0tMSBjb21wcmVzc2lvbiBhbGdvcml0aG0KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXByZXNzIGEgYmxvY2sgb2YgZGF0YS4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIF9fbHpvX25vaW5saW5lIGx6b191aW50Citkb19jb21wcmVzcyAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgaXA7CisgICAgbHpvX2J5dGVwIG9wOworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpbl9lbmQgPSBpbiArIGluX2xlbjsKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW4gLSBNMl9NQVhfTEVOIC0gNTsKKyAgICBjb25zdCBsem9fYnl0ZXAgaWk7CisgICAgbHpvX2RpY3RfcCBjb25zdCBkaWN0ID0gKGx6b19kaWN0X3ApIHdya21lbTsKKworICAgIG9wID0gb3V0OworICAgIGlwID0gaW47CisgICAgaWkgPSBpcDsKKworICAgIGlwICs9IDQ7CisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBtX3BvczsKKyAgICAgICAgbHpvX3VpbnQgbV9vZmY7CisgICAgICAgIGx6b191aW50IG1fbGVuOworICAgICAgICBsem9fdWludCBkaW5kZXg7CisKKyAgICAgICAgRElOREVYMShkaW5kZXgsaXApOworICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNNF9NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyNpZiAxCisgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUIHx8IG1fcG9zWzNdID09IGlwWzNdKQorICAgICAgICAgICAgZ290byB0cnlfbWF0Y2g7CisgICAgICAgIERJTkRFWDIoZGluZGV4LGlwKTsKKyNlbmRpZgorICAgICAgICBHSU5ERVgobV9wb3MsbV9vZmYsZGljdCxkaW5kZXgsaW4pOworICAgICAgICBpZiAoTFpPX0NIRUNLX01QT1NfTk9OX0RFVChtX3BvcyxtX29mZixpbixpcCxNNF9NQVhfT0ZGU0VUKSkKKyAgICAgICAgICAgIGdvdG8gbGl0ZXJhbDsKKyAgICAgICAgaWYgKG1fb2ZmIDw9IE0yX01BWF9PRkZTRVQgfHwgbV9wb3NbM10gPT0gaXBbM10pCisgICAgICAgICAgICBnb3RvIHRyeV9tYXRjaDsKKyAgICAgICAgZ290byBsaXRlcmFsOworCisKK3RyeV9tYXRjaDoKKyNpZiAxICYmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKQorICAgICAgICBpZiAoKiAoY29uc3QgbHpvX3VzaG9ydHApIG1fcG9zICE9ICogKGNvbnN0IGx6b191c2hvcnRwKSBpcCkKKyNlbHNlCisgICAgICAgIGlmIChtX3Bvc1swXSAhPSBpcFswXSB8fCBtX3Bvc1sxXSAhPSBpcFsxXSkKKyNlbmRpZgorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpZiBfX2x6b19saWtlbHkobV9wb3NbMl0gPT0gaXBbMl0pCisgICAgICAgICAgICB7CisjaWYgMAorICAgICAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMl9NQVhfT0ZGU0VUKQorICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICAgICAgICAgIGlmIChsaXQgPD0gMykKKyAgICAgICAgICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgICAgICAgICBpZiAobGl0ID09IDMpICAgICAgICAgICAvKiBiZXR0ZXIgY29tcHJlc3Npb24sIGJ1dCBzbG93ZXIgKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvcCAtIDIgPiBvdXQpOyBvcFstMl0gfD0gTFpPX0JZVEUoMyk7CisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gKmlpKys7ICpvcCsrID0gKmlpKys7ICpvcCsrID0gKmlpKys7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gY29kZV9tYXRjaDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKG1fcG9zWzNdID09IGlwWzNdKQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyogc3RpbGwgbmVlZCBhIGJldHRlciB3YXkgZm9yIGZpbmRpbmcgTTEgbWF0Y2hlcyAqLworI2lmIDAKKyAgICAgICAgICAgICAgICAvKiBhIE0xIG1hdGNoICovCisjaWYgMAorICAgICAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMV9NQVhfT0ZGU0VUICYmIGxpdCA+IDAgJiYgbGl0IDw9IDMpCisjZWxzZQorICAgICAgICAgICAgICAgIGlmIChtX29mZiA8PSBNMV9NQVhfT0ZGU0VUICYmIGxpdCA9PSAzKQorI2VuZGlmCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBsem9fdWludCB0OworCisgICAgICAgICAgICAgICAgICAgIHQgPSBsaXQ7CisgICAgICAgICAgICAgICAgICAgIGFzc2VydChvcCAtIDIgPiBvdXQpOyBvcFstMl0gfD0gTFpPX0JZVEUodCk7CisgICAgICAgICAgICAgICAgICAgIGRvICpvcCsrID0gKmlpKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KGlpID09IGlwKTsKKyAgICAgICAgICAgICAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNMV9NQVJLRVIgfCAoKG1fb2ZmICYgMykgPDwgMikpOworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDIpOworICAgICAgICAgICAgICAgICAgICBpcCArPSAyOworICAgICAgICAgICAgICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworCisgICAgLyogYSBsaXRlcmFsICovCitsaXRlcmFsOgorICAgICAgICBVUERBVEVfSShkaWN0LDAsZGluZGV4LGlwLGluKTsKKyAgICAgICAgKytpcDsKKyAgICAgICAgaWYgX19sem9fdW5saWtlbHkoaXAgPj0gaXBfZW5kKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNvbnRpbnVlOworCisKKyAgICAvKiBhIG1hdGNoICovCittYXRjaDoKKyAgICAgICAgVVBEQVRFX0koZGljdCwwLGRpbmRleCxpcCxpbik7CisgICAgICAgIC8qIHN0b3JlIGN1cnJlbnQgbGl0ZXJhbCBydW4gKi8KKyAgICAgICAgaWYgKHBkKGlwLGlpKSA+IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJlZ2lzdGVyIGx6b191aW50IHQgPSBwZChpcCxpaSk7CisKKyAgICAgICAgICAgIGlmICh0IDw9IDMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG9wIC0gMiA+IG91dCk7CisgICAgICAgICAgICAgICAgb3BbLTJdIHw9IExaT19CWVRFKHQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodCA8PSAxOCkKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKHQgLSAzKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICByZWdpc3RlciBsem9fdWludCB0dCA9IHQgLSAxODsKKworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHQgPiAyNTUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICB0dCAtPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYXNzZXJ0KHR0ID4gMCk7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSh0dCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBkbyAqb3ArKyA9ICppaSsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKworICAgICAgICAvKiBjb2RlIHRoZSBtYXRjaCAqLworICAgICAgICBhc3NlcnQoaWkgPT0gaXApOworICAgICAgICBpcCArPSAzOworICAgICAgICBpZiAobV9wb3NbM10gIT0gKmlwKysgfHwgbV9wb3NbNF0gIT0gKmlwKysgfHwgbV9wb3NbNV0gIT0gKmlwKysgfHwKKyAgICAgICAgICAgIG1fcG9zWzZdICE9ICppcCsrIHx8IG1fcG9zWzddICE9ICppcCsrIHx8IG1fcG9zWzhdICE9ICppcCsrCisjaWZkZWYgTFpPMVkKKyAgICAgICAgICAgIHx8IG1fcG9zWyA5XSAhPSAqaXArKyB8fCBtX3Bvc1sxMF0gIT0gKmlwKysgfHwgbV9wb3NbMTFdICE9ICppcCsrCisgICAgICAgICAgICB8fCBtX3Bvc1sxMl0gIT0gKmlwKysgfHwgbV9wb3NbMTNdICE9ICppcCsrIHx8IG1fcG9zWzE0XSAhPSAqaXArKworI2VuZGlmCisgICAgICAgICAgICkKKyAgICAgICAgeworICAgICAgICAgICAgLS1pcDsKKyAgICAgICAgICAgIG1fbGVuID0gcGQoaXAsIGlpKTsKKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSAzKTsgYXNzZXJ0KG1fbGVuIDw9IE0yX01BWF9MRU4pOworCisgICAgICAgICAgICBpZiAobV9vZmYgPD0gTTJfTUFYX09GRlNFVCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAxOworI2lmIGRlZmluZWQoTFpPMVgpCisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgoKG1fbGVuIC0gMSkgPDwgNSkgfCAoKG1fb2ZmICYgNykgPDwgMikpOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9vZmYgPj4gMyk7CisjZWxpZiBkZWZpbmVkKExaTzFZKQorICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoKChtX2xlbiArIDEpIDw8IDQpIHwgKChtX29mZiAmIDMpIDw8IDIpKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDIpOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIGlmIChtX29mZiA8PSBNM19NQVhfT0ZGU0VUKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG1fb2ZmIC09IDE7CisgICAgICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURShNM19NQVJLRVIgfCAobV9sZW4gLSAyKSk7CisgICAgICAgICAgICAgICAgZ290byBtM19tNF9vZmZzZXQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAweDQwMDA7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID4gMCk7IGFzc2VydChtX29mZiA8PSAweDdmZmYpOworICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTRfTUFSS0VSIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgobV9vZmYgJiAweDQwMDApID4+IDExKSB8IChtX2xlbiAtIDIpKTsKKyAgICAgICAgICAgICAgICBnb3RvIG0zX200X29mZnNldDsKKyAgICAgICAgICAgIH0KKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgICAgICAgICAgZ290byBtNF9tYXRjaDsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBlbmQgPSBpbl9lbmQ7CisgICAgICAgICAgICAgICAgY29uc3QgbHpvX2J5dGVwIG0gPSBtX3BvcyArIE0yX01BWF9MRU4gKyAxOworICAgICAgICAgICAgICAgIHdoaWxlIChpcCA8IGVuZCAmJiAqbSA9PSAqaXApCisgICAgICAgICAgICAgICAgICAgIG0rKywgaXArKzsKKyAgICAgICAgICAgICAgICBtX2xlbiA9IHBkKGlwLCBpaSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3NlcnQobV9sZW4gPiBNMl9NQVhfTEVOKTsKKworICAgICAgICAgICAgaWYgKG1fb2ZmIDw9IE0zX01BWF9PRkZTRVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgbV9vZmYgLT0gMTsKKyAgICAgICAgICAgICAgICBpZiAobV9sZW4gPD0gMzMpCisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTNfTUFSS0VSIHwgKG1fbGVuIC0gMikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGVuIC09IDMzOworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IE0zX01BUktFUiB8IDA7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gbTNfbTRfbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKExaTzFZKQorbTRfbWF0Y2g6CisjZW5kaWYKKyAgICAgICAgICAgICAgICBtX29mZiAtPSAweDQwMDA7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID4gMCk7IGFzc2VydChtX29mZiA8PSAweDdmZmYpOworICAgICAgICAgICAgICAgIGlmIChtX2xlbiA8PSBNNF9NQVhfTEVOKQorICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKE00X01BUktFUiB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChtX29mZiAmIDB4NDAwMCkgPj4gMTEpIHwgKG1fbGVuIC0gMikpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fbGVuIC09IE00X01BWF9MRU47CisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUoTTRfTUFSS0VSIHwgKChtX29mZiAmIDB4NDAwMCkgPj4gMTEpKTsKK20zX200X2xlbjoKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKG1fbGVuID4gMjU1KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbiAtPSAyNTU7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID4gMCk7CisgICAgICAgICAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUobV9sZW4pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKworbTNfbTRfb2Zmc2V0OgorICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSgobV9vZmYgJiA2MykgPDwgMik7CisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKG1fb2ZmID4+IDYpOworICAgICAgICB9CisKKyNpZiAwCittYXRjaF9kb25lOgorI2VuZGlmCisgICAgICAgIGlpID0gaXA7CisgICAgICAgIGlmIF9fbHpvX3VubGlrZWx5KGlwID49IGlwX2VuZCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIHBkKGluX2VuZCxpaSk7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBwdWJsaWMgZW50cnkgcG9pbnQKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitET19DT01QUkVTUyAgICAgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBsem9fdm9pZHAgd3JrbWVtICkKK3sKKyAgICBsem9fYnl0ZXAgb3AgPSBvdXQ7CisgICAgbHpvX3VpbnQgdDsKKworICAgIGlmIF9fbHpvX3VubGlrZWx5KGluX2xlbiA8PSBNMl9NQVhfTEVOICsgNSkKKyAgICAgICAgdCA9IGluX2xlbjsKKyAgICBlbHNlCisgICAgeworICAgICAgICB0ID0gZG9fY29tcHJlc3MoaW4saW5fbGVuLG9wLG91dF9sZW4sd3JrbWVtKTsKKyAgICAgICAgb3AgKz0gKm91dF9sZW47CisgICAgfQorCisgICAgaWYgKHQgPiAwKQorICAgIHsKKyAgICAgICAgY29uc3QgbHpvX2J5dGVwIGlpID0gaW4gKyBpbl9sZW4gLSB0OworCisgICAgICAgIGlmIChvcCA9PSBvdXQgJiYgdCA8PSAyMzgpCisgICAgICAgICAgICAqb3ArKyA9IExaT19CWVRFKDE3ICsgdCk7CisgICAgICAgIGVsc2UgaWYgKHQgPD0gMykKKyAgICAgICAgICAgIG9wWy0yXSB8PSBMWk9fQllURSh0KTsKKyAgICAgICAgZWxzZSBpZiAodCA8PSAxOCkKKyAgICAgICAgICAgICpvcCsrID0gTFpPX0JZVEUodCAtIDMpOworICAgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICAgIGx6b191aW50IHR0ID0gdCAtIDE4OworCisgICAgICAgICAgICAqb3ArKyA9IDA7CisgICAgICAgICAgICB3aGlsZSAodHQgPiAyNTUpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdHQgLT0gMjU1OworICAgICAgICAgICAgICAgICpvcCsrID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGFzc2VydCh0dCA+IDApOworICAgICAgICAgICAgKm9wKysgPSBMWk9fQllURSh0dCk7CisgICAgICAgIH0KKyAgICAgICAgZG8gKm9wKysgPSAqaWkrKzsgd2hpbGUgKC0tdCA+IDApOworICAgIH0KKworICAgICpvcCsrID0gTTRfTUFSS0VSIHwgMTsKKyAgICAqb3ArKyA9IDA7CisgICAgKm9wKysgPSAwOworCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfT0s7Cit9CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF9kLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzF4X2QuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDA2ODg2NgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeF9kLmNoCkBAIC0wLDAgKzEsNDY2IEBACisvKiBsem8xeF9kLmNoIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xWCBkZWNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvMV9kLmNoIgorCisKKyN1bmRlZiBfX0NPUFk0CisjZGVmaW5lIF9fQ09QWTQoZHN0LHNyYykgICAgKiAobHpvX3VpbnQzMnApKGRzdCkgPSAqIChjb25zdCBsem9fdWludDMycCkoc3JjKQorCisjdW5kZWYgQ09QWTQKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkKKyMgIGRlZmluZSBDT1BZNChkc3Qsc3JjKSAgICBfX0NPUFk0KGRzdCxzcmMpCisjZWxpZiBkZWZpbmVkKExaT19BTElHTkVEX09LXzQpCisjICBkZWZpbmUgQ09QWTQoZHN0LHNyYykgICAgX19DT1BZNCgobHpvX3VpbnRwdHJfdCkoZHN0KSwobHpvX3VpbnRwdHJfdCkoc3JjKSkKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZGVjb21wcmVzcyBhIGJsb2NrIG9mIGRhdGEuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiBkZWZpbmVkKERPX0RFQ09NUFJFU1MpCitMWk9fUFVCTElDKGludCkKK0RPX0RFQ09NUFJFU1MgICggY29uc3QgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQorI2VuZGlmCit7CisgICAgcmVnaXN0ZXIgbHpvX2J5dGVwIG9wOworICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBpcDsKKyAgICByZWdpc3RlciBsem9fdWludCB0OworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorICAgIGx6b191aW50IG1fb2ZmOworICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0X2VuZDsKKyNlbHNlCisgICAgcmVnaXN0ZXIgY29uc3QgbHpvX2J5dGVwIG1fcG9zOworI2VuZGlmCisKKyAgICBjb25zdCBsem9fYnl0ZXAgY29uc3QgaXBfZW5kID0gaW4gKyBpbl9sZW47CisjaWYgZGVmaW5lZChIQVZFX0FOWV9PUCkKKyAgICBsem9fYnl0ZXAgY29uc3Qgb3BfZW5kID0gb3V0ICsgKm91dF9sZW47CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgIGx6b191aW50IGxhc3RfbV9vZmYgPSAwOworI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKHdya21lbSk7CisKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyAgICBpZiAoZGljdCkKKyAgICB7CisgICAgICAgIGlmIChkaWN0X2xlbiA+IE00X01BWF9PRkZTRVQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGRpY3QgKz0gZGljdF9sZW4gLSBNNF9NQVhfT0ZGU0VUOworICAgICAgICAgICAgZGljdF9sZW4gPSBNNF9NQVhfT0ZGU0VUOworICAgICAgICB9CisgICAgICAgIGRpY3RfZW5kID0gZGljdCArIGRpY3RfbGVuOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBkaWN0X2xlbiA9IDA7CisgICAgICAgIGRpY3RfZW5kID0gTlVMTDsKKyAgICB9CisjZW5kaWYgLyogQ09QWV9ESUNUICovCisKKyAgICAqb3V0X2xlbiA9IDA7CisKKyAgICBvcCA9IG91dDsKKyAgICBpcCA9IGluOworCisgICAgaWYgKCppcCA+IDE3KQorICAgIHsKKyAgICAgICAgdCA9ICppcCsrIC0gMTc7CisgICAgICAgIGlmICh0IDwgNCkKKyAgICAgICAgICAgIGdvdG8gbWF0Y2hfbmV4dDsKKyAgICAgICAgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KTsgTkVFRF9JUCh0KzEpOworICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIGdvdG8gZmlyc3RfbGl0ZXJhbF9ydW47CisgICAgfQorCisgICAgd2hpbGUgKFRFU1RfSVAgJiYgVEVTVF9PUCkKKyAgICB7CisgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgaWYgKHQgPj0gMTYpCisgICAgICAgICAgICBnb3RvIG1hdGNoOworICAgICAgICAvKiBhIGxpdGVyYWwgcnVuICovCisgICAgICAgIGlmICh0ID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICB3aGlsZSAoKmlwID09IDApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCArPSAyNTU7CisgICAgICAgICAgICAgICAgaXArKzsKKyAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdCArPSAxNSArICppcCsrOworICAgICAgICB9CisgICAgICAgIC8qIGNvcHkgbGl0ZXJhbHMgKi8KKyAgICAgICAgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMpOyBORUVEX0lQKHQrNCk7CisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpIHx8IGRlZmluZWQoTFpPX0FMSUdORURfT0tfNCkKKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIGlmIChQVFJfQUxJR05FRDJfNChvcCxpcCkpCisgICAgICAgIHsKKyNlbmRpZgorICAgICAgICBDT1BZNChvcCxpcCk7CisgICAgICAgIG9wICs9IDQ7IGlwICs9IDQ7CisgICAgICAgIGlmICgtLXQgPiAwKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodCA+PSA0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgQ09QWTQob3AsaXApOworICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBpcCArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAodCA+PSA0KTsKKyAgICAgICAgICAgICAgICBpZiAodCA+IDApIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgIHsKKyAgICAgICAgICAgICpvcCsrID0gKmlwKys7ICpvcCsrID0gKmlwKys7ICpvcCsrID0gKmlwKys7CisgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisgICAgICAgIH0KKyNlbmRpZgorCisKK2ZpcnN0X2xpdGVyYWxfcnVuOgorCisKKyAgICAgICAgdCA9ICppcCsrOworICAgICAgICBpZiAodCA+PSAxNikKKyAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjaWYgZGVmaW5lZChDT1BZX0RJQ1QpCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgbV9vZmYgPSAoMSArIE0yX01BWF9PRkZTRVQpICsgKHQgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgIGxhc3RfbV9vZmYgPSBtX29mZjsKKyNlbHNlCisgICAgICAgIG1fb2ZmID0gKDEgKyBNMl9NQVhfT0ZGU0VUKSArICh0ID4+IDIpICsgKCppcCsrIDw8IDIpOworI2VuZGlmCisgICAgICAgIE5FRURfT1AoMyk7CisgICAgICAgIHQgPSAzOyBDT1BZX0RJQ1QodCxtX29mZikKKyNlbHNlIC8qICFDT1BZX0RJQ1QgKi8KKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICB0ID0gKDEgKyBNMl9NQVhfT0ZGU0VUKSArICh0IDw8IDYpICsgKCppcCsrID4+IDIpOworICAgICAgICBtX3BvcyA9IG9wIC0gdDsKKyAgICAgICAgbGFzdF9tX29mZiA9IHQ7CisjZWxzZQorICAgICAgICBtX3BvcyA9IG9wIC0gKDEgKyBNMl9NQVhfT0ZGU0VUKTsKKyAgICAgICAgbV9wb3MgLT0gdCA+PiAyOworICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAyOworI2VuZGlmCisgICAgICAgIFRFU1RfTEIobV9wb3MpOyBORUVEX09QKDMpOworICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvczsKKyNlbmRpZiAvKiBDT1BZX0RJQ1QgKi8KKyAgICAgICAgZ290byBtYXRjaF9kb25lOworCisKKyAgICAgICAgLyogaGFuZGxlIG1hdGNoZXMgKi8KKyAgICAgICAgZG8geworbWF0Y2g6CisgICAgICAgICAgICBpZiAodCA+PSA2NCkgICAgICAgICAgICAgICAgLyogYSBNMiBtYXRjaCAqLworICAgICAgICAgICAgeworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorI2lmIGRlZmluZWQoTFpPMVgpCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKCh0ID4+IDIpICYgNykgKyAoKmlwKysgPDwgMyk7CisgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDUpIC0gMTsKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKCh0ID4+IDIpICYgMykgKyAoKmlwKysgPDwgMik7CisgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDQpIC0gMzsKKyNlbGlmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbV9vZmYgPSB0ICYgMHgxZjsKKyAgICAgICAgICAgICAgICBpZiAobV9vZmYgPj0gMHgxYykKKyAgICAgICAgICAgICAgICAgICAgbV9vZmYgPSBsYXN0X21fb2ZmOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArIChtX29mZiA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNSkgLSAxOworI2VuZGlmCisjZWxzZSAvKiAhQ09QWV9ESUNUICovCisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCA+PiAyKSAmIDc7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMzsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNSkgLSAxOworI2VsaWYgZGVmaW5lZChMWk8xWSkKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCA+PiAyKSAmIDM7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMjsKKyAgICAgICAgICAgICAgICB0ID0gKHQgPj4gNCkgLSAzOworI2VsaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG9mZiA9IHQgJiAweDFmOworICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wOworICAgICAgICAgICAgICAgICAgICBpZiAob2ZmID49IDB4MWMpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChsYXN0X21fb2ZmID4gMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSBsYXN0X21fb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgb2ZmID0gMSArIChvZmYgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSBvZmY7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gb2ZmOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHQgPSAodCA+PiA1KSAtIDE7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgYXNzZXJ0KHQgPiAwKTsgTkVFRF9PUCh0KzMtMSk7CisgICAgICAgICAgICAgICAgZ290byBjb3B5X21hdGNoOworI2VuZGlmIC8qIENPUFlfRElDVCAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodCA+PSAzMikgICAgICAgICAgIC8qIGEgTTMgbWF0Y2ggKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ICY9IDMxOworICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKmlwID09IDApCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgKz0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgdCArPSAzMSArICppcCsrOworICAgICAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArIChpcFswXSA8PCA2KSArIChpcFsxXSA+PiAyKTsKKyAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gbV9vZmY7CisjZWxzZQorICAgICAgICAgICAgICAgIG1fb2ZmID0gMSArIChpcFswXSA+PiAyKSArIChpcFsxXSA8PCA2KTsKKyNlbmRpZgorI2Vsc2UgLyogIUNPUFlfRElDVCAqLworI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsem9fdWludCBvZmYgPSAxICsgKGlwWzBdIDw8IDYpICsgKGlwWzFdID4+IDIpOworICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gb2ZmOworICAgICAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gb2ZmOworICAgICAgICAgICAgICAgIH0KKyNlbGlmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKSAmJiBkZWZpbmVkKExaT19BQklfTElUVExFX0VORElBTikKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoKiAoY29uc3QgbHpvX3VzaG9ydHApIGlwKSA+PiAyOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoaXBbMF0gPj4gMikgKyAoaXBbMV0gPDwgNik7CisjZW5kaWYKKyNlbmRpZiAvKiBDT1BZX0RJQ1QgKi8KKyAgICAgICAgICAgICAgICBpcCArPSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAodCA+PSAxNikgICAgICAgICAgIC8qIGEgTTQgbWF0Y2ggKi8KKyAgICAgICAgICAgIHsKKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyAgICAgICAgICAgICAgICBtX29mZiA9ICh0ICYgOCkgPDwgMTE7CisjZWxzZSAvKiAhQ09QWV9ESUNUICovCisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcDsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAodCAmIDgpIDw8IDExOworI2VuZGlmIC8qIENPUFlfRElDVCAqLworICAgICAgICAgICAgICAgIHQgJj0gNzsKKyAgICAgICAgICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCppcCA9PSAwKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICB0ICs9IDI1NTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwKys7CisgICAgICAgICAgICAgICAgICAgICAgICBORUVEX0lQKDEpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHQgKz0gNyArICppcCsrOworICAgICAgICAgICAgICAgIH0KKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIG1fb2ZmICs9IChpcFswXSA8PCA2KSArIChpcFsxXSA+PiAyKTsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9vZmYgKz0gKGlwWzBdID4+IDIpICsgKGlwWzFdIDw8IDYpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaXAgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9vZmYgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBlb2ZfZm91bmQ7CisgICAgICAgICAgICAgICAgbV9vZmYgKz0gMHg0MDAwOworI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworI2VuZGlmCisjZWxzZSAvKiAhQ09QWV9ESUNUICovCisjaWYgZGVmaW5lZChMWk8xWikKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSAoaXBbMF0gPDwgNikgKyAoaXBbMV0gPj4gMik7CisjZWxpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfMikgJiYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKCogKGNvbnN0IGx6b191c2hvcnRwKSBpcCkgPj4gMjsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKGlwWzBdID4+IDIpICsgKGlwWzFdIDw8IDYpOworI2VuZGlmCisgICAgICAgICAgICAgICAgaXAgKz0gMjsKKyAgICAgICAgICAgICAgICBpZiAobV9wb3MgPT0gb3ApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW9mX2ZvdW5kOworICAgICAgICAgICAgICAgIG1fcG9zIC09IDB4NDAwMDsKKyNpZiBkZWZpbmVkKExaTzFaKQorICAgICAgICAgICAgICAgIGxhc3RfbV9vZmYgPSBwZCgoY29uc3QgbHpvX2J5dGVwKW9wLCBtX3Bvcyk7CisjZW5kaWYKKyNlbmRpZiAvKiBDT1BZX0RJQ1QgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYSBNMSBtYXRjaCAqLworICAgICAgICAgICAgeworI2lmIGRlZmluZWQoQ09QWV9ESUNUKQorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgbV9vZmYgPSAxICsgKHQgPDwgNikgKyAoKmlwKysgPj4gMik7CisgICAgICAgICAgICAgICAgbGFzdF9tX29mZiA9IG1fb2ZmOworI2Vsc2UKKyAgICAgICAgICAgICAgICBtX29mZiA9IDEgKyAodCA+PiAyKSArICgqaXArKyA8PCAyKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgIE5FRURfT1AoMik7CisgICAgICAgICAgICAgICAgdCA9IDI7IENPUFlfRElDVCh0LG1fb2ZmKQorI2Vsc2UgLyogIUNPUFlfRElDVCAqLworI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICAgICAgdCA9IDEgKyAodCA8PCA2KSArICgqaXArKyA+PiAyKTsKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gdDsKKyAgICAgICAgICAgICAgICBsYXN0X21fb2ZmID0gdDsKKyNlbHNlCisgICAgICAgICAgICAgICAgbV9wb3MgPSBvcCAtIDE7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gdCA+PiAyOworICAgICAgICAgICAgICAgIG1fcG9zIC09ICppcCsrIDw8IDI7CisjZW5kaWYKKyAgICAgICAgICAgICAgICBURVNUX0xCKG1fcG9zKTsgTkVFRF9PUCgyKTsKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvczsKKyNlbmRpZiAvKiBDT1BZX0RJQ1QgKi8KKyAgICAgICAgICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGNvcHkgbWF0Y2ggKi8KKyNpZiBkZWZpbmVkKENPUFlfRElDVCkKKworICAgICAgICAgICAgTkVFRF9PUCh0KzMtMSk7CisgICAgICAgICAgICB0ICs9IDMtMTsgQ09QWV9ESUNUKHQsbV9vZmYpCisKKyNlbHNlIC8qICFDT1BZX0RJQ1QgKi8KKworICAgICAgICAgICAgVEVTVF9MQihtX3Bvcyk7IGFzc2VydCh0ID4gMCk7IE5FRURfT1AodCszLTEpOworI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KSB8fCBkZWZpbmVkKExaT19BTElHTkVEX09LXzQpCisjaWYgIWRlZmluZWQoTFpPX1VOQUxJR05FRF9PS180KQorICAgICAgICAgICAgaWYgKHQgPj0gMiAqIDQgLSAoMyAtIDEpICYmIFBUUl9BTElHTkVEMl80KG9wLG1fcG9zKSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBhc3NlcnQoKG9wIC0gbV9wb3MpID49IDQpOyAgLyogYm90aCBwb2ludGVycyBhcmUgYWxpZ25lZCAqLworI2Vsc2UKKyAgICAgICAgICAgIGlmICh0ID49IDIgKiA0IC0gKDMgLSAxKSAmJiAob3AgLSBtX3BvcykgPj0gNCkKKyAgICAgICAgICAgIHsKKyNlbmRpZgorICAgICAgICAgICAgICAgIENPUFk0KG9wLG1fcG9zKTsKKyAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQgLSAoMyAtIDEpOworICAgICAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICAgICAgQ09QWTQob3AsbV9wb3MpOworICAgICAgICAgICAgICAgICAgICBvcCArPSA0OyBtX3BvcyArPSA0OyB0IC09IDQ7CisgICAgICAgICAgICAgICAgfSB3aGlsZSAodCA+PSA0KTsKKyAgICAgICAgICAgICAgICBpZiAodCA+IDApIGRvICpvcCsrID0gKm1fcG9zKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyNlbmRpZgorICAgICAgICAgICAgeworY29weV9tYXRjaDoKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgIGRvICpvcCsrID0gKm1fcG9zKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKworI2VuZGlmIC8qIENPUFlfRElDVCAqLworCittYXRjaF9kb25lOgorI2lmIGRlZmluZWQoTFpPMVopCisgICAgICAgICAgICB0ID0gaXBbLTFdICYgMzsKKyNlbHNlCisgICAgICAgICAgICB0ID0gaXBbLTJdICYgMzsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgLyogY29weSBsaXRlcmFscyAqLworbWF0Y2hfbmV4dDoKKyAgICAgICAgICAgIGFzc2VydCh0ID4gMCk7IGFzc2VydCh0IDwgNCk7IE5FRURfT1AodCk7IE5FRURfSVAodCsxKTsKKyNpZiAwCisgICAgICAgICAgICBkbyAqb3ArKyA9ICppcCsrOyB3aGlsZSAoLS10ID4gMCk7CisjZWxzZQorICAgICAgICAgICAgKm9wKysgPSAqaXArKzsKKyAgICAgICAgICAgIGlmICh0ID4gMSkgeyAqb3ArKyA9ICppcCsrOyBpZiAodCA+IDIpIHsgKm9wKysgPSAqaXArKzsgfSB9CisjZW5kaWYKKyAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgfSB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKTsKKyAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfVEVTVF9JUCkgfHwgZGVmaW5lZChIQVZFX1RFU1RfT1ApCisgICAgLyogbm8gRU9GIGNvZGUgd2FzIGZvdW5kICovCisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfRU9GX05PVF9GT1VORDsKKyNlbmRpZgorCitlb2ZfZm91bmQ6CisgICAgYXNzZXJ0KHQgPT0gMSk7CisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gKGlwID09IGlwX2VuZCA/IExaT19FX09LIDoKKyAgICAgICAgICAgKGlwIDwgaXBfZW5kICA/IExaT19FX0lOUFVUX05PVF9DT05TVU1FRCA6IExaT19FX0lOUFVUX09WRVJSVU4pKTsKKworCisjaWYgZGVmaW5lZChIQVZFX05FRURfSVApCitpbnB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX0lOUFVUX09WRVJSVU47CisjZW5kaWYKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX09QKQorb3V0cHV0X292ZXJydW46CisgICAgKm91dF9sZW4gPSBwZChvcCwgb3V0KTsKKyAgICByZXR1cm4gTFpPX0VfT1VUUFVUX09WRVJSVU47CisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1RFU1RfT1ZFUlJVTl9MT09LQkVISU5EKQorbG9va2JlaGluZF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX0xPT0tCRUhJTkRfT1ZFUlJVTjsKKyNlbmRpZgorfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXhfZDEuYyBiL2x6by0yLjAzL3NyYy9sem8xeF9kMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmYmQ5YjIKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXhfZDEuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xeF9kMS5jIC0tIExaTzFYIGRlY29tcHJlc3Npb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzF4LmgiCisKKyN1bmRlZiBMWk9fVEVTVF9PVkVSUlVOCisjZGVmaW5lIERPX0RFQ09NUFJFU1MgICAgICAgbHpvMXhfZGVjb21wcmVzcworCisjaW5jbHVkZSAibHpvMXhfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF9kMi5jIGIvbHpvLTIuMDMvc3JjL2x6bzF4X2QyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZjODRjYgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeF9kMi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIGx6bzF4X2QyLmMgLS0gTFpPMVggZGVjb21wcmVzc2lvbiB3aXRoIG92ZXJydW4gdGVzdGluZworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAiY29uZmlnMXguaCIKKworI2RlZmluZSBMWk9fVEVTVF9PVkVSUlVOCisjZGVmaW5lIERPX0RFQ09NUFJFU1MgICAgICAgbHpvMXhfZGVjb21wcmVzc19zYWZlCisKKyNpbmNsdWRlICJsem8xeF9kLmNoIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF4X2QzLmMgYi9sem8tMi4wMy9zcmMvbHpvMXhfZDMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmFhNjgwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF4X2QzLmMKQEAgLTAsMCArMSwxMDggQEAKKy8qIGx6bzF4X2QzLmMgLS0gTFpPMVggZGVjb21wcmVzc2lvbiB3aXRoIHByZXNldCBkaWN0aW9uYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxeC5oIgorCisjZGVmaW5lIExaT19URVNUX09WRVJSVU4KKworCisjZGVmaW5lIFNMT1dfTUVNQ1BZKGEsYixsKSAgICAgIHsgZG8gKmErKyA9ICpiKys7IHdoaWxlICgtLWwgPiAwKTsgfQorI2RlZmluZSBGQVNUX01FTUNQWShhLGIsbCkgICAgICB7IGx6b19tZW1jcHkoYSxiLGwpOyBhICs9IGw7IH0KKworI2lmIDEgJiYgZGVmaW5lZChGQVNUX01FTUNQWSkKKyMgIGRlZmluZSBESUNUX01FTU1PVkUob3AsbV9wb3MsbV9sZW4sbV9vZmYpIFwKKyAgICAgICAgaWYgKG1fb2ZmID49IChtX2xlbikpIFwKKyAgICAgICAgICAgIEZBU1RfTUVNQ1BZKG9wLG1fcG9zLG1fbGVuKSBcCisgICAgICAgIGVsc2UgXAorICAgICAgICAgICAgU0xPV19NRU1DUFkob3AsbV9wb3MsbV9sZW4pCisjZWxzZQorIyAgZGVmaW5lIERJQ1RfTUVNTU9WRShvcCxtX3BvcyxtX2xlbixtX29mZikgXAorICAgICAgICBTTE9XX01FTUNQWShvcCxtX3BvcyxtX2xlbikKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRkFTVF9NRU1DUFkpCisjICBkZWZpbmUgRkFTVF9NRU1DUFkgICBTTE9XX01FTUNQWQorI2VuZGlmCisKKworI2RlZmluZSBDT1BZX0RJQ1RfRElDVChtX2xlbixtX29mZikgXAorICAgIHsgXAorICAgICAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgbV9wb3M7IFwKKyAgICAgICAgbV9vZmYgLT0gcGQob3AsIG91dCk7IGFzc2VydChtX29mZiA+IDApOyBcCisgICAgICAgIGlmIChtX29mZiA+IGRpY3RfbGVuKSBnb3RvIGxvb2tiZWhpbmRfb3ZlcnJ1bjsgXAorICAgICAgICBtX3BvcyA9IGRpY3RfZW5kIC0gbV9vZmY7IFwKKyAgICAgICAgaWYgKG1fbGVuID4gbV9vZmYpIFwKKyAgICAgICAgeyBcCisgICAgICAgICAgICBtX2xlbiAtPSBtX29mZjsgXAorICAgICAgICAgICAgRkFTVF9NRU1DUFkob3AsbV9wb3MsbV9vZmYpIFwKKyAgICAgICAgICAgIG1fcG9zID0gb3V0OyBcCisgICAgICAgICAgICBTTE9XX01FTUNQWShvcCxtX3BvcyxtX2xlbikgXAorICAgICAgICB9IFwKKyAgICAgICAgZWxzZSBcCisgICAgICAgICAgICBGQVNUX01FTUNQWShvcCxtX3BvcyxtX2xlbikgXAorICAgIH0KKworI2RlZmluZSBDT1BZX0RJQ1QobV9sZW4sbV9vZmYpIFwKKyAgICBhc3NlcnQobV9sZW4gPj0gMik7IGFzc2VydChtX29mZiA+IDApOyBhc3NlcnQob3AgPiBvdXQpOyBcCisgICAgaWYgKG1fb2ZmIDw9IHBkKG9wLCBvdXQpKSBcCisgICAgeyBcCisgICAgICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBtX3BvcyA9IG9wIC0gbV9vZmY7IFwKKyAgICAgICAgRElDVF9NRU1NT1ZFKG9wLG1fcG9zLG1fbGVuLG1fb2ZmKSBcCisgICAgfSBcCisgICAgZWxzZSBcCisgICAgICAgIENPUFlfRElDVF9ESUNUKG1fbGVuLG1fb2ZmKQorCisKKworCitMWk9fUFVCTElDKGludCkKK2x6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlICggY29uc3QgbHpvX2J5dGVwIGluLCAgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gLyogTk9UIFVTRUQgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbikKKworCisjaW5jbHVkZSAibHpvMXhfZC5jaCIKKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF4X28uYyBiL2x6by0yLjAzL3NyYy9sem8xeF9vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODljZDFiYwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeF9vLmMKQEAgLTAsMCArMSw0NSBAQAorLyogbHpvMXhfby5jIC0tIExaTzFYIGNvbXByZXNzZWQgZGF0YSBvcHRpbWl6ZXIKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzF4LmgiCisKKyNkZWZpbmUgRE9fT1BUSU1JWkUgICAgIGx6bzF4X29wdGltaXplCisKKyNpbmNsdWRlICJsem8xeF9vby5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeF9vby5jaCBiL2x6by0yLjAzL3NyYy9sem8xeF9vby5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTc4ZjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF4X29vLmNoCkBAIC0wLDAgKzEsMzY2IEBACisvKiBsem8xeF9vby5jaCAtLSBMWk8xWCBjb21wcmVzc2VkIGRhdGEgb3B0aW1pemVyCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgVEVTVF9JUCAgICAgKGlwIDwgaXBfZW5kKQorI2RlZmluZSBURVNUX09QICAgICAob3AgPD0gb3BfZW5kKQorCisjZGVmaW5lIE5PX0xJVCAgICAgIExaT19VSU5UX01BWAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQgY29weTIobHpvX2J5dGVwIGlwLCBjb25zdCBsem9fYnl0ZXAgbV9wb3MsIGx6b191aW50IG9mZikKK3sKKyAgICBhc3NlcnQob2ZmID4gMCk7CisgICAgaXBbMF0gPSBtX3Bvc1swXTsKKyAgICBpZiAob2ZmID09IDEpCisgICAgICAgIGlwWzFdID0gbV9wb3NbMF07CisgICAgZWxzZQorICAgICAgICBpcFsxXSA9IG1fcG9zWzFdOworfQorCisKK3N0YXRpYyB2b2lkIGNvcHkzKGx6b19ieXRlcCBpcCwgY29uc3QgbHpvX2J5dGVwIG1fcG9zLCBsem9fdWludCBvZmYpCit7CisgICAgYXNzZXJ0KG9mZiA+IDApOworICAgIGlwWzBdID0gbV9wb3NbMF07CisgICAgaWYgKG9mZiA9PSAxKQorICAgIHsKKyAgICAgICAgaXBbMl0gPSBpcFsxXSA9IG1fcG9zWzBdOworICAgIH0KKyAgICBlbHNlIGlmIChvZmYgPT0gMikKKyAgICB7CisgICAgICAgIGlwWzFdID0gbV9wb3NbMV07CisgICAgICAgIGlwWzJdID0gbV9wb3NbMF07CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGlwWzFdID0gbV9wb3NbMV07CisgICAgICAgIGlwWzJdID0gbV9wb3NbMl07CisgICAgfQorfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gb3B0aW1pemUgYSBibG9jayBvZiBkYXRhLgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK0RPX09QVElNSVpFICAgICAgICAgICggICAgICAgbHpvX2J5dGVwIGluICwgbHpvX3VpbnQgIGluX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIGx6b19ieXRlcCBvcDsKKyAgICBsem9fYnl0ZXAgaXA7CisgICAgbHpvX3VpbnQgdDsKKyAgICBsem9fYnl0ZXAgbV9wb3M7CisgICAgbHpvX2J5dGVwIGNvbnN0IGlwX2VuZCA9IGluICsgaW5fbGVuOworICAgIGx6b19ieXRlcCBjb25zdCBvcF9lbmQgPSBvdXQgKyAqb3V0X2xlbjsKKyAgICBsem9fYnl0ZXAgbGl0cCA9IE5VTEw7CisgICAgbHpvX3VpbnQgbGl0ID0gMDsKKyAgICBsem9fdWludCBuZXh0X2xpdCA9IE5PX0xJVDsKKyAgICBsem9fdWludCBubDsKKyAgICB1bnNpZ25lZCBsb25nIG9fbTFfYSA9IDAsIG9fbTFfYiA9IDAsIG9fbTIgPSAwLCBvX20zX2EgPSAwLCBvX20zX2IgPSAwOworCisgICAgTFpPX1VOVVNFRCh3cmttZW0pOworCisgICAgKm91dF9sZW4gPSAwOworCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKworICAgIGFzc2VydChpbl9sZW4gPj0gMyk7CisgICAgaWYgKCppcCA+IDE3KQorICAgIHsKKyAgICAgICAgdCA9ICppcCsrIC0gMTc7CisgICAgICAgIGlmICh0IDwgNCkKKyAgICAgICAgICAgIGdvdG8gbWF0Y2hfbmV4dDsKKyAgICAgICAgZ290byBmaXJzdF9saXRlcmFsX3J1bjsKKyAgICB9CisgICAgYXNzZXJ0KCppcCA8IDE2IHx8ICgqaXAgPT0gMTcgJiYgaW5fbGVuID09IDMpKTsKKworICAgIHdoaWxlIChURVNUX0lQICYmIFRFU1RfT1ApCisgICAgeworICAgICAgICB0ID0gKmlwKys7CisgICAgICAgIGlmICh0ID49IDE2KQorICAgICAgICAgICAgZ290byBtYXRjaDsKKyAgICAgICAgLyogYSBsaXRlcmFsIHJ1biAqLworICAgICAgICBsaXRwID0gaXAgLSAxOworICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICB7CisgICAgICAgICAgICB0ID0gMTU7CisgICAgICAgICAgICB3aGlsZSAoKmlwID09IDApCisgICAgICAgICAgICAgICAgdCArPSAyNTUsIGlwKys7CisgICAgICAgICAgICB0ICs9ICppcCsrOworICAgICAgICB9CisgICAgICAgIGxpdCA9IHQgKyAzOworICAgICAgICAvKiBjb3B5IGxpdGVyYWxzICovCitjb3B5X2xpdGVyYWxfcnVuOgorICAgICAgICAqb3ArKyA9ICppcCsrOyAqb3ArKyA9ICppcCsrOyAqb3ArKyA9ICppcCsrOworZmlyc3RfbGl0ZXJhbF9ydW46CisgICAgICAgIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKworCisgICAgICAgIHQgPSAqaXArKzsKKworICAgICAgICBpZiAodCA+PSAxNikKKyAgICAgICAgICAgIGdvdG8gbWF0Y2g7CisjaWYgZGVmaW5lZChMWk8xWCkKKyAgICAgICAgbV9wb3MgPSBvcCAtIDEgLSAweDgwMDsKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgIG1fcG9zID0gb3AgLSAxIC0gMHg0MDA7CisjZW5kaWYKKyAgICAgICAgbV9wb3MgLT0gdCA+PiAyOworICAgICAgICBtX3BvcyAtPSAqaXArKyA8PCAyOworICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICBsaXQgPSAwOworICAgICAgICBnb3RvIG1hdGNoX2RvbmU7CisKKworICAgICAgICAvKiBoYW5kbGUgbWF0Y2hlcyAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAodCA8IDE2KSAgICAgICAgICAgICAgICAgICAgIC8qIGEgTTEgbWF0Y2ggKi8KKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBtX3BvcyA9IG9wIC0gMTsKKyAgICAgICAgICAgICAgICBtX3BvcyAtPSB0ID4+IDI7CisgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMjsKKworICAgICAgICAgICAgICAgIGlmIChsaXRwID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gY29weV9tMTsKKworICAgICAgICAgICAgICAgIC8qIGFzc2VydCB0aGF0IHRoZXJlIHdhcyBhIG1hdGNoIGp1c3QgYmVmb3JlICovCisgICAgICAgICAgICAgICAgYXNzZXJ0KGxpdCA+PSAxICYmIGxpdCA8PSAzKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQobGl0cCA9PSBpcCAtIDIgLSBsaXQgLSAyKTsKKyAgICAgICAgICAgICAgICBhc3NlcnQoKGx6b191aW50KSgqbGl0cCAmIDMpID09IGxpdCk7CisgICAgICAgICAgICAgICAgbmwgPSBpcFstMl0gJiAzOworICAgICAgICAgICAgICAgIC8qIHRlc3QgaWYgYSBtYXRjaCBmb2xsb3dzICovCisgICAgICAgICAgICAgICAgaWYgKG5sID09IDAgJiYgbGl0ID09IDEgJiYgaXBbMF0gPj0gMTYpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBuZXh0X2xpdCA9IG5sOworICAgICAgICAgICAgICAgICAgICAvKiBhZGp1c3QgbGVuZ3RoIG9mIHByZXZpb3VzIHNob3J0IHJ1biAqLworICAgICAgICAgICAgICAgICAgICBsaXQgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgKmxpdHAgPSBMWk9fQllURSgoKmxpdHAgJiB+MykgfCBsaXQpOworICAgICAgICAgICAgICAgICAgICAvKiBjb3B5IG92ZXIgdGhlIDIgbGl0ZXJhbHMgdGhhdCByZXBsYWNlIHRoZSBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICBjb3B5MihpcC0yLG1fcG9zLHBkKG9wLG1fcG9zKSk7CisgICAgICAgICAgICAgICAgICAgIG9fbTFfYSsrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiB0ZXN0IGlmIGEgbGl0ZXJhbCBydW4gZm9sbG93cyAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKG5sID09IDAgJiYgaXBbMF0gPCAxNiAmJiBpcFswXSAhPSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKGxpdCArIDIgKyBpcFswXSA8IDE2KSkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgICAgICAgICAgICAgLyogcmVtb3ZlIHNob3J0IHJ1biAqLworICAgICAgICAgICAgICAgICAgICAqbGl0cCAmPSB+MzsKKyAgICAgICAgICAgICAgICAgICAgLyogY29weSBvdmVyIHRoZSAyIGxpdGVyYWxzIHRoYXQgcmVwbGFjZSB0aGUgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgY29weTIoaXAtMysxLG1fcG9zLHBkKG9wLG1fcG9zKSk7CisgICAgICAgICAgICAgICAgICAgIC8qIG1vdmUgbGl0ZXJhbHMgMSBieXRlIGFoZWFkICovCisgICAgICAgICAgICAgICAgICAgIGxpdHAgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpdCA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICBsem9fbWVtbW92ZShsaXRwKzEsbGl0cCxsaXQpOworICAgICAgICAgICAgICAgICAgICAvKiBpbnNlcnQgbmV3IGxlbmd0aCBvZiBsb25nIGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICAgICAgICAgIGxpdCArPSAyICsgdCArIDM7IGFzc2VydChsaXQgPD0gMTgpOworICAgICAgICAgICAgICAgICAgICAqbGl0cCA9IExaT19CWVRFKGxpdCAtIDMpOworCisgICAgICAgICAgICAgICAgICAgIG9fbTFfYisrOworICAgICAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgICAgICBnb3RvIGNvcHlfbGl0ZXJhbF9ydW47CisgICAgICAgICAgICAgICAgfQorY29weV9tMToKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworbWF0Y2g6CisgICAgICAgICAgICAgICAgaWYgKHQgPj0gNjQpICAgICAgICAgICAgICAgIC8qIGEgTTIgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworI2lmIGRlZmluZWQoTFpPMVgpCisgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09ICh0ID4+IDIpICYgNzsKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMzsKKyAgICAgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDUpIC0gMTsKKyNlbGlmIGRlZmluZWQoTFpPMVkpCisgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09ICh0ID4+IDIpICYgMzsKKyAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPDwgMjsKKyAgICAgICAgICAgICAgICAgICAgdCA9ICh0ID4+IDQpIC0gMzsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBpZiAobGl0cCA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb3B5X207CisKKyAgICAgICAgICAgICAgICAgICAgbmwgPSBpcFstMl0gJiAzOworICAgICAgICAgICAgICAgICAgICAvKiB0ZXN0IGlmIGluIGJlZXR3ZWVuIHR3byBsb25nIGxpdGVyYWwgcnVucyAqLworICAgICAgICAgICAgICAgICAgICBpZiAodCA9PSAxICYmIGxpdCA+IDMgJiYgbmwgPT0gMCAmJgorICAgICAgICAgICAgICAgICAgICAgICAgaXBbMF0gPCAxNiAmJiBpcFswXSAhPSAwICYmIChsaXQgKyAzICsgaXBbMF0gPCAxNikpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgqbGl0cCA9PSBsaXQgLSAzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHkgb3ZlciB0aGUgMyBsaXRlcmFscyB0aGF0IHJlcGxhY2UgdGhlIG1hdGNoICovCisgICAgICAgICAgICAgICAgICAgICAgICBjb3B5MyhpcC0xLTIsbV9wb3MscGQob3AsbV9wb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCBuZXcgbGVuZ3RoIG9mIHByZXZpb3VzIGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICAgICAgICAgICAgICBsaXQgKz0gMyArIHQgKyAzOyBhc3NlcnQobGl0IDw9IDE4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpsaXRwID0gTFpPX0JZVEUobGl0IC0gMyk7CisgICAgICAgICAgICAgICAgICAgICAgICBvX20yKys7CisgICAgICAgICAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb3B5X2xpdGVyYWxfcnVuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGlmICh0ID49IDMyKSAgICAgICAgICAgIC8qIGEgTTMgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgdCAmPSAzMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IDMxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAyNTUsIGlwKys7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCArPSAqaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09ICppcCsrIDw8IDY7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSAgICAgICAgICAgICAgICAgICAgLyogYSBNNCBtYXRjaCAqLworICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyA9IG9wOworICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKHQgJiA4KSA8PCAxMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgJj0gNzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0ID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdCA9IDc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKCppcCA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9IDI1NSwgaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ICs9ICppcCsrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgbV9wb3MgLT0gKmlwKysgPj4gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fcG9zIC09ICppcCsrIDw8IDY7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAobV9wb3MgPT0gb3ApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlb2ZfZm91bmQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtX3BvcyAtPSAweDQwMDA7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxpdHAgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY29weV9tOworCisgICAgICAgICAgICAgICAgICAgIG5sID0gaXBbLTJdICYgMzsKKyAgICAgICAgICAgICAgICAgICAgLyogdGVzdCBpZiBpbiBiZWV0d2VlbiB0d28gbWF0Y2hlcyAqLworICAgICAgICAgICAgICAgICAgICBpZiAodCA9PSAxICYmIGxpdCA9PSAwICYmIG5sID09IDAgJiYgaXBbMF0gPj0gMTYpCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydChsaXRwID09IGlwIC0gMyAtIGxpdCAtIDIpOworICAgICAgICAgICAgICAgICAgICAgICAgYXNzZXJ0KChsem9fdWludCkoKmxpdHAgJiAzKSA9PSBsaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV4dF9saXQgPSBubDsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIG1ha2UgYSBwcmV2aW91cyBzaG9ydCBydW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdCArPSAzOworICAgICAgICAgICAgICAgICAgICAgICAgKmxpdHAgPSBMWk9fQllURSgoKmxpdHAgJiB+MykgfCBsaXQpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBvdmVyIHRoZSAzIGxpdGVyYWxzIHRoYXQgcmVwbGFjZSB0aGUgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkzKGlwLTMsbV9wb3MscGQob3AsbV9wb3MpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9fbTNfYSsrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIC8qIHRlc3QgaWYgYSBsaXRlcmFsIHJ1biBmb2xsb3dzICovCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHQgPT0gMSAmJiBsaXQgPD0gMyAmJiBubCA9PSAwICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwWzBdIDwgMTYgJiYgaXBbMF0gIT0gMCAmJiAobGl0ICsgMyArIGlwWzBdIDwgMTYpKQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlcnQobGl0cCA9PSBpcCAtIDMgLSBsaXQgLSAyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VydCgobHpvX3VpbnQpKCpsaXRwICYgMykgPT0gbGl0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlbW92ZSBzaG9ydCBydW4gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICpsaXRwICY9IH4zOworICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weSBvdmVyIHRoZSAzIGxpdGVyYWxzIHRoYXQgcmVwbGFjZSB0aGUgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkzKGlwLTQrMSxtX3BvcyxwZChvcCxtX3BvcykpOworICAgICAgICAgICAgICAgICAgICAgICAgLyogbW92ZSBsaXRlcmFscyAxIGJ5dGUgYWhlYWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGxpdHAgKz0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXQgPiAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19tZW1tb3ZlKGxpdHArMSxsaXRwLGxpdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnNlcnQgbmV3IGxlbmd0aCBvZiBsb25nIGxpdGVyYWwgcnVuICovCisgICAgICAgICAgICAgICAgICAgICAgICBsaXQgKz0gMyArIHQgKyAzOyBhc3NlcnQobGl0IDw9IDE4KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICpsaXRwID0gTFpPX0JZVEUobGl0IC0gMyk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIG9fbTNfYisrOworICAgICAgICAgICAgICAgICAgICAgICAgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3MrKzsgKm9wKysgPSAqbV9wb3MrKzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gY29weV9saXRlcmFsX3J1bjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KK2NvcHlfbToKKyAgICAgICAgICAgICAgICAqb3ArKyA9ICptX3BvcysrOyAqb3ArKyA9ICptX3BvcysrOworICAgICAgICAgICAgICAgIGRvICpvcCsrID0gKm1fcG9zKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIH0KKworbWF0Y2hfZG9uZToKKyAgICAgICAgICAgIGlmIChuZXh0X2xpdCA9PSBOT19MSVQpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdCA9IGlwWy0yXSAmIDM7CisgICAgICAgICAgICAgICAgbGl0ID0gdDsKKyAgICAgICAgICAgICAgICBsaXRwID0gaXAgLSAyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHQgPSBuZXh0X2xpdDsKKyAgICAgICAgICAgIGFzc2VydCh0IDw9IDMpOworICAgICAgICAgICAgbmV4dF9saXQgPSBOT19MSVQ7CisgICAgICAgICAgICBpZiAodCA9PSAwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgLyogY29weSBsaXRlcmFscyAqLworbWF0Y2hfbmV4dDoKKyAgICAgICAgICAgIGRvICpvcCsrID0gKmlwKys7IHdoaWxlICgtLXQgPiAwKTsKKyAgICAgICAgICAgIHQgPSAqaXArKzsKKyAgICAgICAgfSB3aGlsZSAoVEVTVF9JUCAmJiBURVNUX09QKTsKKyAgICB9CisKKyAgICAvKiBubyBFT0YgY29kZSB3YXMgZm91bmQgKi8KKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9FT0ZfTk9UX0ZPVU5EOworCitlb2ZfZm91bmQ6CisgICAgYXNzZXJ0KHQgPT0gMSk7CisjaWYgMAorICAgIHByaW50Zigib3B0aW1pemU6ICU1bHUgJTVsdSAgICU1bHUgICAlNWx1ICU1bHVcbiIsCisgICAgICAgICAgIG9fbTFfYSwgb19tMV9iLCBvX20yLCBvX20zX2EsIG9fbTNfYik7CisjZW5kaWYKKyAgICBMWk9fVU5VU0VEKG9fbTFfYSk7IExaT19VTlVTRUQob19tMV9iKTsgTFpPX1VOVVNFRChvX20yKTsKKyAgICBMWk9fVU5VU0VEKG9fbTNfYSk7IExaT19VTlVTRUQob19tM19iKTsKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiAoaXAgPT0gaXBfZW5kID8gTFpPX0VfT0sgOgorICAgICAgICAgICAoaXAgPCBpcF9lbmQgID8gTFpPX0VfSU5QVVRfTk9UX0NPTlNVTUVEIDogTFpPX0VfSU5QVVRfT1ZFUlJVTikpOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXlfMS5jIGIvbHpvLTIuMDMvc3JjL2x6bzF5XzEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzJiMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF5XzEuYwpAQCAtMCwwICsxLDUwIEBACisvKiBsem8xeV8xLmMgLS0gTFpPMVktMSBjb21wcmVzc2lvbgorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjZGVmaW5lIExaT19ORUVEX0RJQ1RfSAorI2RlZmluZSBEX0JJVFMgICAgICAgICAgMTQKKyNkZWZpbmUgRF9JTkRFWDEoZCxwKSAgICAgICBkID0gRFgzKHAsNSw1LDYpOyBkICs9IGQgPj4gNTsgZCA9IERNKGQpCisjZGVmaW5lIERfSU5ERVgyKGQscCkgICAgICAgZCA9IChkICYgKERfTUFTSyAmIDB4N2ZmKSkgXiAoRF9ISUdIIHwgMHgxZikKKworI2luY2x1ZGUgImNvbmZpZzF5LmgiCisKKyNkZWZpbmUgRE9fQ09NUFJFU1MgICAgIGx6bzF5XzFfY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzF4X2MuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXlfOXguYyBiL2x6by0yLjAzL3NyYy9sem8xeV85eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNzVjY2QKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXlfOXguYwpAQCAtMCwwICsxLDQyIEBACisvKiBsem8xeV85eC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xWS05OTkgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgTFpPMVkKKyNpbmNsdWRlICJsem8xeF85eC5jIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF5X2QxLmMgYi9sem8tMi4wMy9zcmMvbHpvMXlfZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmM4MzBkCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF5X2QxLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMXlfZDEuYyAtLSBMWk8xWSBkZWNvbXByZXNzaW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxeS5oIgorCisjdW5kZWYgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzF5X2RlY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzF4X2QuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXlfZDIuYyBiL2x6by0yLjAzL3NyYy9sem8xeV9kMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViYzRiNmQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXlfZDIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xeV9kMi5jIC0tIExaTzFZIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzF5LmgiCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzF5X2RlY29tcHJlc3Nfc2FmZQorCisjaW5jbHVkZSAibHpvMXhfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeV9kMy5jIGIvbHpvLTIuMDMvc3JjL2x6bzF5X2QzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzMDBjNgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xeV9kMy5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGx6bzF5X2QzLmMgLS0gTFpPMVkgZGVjb21wcmVzc2lvbiB3aXRoIHByZXNldCBkaWN0aW9uYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxeS5oIgorCisjZGVmaW5lIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlICBsem8xeV9kZWNvbXByZXNzX2RpY3Rfc2FmZQorCisjaW5jbHVkZSAibHpvMXhfZDMuYyIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xeV9vLmMgYi9sem8tMi4wMy9zcmMvbHpvMXlfby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmM2IxZTgKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXlfby5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGx6bzF5X28uYyAtLSBMWk8xWSBjb21wcmVzc2VkIGRhdGEgb3B0aW1pemVyCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxeS5oIgorCisjZGVmaW5lIERPX09QVElNSVpFICAgICBsem8xeV9vcHRpbWl6ZQorCisjaW5jbHVkZSAibHpvMXhfb28uY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXpfOXguYyBiL2x6by0yLjAzL3NyYy9sem8xel85eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4OWQ1ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXpfOXguYwpAQCAtMCwwICsxLDQyIEBACisvKiBsem8xel85eC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8xWi05OTkgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNkZWZpbmUgTFpPMVoKKyNpbmNsdWRlICJsem8xeF85eC5jIgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzF6X2QxLmMgYi9sem8tMi4wMy9zcmMvbHpvMXpfZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTA1OTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzF6X2QxLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMXpfZDEuYyAtLSBMWk8xWiBkZWNvbXByZXNzaW9uCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxei5oIgorCisjdW5kZWYgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzF6X2RlY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzF4X2QuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMXpfZDIuYyBiL2x6by0yLjAzL3NyYy9sem8xel9kMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1NDIwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMXpfZDIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8xel9kMi5jIC0tIExaTzFaIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzF6LmgiCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzF6X2RlY29tcHJlc3Nfc2FmZQorCisjaW5jbHVkZSAibHpvMXhfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8xel9kMy5jIGIvbHpvLTIuMDMvc3JjL2x6bzF6X2QzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjI0NDA0MAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8xel9kMy5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qIGx6bzF6X2QzLmMgLS0gTFpPMVogZGVjb21wcmVzc2lvbiB3aXRoIHByZXNldCBkaWN0aW9uYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcxei5oIgorCisjZGVmaW5lIGx6bzF4X2RlY29tcHJlc3NfZGljdF9zYWZlICBsem8xel9kZWNvbXByZXNzX2RpY3Rfc2FmZQorCisjaW5jbHVkZSAibHpvMXhfZDMuYyIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8yYV85eC5jIGIvbHpvLTIuMDMvc3JjL2x6bzJhXzl4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIwZTIyNwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8yYV85eC5jCkBAIC0wLDAgKzEsMzU3IEBACisvKiBsem8yYV85eC5jIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8yQS05OTkgY29tcHJlc3Npb24gYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKworI2luY2x1ZGUgImNvbmZpZzJhLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFRIUkVTSE9MRCAgICAgICAxICAgICAgICAgICAvKiBsb3dlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisjZGVmaW5lIEYgICAgICAgICAgICAyMDQ4ICAgICAgICAgICAvKiB1cHBlciBsaW1pdCBmb3IgbWF0Y2ggbGVuZ3RoICovCisKKworI2RlZmluZSBMWk8yQQorI2RlZmluZSBMWk9fQ09NUFJFU1NfVCAgbHpvMmFfOTk5X3QKKyNkZWZpbmUgbHpvX3N3ZF90ICAgICAgIGx6bzJhXzk5OV9zd2RfdAorI2luY2x1ZGUgImx6b19tY2h3LmNoIgorCisKKyNpZiAoTFpPX0NDX0JPUkxBTkRDICYmIExaT19NTV9GTEFUKQorIyAgaWYgKChfX0JPUkxBTkRDX18pID49IDB4MDQ1MCAmJiAoX19CT1JMQU5EQ19fKSA8IDB4MDQ2MCkKKyAgICAgLyogYXZvaWQgaW50ZXJuYWwgY29tcGlsZXIgZXJyb3IgKi8KKyMgICAgcHJhZ21hIG9wdGlvbiAtT2QKKyMgIGVuZGlmCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgcHV0Ynl0ZSh4KSAgICAgICpvcCsrID0gTFpPX0JZVEUoeCkKKworI2RlZmluZSBwdXRiaXRzKGoseCkgXAorICAgIGlmIChrID09IDApIGJpdHAgPSBvcCsrOyBcCisgICAgU0VUQklUUyhqLHgpOyBcCisgICAgaWYgKGsgPj0gOCkgeyAqYml0cCA9IExaT19CWVRFKE1BU0tCSVRTKDgpKTsgRFVNUEJJVFMoOCk7IFwKKyAgICAgICAgICAgICAgICAgICAgaWYgKGsgPiAwKSBiaXRwID0gb3ArKzsgfQorCisjZGVmaW5lIHB1dGJpdCh4KSAgICAgICBwdXRiaXRzKDEseCkKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHRoaXMgaXMgYSBwdWJsaWMgZnVuY3Rpb24sIGJ1dCB0aGVyZSBpcyBubyBwcm90b3R5cGUgaW4gYSBoZWFkZXIgZmlsZQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fRVhURVJOKGludCkKK2x6bzJhXzk5OV9jb21wcmVzc19jYWxsYmFjayAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY2FsbGJhY2tfcCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG1heF9jaGFpbiApOworCitMWk9fUFVCTElDKGludCkKK2x6bzJhXzk5OV9jb21wcmVzc19jYWxsYmFjayAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fYnl0ZXAgb3V0LCBsem9fdWludHAgb3V0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsem9fY2FsbGJhY2tfcCBjYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b191aW50IG1heF9jaGFpbiApCit7CisgICAgbHpvX2J5dGVwIG9wOworICAgIGx6b19ieXRlcCBiaXRwID0gMDsKKyAgICBsem9fdWludCBtX2xlbiwgbV9vZmY7CisgICAgTFpPX0NPTVBSRVNTX1QgY2M7CisgICAgTFpPX0NPTVBSRVNTX1QgKiBjb25zdCBjID0gJmNjOworICAgIGx6b19zd2RfcCBjb25zdCBzd2QgPSAobHpvX3N3ZF9wKSB3cmttZW07CisgICAgaW50IHI7CisKKyAgICBsem9fdWludDMyIGIgPSAwOyAgICAgICAvKiBiaXQgYnVmZmVyICovCisgICAgdW5zaWduZWQgayA9IDA7ICAgICAgICAgLyogYml0cyBpbiBiaXQgYnVmZmVyICovCisKKyAgICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChMWk8yQV85OTlfTUVNX0NPTVBSRVNTID49IFNJWkVPRl9MWk9fU1dEX1QpCisKKyAgICBjLT5pbml0ID0gMDsKKyAgICBjLT5pcCA9IGMtPmluID0gaW47CisgICAgYy0+aW5fZW5kID0gaW4gKyBpbl9sZW47CisgICAgYy0+Y2IgPSBjYjsKKyAgICBjLT5tMSA9IGMtPm0yID0gYy0+bTMgPSBjLT5tNCA9IDA7CisKKyAgICBvcCA9IG91dDsKKworICAgIHIgPSBpbml0X21hdGNoKGMsc3dkLE5VTEwsMCwwKTsKKyAgICBpZiAociAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKyAgICBpZiAobWF4X2NoYWluID4gMCkKKyAgICAgICAgc3dkLT5tYXhfY2hhaW4gPSBtYXhfY2hhaW47CisKKyAgICByID0gZmluZF9tYXRjaChjLHN3ZCwwLDApOworICAgIGlmIChyICE9IDApCisgICAgICAgIHJldHVybiByOworICAgIHdoaWxlIChjLT5sb29rID4gMCkKKyAgICB7CisgICAgICAgIGludCBsYXp5X21hdGNoX21pbl9nYWluID0gMDsKKyAgICAgICAgaW50IGV4dHJhMSA9IDA7CisgICAgICAgIGludCBleHRyYTIgPSAwOworICAgICAgICBsem9fdWludCBhaGVhZCA9IDA7CisKKyAgICAgICAgTFpPX1VOVVNFRChleHRyYTEpOworCisgICAgICAgIG1fbGVuID0gYy0+bV9sZW47CisgICAgICAgIG1fb2ZmID0gYy0+bV9vZmY7CisKKyNpZiAoTiA+PSA4MTkyKQorICAgICAgICBpZiAobV9vZmYgPj0gODE5MikKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fbGVuIDwgTTNfTUlOX0xFTikKKyAgICAgICAgICAgICAgICBtX2xlbiA9IDA7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChtX2xlbiA+PSBNMV9NSU5fTEVOICYmIG1fbGVuIDw9IE0xX01BWF9MRU4gJiYgbV9vZmYgPD0gMjU2KQorICAgICAgICB7CisgICAgICAgICAgICBsYXp5X21hdGNoX21pbl9nYWluID0gMjsKKyAgICAgICAgICAgIGV4dHJhMSA9IDM7CisgICAgICAgICAgICBleHRyYTIgPSAyOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKG1fbGVuID49IDEwKQorICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisgICAgICAgIGVsc2UgaWYgKG1fbGVuID49IDMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gPSAxOworICAgICAgICAgICAgZXh0cmExID0gMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2xlbiA9IDA7CisKKworICAgICAgICAvKiB0cnkgYSBsYXp5IG1hdGNoICovCisgICAgICAgIGlmIChsYXp5X21hdGNoX21pbl9nYWluID4gMCAmJiBjLT5sb29rID4gbV9sZW4pCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBsaXQgPSBzd2QtPmJfY2hhcjsKKworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICAgICAgYXNzZXJ0KGMtPmxvb2sgPiAwKTsKKworI2lmIChOID49IDgxOTIpCisgICAgICAgICAgICBpZiAobV9vZmYgPCA4MTkyICYmIGMtPm1fb2ZmID49IDgxOTIpCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiArPSBleHRyYTE7CisgICAgICAgICAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgICAgIGlmIChtX2xlbiA+PSBNMV9NSU5fTEVOICYmIG1fbGVuIDw9IE0xX01BWF9MRU4gJiYgbV9vZmYgPD0gMjU2KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghKGMtPm1fbGVuID49IE0xX01JTl9MRU4gJiYKKyAgICAgICAgICAgICAgICAgICAgICBjLT5tX2xlbiA8PSBNMV9NQVhfTEVOICYmIGMtPm1fb2ZmIDw9IDI1NikpCisgICAgICAgICAgICAgICAgICAgIGxhenlfbWF0Y2hfbWluX2dhaW4gKz0gZXh0cmEyOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGMtPm1fbGVuID49IE0xX01JTl9MRU4gJiYKKyAgICAgICAgICAgICAgICBjLT5tX2xlbiA8PSBNMV9NQVhfTEVOICYmIGMtPm1fb2ZmIDw9IDI1NikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiAtPSAxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAobGF6eV9tYXRjaF9taW5fZ2FpbiA8IDEpCisgICAgICAgICAgICAgICAgbGF6eV9tYXRjaF9taW5fZ2FpbiA9IDE7CisKKyAgICAgICAgICAgIGlmIChjLT5tX2xlbiA+PSBtX2xlbiArIGxhenlfbWF0Y2hfbWluX2dhaW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgYy0+bGF6eSsrOworI2lmICFkZWZpbmVkKE5ERUJVRykKKyAgICAgICAgICAgICAgICBtX2xlbiA9IGMtPm1fbGVuOworICAgICAgICAgICAgICAgIG1fb2ZmID0gYy0+bV9vZmY7CisgICAgICAgICAgICAgICAgYXNzZXJ0KGx6b19tZW1jbXAoYy0+aXAgLSBjLT5sb29rLCBjLT5pcCAtIGMtPmxvb2sgLSBtX29mZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xlbikgPT0gMCk7CisgICAgICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IDMgfHwgKG1fbGVuID49IDIgJiYgbV9vZmYgPD0gMjU2KSk7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAvKiBjb2RlIGxpdGVyYWwgKi8KKyAgICAgICAgICAgICAgICBwdXRiaXQoMCk7CisgICAgICAgICAgICAgICAgcHV0Ynl0ZShsaXQpOworICAgICAgICAgICAgICAgIGMtPmxpdF9ieXRlcysrOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFoZWFkID0gMTsKKyAgICAgICAgICAgIGFzc2VydChtX2xlbiA+IDApOworICAgICAgICB9CisKKworICAgICAgICBpZiAobV9sZW4gPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgLyogYSBsaXRlcmFsICovCisgICAgICAgICAgICBwdXRiaXQoMCk7CisgICAgICAgICAgICBwdXRieXRlKHN3ZC0+Yl9jaGFyKTsKKyAgICAgICAgICAgIGMtPmxpdF9ieXRlcysrOworICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsMSwwKTsKKyAgICAgICAgICAgIGFzc2VydChyID09IDApOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgYXNzZXJ0KG1fbGVuID49IE0xX01JTl9MRU4pOworICAgICAgICAgICAgYXNzZXJ0KG1fb2ZmID4gMCk7CisgICAgICAgICAgICBhc3NlcnQobV9vZmYgPD0gTik7CisKKyAgICAgICAgICAgIC8qIDIgLSBjb2RlIG1hdGNoICovCisgICAgICAgICAgICBpZiAobV9sZW4gPj0gTTFfTUlOX0xFTiAmJiBtX2xlbiA8PSBNMV9NQVhfTEVOICYmIG1fb2ZmIDw9IDI1NikKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBwdXRiaXQoMSk7CisgICAgICAgICAgICAgICAgcHV0Yml0KDApOworICAgICAgICAgICAgICAgIHB1dGJpdHMoMixtX2xlbiAtIE0xX01JTl9MRU4pOworICAgICAgICAgICAgICAgIHB1dGJ5dGUobV9vZmYgLSAxKTsKKyAgICAgICAgICAgICAgICBjLT5tMSsrOworICAgICAgICAgICAgfQorI2lmIChOID49IDgxOTIpCisgICAgICAgICAgICBlbHNlIGlmIChtX29mZiA+PSA4MTkyKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxlbiA9IG1fbGVuOworICAgICAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSBNM19NSU5fTEVOKTsKKyAgICAgICAgICAgICAgICBwdXRiaXQoMSk7CisgICAgICAgICAgICAgICAgcHV0Yml0KDEpOworICAgICAgICAgICAgICAgIHB1dGJ5dGUobV9vZmYgJiAzMSk7CisgICAgICAgICAgICAgICAgcHV0Ynl0ZShtX29mZiA+PiA1KTsKKyAgICAgICAgICAgICAgICBwdXRiaXQoMSk7CisgICAgICAgICAgICAgICAgbGVuIC09IE0zX01JTl9MRU4gLSAxOworICAgICAgICAgICAgICAgIHdoaWxlIChsZW4gPiAyNTUpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICAgICBwdXRieXRlKDApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwdXRieXRlKGxlbik7CisgICAgICAgICAgICAgICAgYy0+bTQrKzsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGFzc2VydChtX2xlbiA+PSAzKTsKKworICAgICAgICAgICAgICAgIHB1dGJpdCgxKTsKKyAgICAgICAgICAgICAgICBwdXRiaXQoMSk7CisgICAgICAgICAgICAgICAgaWYgKG1fbGVuIDw9IDkpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBwdXRieXRlKCgobV9sZW4gLSAyKSA8PCA1KSB8IChtX29mZiAmIDMxKSk7CisgICAgICAgICAgICAgICAgICAgIHB1dGJ5dGUobV9vZmYgPj4gNSk7CisgICAgICAgICAgICAgICAgICAgIGMtPm0yKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGx6b191aW50IGxlbiA9IG1fbGVuOworICAgICAgICAgICAgICAgICAgICBwdXRieXRlKG1fb2ZmICYgMzEpOworICAgICAgICAgICAgICAgICAgICBwdXRieXRlKG1fb2ZmID4+IDUpOworI2lmIChOID49IDgxOTIpCisgICAgICAgICAgICAgICAgICAgIHB1dGJpdCgwKTsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMTAgLSAxOworICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGVuID4gMjU1KQorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZW4gLT0gMjU1OworICAgICAgICAgICAgICAgICAgICAgICAgcHV0Ynl0ZSgwKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBwdXRieXRlKGxlbik7CisgICAgICAgICAgICAgICAgICAgIGMtPm0zKys7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgciA9IGZpbmRfbWF0Y2goYyxzd2QsbV9sZW4sMSthaGVhZCk7CisgICAgICAgICAgICBhc3NlcnQociA9PSAwKTsKKyAgICAgICAgfQorCisgICAgICAgIGMtPmNvZGVzaXplID0gcGQob3AsIG91dCk7CisgICAgfQorCisjaWYgZGVmaW5lZChMWk9fRU9GX0NPREUpCisgICAgLyogY29kZSBFT0YgY29kZSAqLworICAgIHB1dGJpdCgxKTsKKyAgICBwdXRiaXQoMSk7CisgICAgcHV0Ynl0ZSgxIDw8IDUpOworICAgIHB1dGJ5dGUoMCk7CisjZW5kaWYKKworICAgIC8qIGZsdXNoIHJlbWFpbmluZyBiaXRzICovCisgICAgYXNzZXJ0KGsgPCBDSEFSX0JJVCk7CisgICAgaWYgKGsgPiAwKQorICAgIHsKKyAgICAgICAgYXNzZXJ0KGIgPT0gTUFTS0JJVFMoaykpOworICAgICAgICBhc3NlcnQob3AgLSBiaXRwID4gMSk7CisgICAgICAgICpiaXRwID0gTFpPX0JZVEUoTUFTS0JJVFMoaykpOworICAgICAgICBEVU1QQklUUyhrKTsKKyAgICAgICAgYXNzZXJ0KGIgPT0gMCk7CisgICAgICAgIGFzc2VydChrID09IDApOworICAgIH0KKworICAgIGFzc2VydChjLT50ZXh0c2l6ZSA9PSBpbl9sZW4pOworICAgIGMtPmNvZGVzaXplID0gcGQob3AsIG91dCk7CisKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworCisgICAgaWYgKGMtPmNiICYmIGMtPmNiLT5ucHJvZ3Jlc3MpCisgICAgICAgICgqYy0+Y2ItPm5wcm9ncmVzcykoYy0+Y2IsIGMtPnRleHRzaXplLCBjLT5jb2Rlc2l6ZSwgMCk7CisKKyNpZiAwCisgICAgcHJpbnRmKCIlbGQgLT4gJWxkOiAlbGQgJWxkICVsZCAlbGQgJWxkICVsZFxuIiwKKyAgICAgICAgKGxvbmcpIGMtPnRleHRzaXplLCAobG9uZykgYy0+Y29kZXNpemUsCisgICAgICAgIGMtPmxpdF9ieXRlcywgYy0+bTEsIGMtPm0yLCBjLT5tMywgYy0+bTQsIGMtPmxhenkpOworI2VuZGlmCisgICAgcmV0dXJuIExaT19FX09LOworfQorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitMWk9fUFVCTElDKGludCkKK2x6bzJhXzk5OV9jb21wcmVzcyAgKCBjb25zdCBsem9fYnl0ZXAgaW4gLCBsem9fdWludCAgaW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b19ieXRlcCBvdXQsIGx6b191aW50cCBvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx6b192b2lkcCB3cmttZW0gKQoreworICAgIHJldHVybiBsem8yYV85OTlfY29tcHJlc3NfY2FsbGJhY2soaW4saW5fbGVuLG91dCxvdXRfbGVuLHdya21lbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsem9fY2FsbGJhY2tfcCkgMCwgMCk7Cit9CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem8yYV9kLmNoIGIvbHpvLTIuMDMvc3JjL2x6bzJhX2QuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTgyMmFjMAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem8yYV9kLmNoCkBAIC0wLDAgKzEsMTg4IEBACisvKiBsem8yYV9kLmNoIC0tIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMWk8yQSBkZWNvbXByZXNzaW9uIGFsZ29yaXRobQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvMV9kLmNoIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZGVjb21wcmVzcyBhIGJsb2NrIG9mIGRhdGEuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgX05FRURCWVRFICAgTkVFRF9JUCgxKQorI2RlZmluZSBfTkVYVEJZVEUgICAoKmlwKyspCisKK0xaT19QVUJMSUMoaW50KQorRE9fREVDT01QUkVTUyAgICAoIGNvbnN0IGx6b19ieXRlcCBpbiAsIGx6b191aW50ICBpbl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX2J5dGVwIG91dCwgbHpvX3VpbnRwIG91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgbHpvX3ZvaWRwIHdya21lbSApCit7CisgICAgcmVnaXN0ZXIgbHpvX2J5dGVwIG9wOworICAgIHJlZ2lzdGVyIGNvbnN0IGx6b19ieXRlcCBpcDsKKyAgICByZWdpc3RlciBjb25zdCBsem9fYnl0ZXAgbV9wb3M7CisKKyAgICBsem9fdWludCB0OworICAgIGNvbnN0IGx6b19ieXRlcCBjb25zdCBpcF9lbmQgPSBpbiArIGluX2xlbjsKKyNpZiBkZWZpbmVkKEhBVkVfQU5ZX09QKQorICAgIGx6b19ieXRlcCBjb25zdCBvcF9lbmQgPSBvdXQgKyAqb3V0X2xlbjsKKyNlbmRpZgorCisgICAgbHpvX3VpbnQzMiBiID0gMDsgICAgICAgLyogYml0IGJ1ZmZlciAqLworICAgIHVuc2lnbmVkIGsgPSAwOyAgICAgICAgIC8qIGJpdHMgaW4gYml0IGJ1ZmZlciAqLworCisgICAgTFpPX1VOVVNFRCh3cmttZW0pOworCisgICAgb3AgPSBvdXQ7CisgICAgaXAgPSBpbjsKKworICAgIHdoaWxlIChURVNUX0lQICYmIFRFU1RfT1ApCisgICAgeworICAgICAgICBORUVEQklUUygxKTsKKyAgICAgICAgaWYgKE1BU0tCSVRTKDEpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIERVTVBCSVRTKDEpOworICAgICAgICAgICAgLyogYSBsaXRlcmFsICovCisgICAgICAgICAgICBORUVEX0lQKDEpOyBORUVEX09QKDEpOworICAgICAgICAgICAgKm9wKysgPSAqaXArKzsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIERVTVBCSVRTKDEpOworCisgICAgICAgIE5FRURCSVRTKDEpOworICAgICAgICBpZiAoTUFTS0JJVFMoMSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgRFVNUEJJVFMoMSk7CisgICAgICAgICAgICAvKiBhIE0xIG1hdGNoICovCisgICAgICAgICAgICBORUVEQklUUygyKTsKKyAgICAgICAgICAgIHQgPSBNMV9NSU5fTEVOICsgKGx6b191aW50KSBNQVNLQklUUygyKTsKKyAgICAgICAgICAgIERVTVBCSVRTKDIpOworICAgICAgICAgICAgTkVFRF9JUCgxKTsgTkVFRF9PUCh0KTsKKyAgICAgICAgICAgIG1fcG9zID0gb3AgLSAxIC0gKmlwKys7CisgICAgICAgICAgICBhc3NlcnQobV9wb3MgPj0gb3V0KTsgYXNzZXJ0KG1fcG9zIDwgb3ApOworICAgICAgICAgICAgVEVTVF9MQihtX3Bvcyk7CisgICAgICAgICAgICBNRU1DUFlfRFMob3AsbV9wb3MsdCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBEVU1QQklUUygxKTsKKworICAgICAgICBORUVEX0lQKDIpOworICAgICAgICB0ID0gKmlwKys7CisgICAgICAgIG1fcG9zID0gb3A7CisgICAgICAgIG1fcG9zIC09ICh0ICYgMzEpIHwgKCgobHpvX3VpbnQpICppcCsrKSA8PCA1KTsKKyAgICAgICAgdCA+Pj0gNTsKKyAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgeworI2lmIChOID49IDgxOTIpCisgICAgICAgICAgICBORUVEQklUUygxKTsKKyAgICAgICAgICAgIHQgPSBNQVNLQklUUygxKTsKKyAgICAgICAgICAgIERVTVBCSVRTKDEpOworICAgICAgICAgICAgaWYgKHQgPT0gMCkKKyAgICAgICAgICAgICAgICB0ID0gMTAgLSAxOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIGEgTTMgbWF0Y2ggKi8KKyAgICAgICAgICAgICAgICBtX3BvcyAtPSA4MTkyOyAgICAgIC8qIHQgPDwgMTMgKi8KKyAgICAgICAgICAgICAgICB0ID0gTTNfTUlOX0xFTiAtIDE7CisgICAgICAgICAgICB9CisjZWxzZQorICAgICAgICAgICAgdCA9IDEwIC0gMTsKKyNlbmRpZgorICAgICAgICAgICAgTkVFRF9JUCgxKTsKKyAgICAgICAgICAgIHdoaWxlICgqaXAgPT0gMCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB0ICs9IDI1NTsKKyAgICAgICAgICAgICAgICBpcCsrOworICAgICAgICAgICAgICAgIE5FRURfSVAoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0ICs9ICppcCsrOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworI2lmIGRlZmluZWQoTFpPX0VPRl9DT0RFKQorICAgICAgICAgICAgaWYgKG1fcG9zID09IG9wKQorICAgICAgICAgICAgICAgIGdvdG8gZW9mX2ZvdW5kOworI2VuZGlmCisgICAgICAgICAgICB0ICs9IDI7CisgICAgICAgIH0KKyAgICAgICAgYXNzZXJ0KG1fcG9zID49IG91dCk7IGFzc2VydChtX3BvcyA8IG9wKTsKKyAgICAgICAgVEVTVF9MQihtX3Bvcyk7CisgICAgICAgIE5FRURfT1AodCk7CisgICAgICAgIE1FTUNQWV9EUyhvcCxtX3Bvcyx0KTsKKyAgICB9CisKKworI2lmIGRlZmluZWQoTFpPX0VPRl9DT0RFKQorI2lmIGRlZmluZWQoSEFWRV9URVNUX0lQKSB8fCBkZWZpbmVkKEhBVkVfVEVTVF9PUCkKKyAgICAvKiBubyBFT0YgY29kZSB3YXMgZm91bmQgKi8KKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9FT0ZfTk9UX0ZPVU5EOworI2VuZGlmCisKK2VvZl9mb3VuZDoKKyAgICBhc3NlcnQodCA9PSAxKTsKKyNlbmRpZgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIChpcCA9PSBpcF9lbmQgPyBMWk9fRV9PSyA6CisgICAgICAgICAgIChpcCA8IGlwX2VuZCAgPyBMWk9fRV9JTlBVVF9OT1RfQ09OU1VNRUQgOiBMWk9fRV9JTlBVVF9PVkVSUlVOKSk7CisKKworI2lmIGRlZmluZWQoSEFWRV9ORUVEX0lQKQoraW5wdXRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9JTlBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfTkVFRF9PUCkKK291dHB1dF9vdmVycnVuOgorICAgICpvdXRfbGVuID0gcGQob3AsIG91dCk7CisgICAgcmV0dXJuIExaT19FX09VVFBVVF9PVkVSUlVOOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaT19URVNUX09WRVJSVU5fTE9PS0JFSElORCkKK2xvb2tiZWhpbmRfb3ZlcnJ1bjoKKyAgICAqb3V0X2xlbiA9IHBkKG9wLCBvdXQpOworICAgIHJldHVybiBMWk9fRV9MT09LQkVISU5EX09WRVJSVU47CisjZW5kaWYKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6bzJhX2QxLmMgYi9sem8tMi4wMy9zcmMvbHpvMmFfZDEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ZjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6bzJhX2QxLmMKQEAgLTAsMCArMSw0NiBAQAorLyogbHpvMmFfZDEuYyAtLSBMWk8yQSBkZWNvbXByZXNzaW9uIHdpdGggb3ZlcnJ1biB0ZXN0aW5nCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJjb25maWcyYS5oIgorCisjdW5kZWYgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzJhX2RlY29tcHJlc3MKKworI2luY2x1ZGUgImx6bzJhX2QuY2giCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvMmFfZDIuYyBiL2x6by0yLjAzL3NyYy9sem8yYV9kMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZTY2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvMmFfZDIuYwpAQCAtMCwwICsxLDQ2IEBACisvKiBsem8yYV9kMi5jIC0tIExaTzJBIGRlY29tcHJlc3Npb24gd2l0aCBvdmVycnVuIHRlc3RpbmcKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImNvbmZpZzJhLmgiCisKKyNkZWZpbmUgTFpPX1RFU1RfT1ZFUlJVTgorI2RlZmluZSBET19ERUNPTVBSRVNTICAgICAgIGx6bzJhX2RlY29tcHJlc3Nfc2FmZQorCisjaW5jbHVkZSAibHpvMmFfZC5jaCIKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fY29uZi5oIGIvbHpvLTIuMDMvc3JjL2x6b19jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODVlMTA4MAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem9fY29uZi5oCkBAIC0wLDAgKzEsMzIzIEBACisvKiBsem9fY29uZi5oIC0tIG1haW4gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBmaWxlIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19DT05GX0gKKyNkZWZpbmUgX19MWk9fQ09ORl9ICisKKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorI2lmIGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgTFpPX0xJQkNfRlJFRVNUQU5ESU5HIDEKKyMgIGRlZmluZSBMWk9fT1NfRlJFRVNUQU5ESU5HIDEKKyMgIGRlZmluZSBBQ0NfTElCQ19GUkVFU1RBTkRJTkcgMQorIyAgZGVmaW5lIEFDQ19PU19GUkVFU1RBTkRJTkcgMQorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQ0ZHX05PX1VOQUxJR05FRCkKKyMgIGRlZmluZSBBQ0NfQ0ZHX05PX1VOQUxJR05FRCAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BUkNIX0dFTkVSSUMpCisjICBkZWZpbmUgQUNDX0FSQ0hfR0VORVJJQyAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19BQklfTkVVVFJBTF9FTkRJQU4pCisjICBkZWZpbmUgQUNDX0FCSV9ORVVUUkFMX0VORElBTiAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19IQVZFX0NPTkZJR19IKQorIyAgZGVmaW5lIEFDQ19DT05GSUdfTk9fSEVBREVSIDEKKyNlbmRpZgorI2lmIGRlZmluZWQoTFpPX0NGR19FWFRSQV9DT05GSUdfSEVBREVSKQorIyAgaW5jbHVkZSBMWk9fQ0ZHX0VYVFJBX0NPTkZJR19IRUFERVIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19MWk9DT05GX0gpIHx8IGRlZmluZWQoX19MWk9DT05GX0hfSU5DTFVERUQpCisjICBlcnJvciAiaW5jbHVkZSB0aGlzIGZpbGUgZmlyc3QiCisjZW5kaWYKKyNpbmNsdWRlICJsem8vbHpvY29uZi5oIgorI2VuZGlmCisKKyNpZiAoTFpPX1ZFUlNJT04gPCAweDAyMDAwKSB8fCAhZGVmaW5lZChfX0xaT0NPTkZfSF9JTkNMVURFRCkKKyMgIGVycm9yICJ2ZXJzaW9uIG1pc21hdGNoIgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBwcmFnbWFzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoTFpPX0NDX0JPUkxBTkRDICYmIExaT19BUkNIX0kwODYpCisjICBwcmFnbWEgb3B0aW9uIC1oICAgICAgICAgLyogZW5hYmxlIGZhc3QgaHVnZSBwb2ludGVycyAqLworI2VuZGlmCisKKyNpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTAwMCkpCisjICBwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0MTI3IDQ3MDEpCisjZW5kaWYKKyNpZiAoTFpPX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkpCisgICAvKiBhdm9pZCBgLVdhbGwnIHdhcm5pbmdzIGluIHN5c3RlbSBoZWFkZXIgZmlsZXMgKi8KKyMgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQ4MjApCisgICAvKiBhdm9pZCB3YXJuaW5ncyBhYm91dCBpbmxpbmluZyAqLworIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDUxNCA0NzEwIDQ3MTEpCisjZW5kaWYKKworI2lmIChMWk9fQ0NfU1VOUFJPQykKKyMgIHByYWdtYSBlcnJvcl9tZXNzYWdlcyhvZmYsRV9FTkRfT0ZfTE9PUF9DT0RFX05PVF9SRUFDSEVEKQorIyAgcHJhZ21hIGVycm9yX21lc3NhZ2VzKG9mZixFX0xPT1BfTk9UX0VOVEVSRURfQVRfVE9QKQorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkgJiYgKCFMWk9fSEFWRV9NTV9IVUdFX1BUUikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIC0gY2hlY2sgZGVmaW5lcyBmb3IgX19odWdlIgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTFpPX0lOX01JTklMWk8pIHx8IGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjZWxpZiAoTFpPX09TX0RPUzE2IHx8IExaT19PU19PUzIxNiB8fCBMWk9fT1NfV0lOMTYpCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0VfSCAxCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0lfSCAxCisjZWxpZiAxCisjICBpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjICBkZWZpbmUgQUNDX1dBTlRfQUNDX0lOQ0RfSCAxCisjZW5kaWYKKyNpbmNsdWRlICJtaW5pYWNjLmgiCisKKworI2lmIGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjICB1bmRlZiBIQVZFX01FTUNNUAorIyAgdW5kZWYgSEFWRV9NRU1DUFkKKyMgIHVuZGVmIEhBVkVfTUVNTU9WRQorIyAgdW5kZWYgSEFWRV9NRU1TRVQKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoSEFWRV9NRU1DTVApCisjICB1bmRlZiBtZW1jbXAKKyMgIGRlZmluZSBtZW1jbXAoYSxiLGMpICAgICAgICAgbHpvX21lbWNtcChhLGIsYykKKyNlbGlmICFkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgZGVmaW5lIGx6b19tZW1jbXAoYSxiLGMpICAgICBtZW1jbXAoYSxiLGMpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChIQVZFX01FTUNQWSkKKyMgIHVuZGVmIG1lbWNweQorIyAgZGVmaW5lIG1lbWNweShhLGIsYykgICAgICAgICBsem9fbWVtY3B5KGEsYixjKQorI2VsaWYgIWRlZmluZWQoX19MWk9fTU1PREVMX0hVR0UpCisjICBkZWZpbmUgbHpvX21lbWNweShhLGIsYykgICAgIG1lbWNweShhLGIsYykKKyNlbmRpZgorI2lmICFkZWZpbmVkKEhBVkVfTUVNTU9WRSkKKyMgIHVuZGVmIG1lbW1vdmUKKyMgIGRlZmluZSBtZW1tb3ZlKGEsYixjKSAgICAgICAgbHpvX21lbW1vdmUoYSxiLGMpCisjZWxpZiAhZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgIGRlZmluZSBsem9fbWVtbW92ZShhLGIsYykgICAgbWVtbW92ZShhLGIsYykKKyNlbmRpZgorI2lmICFkZWZpbmVkKEhBVkVfTUVNU0VUKQorIyAgdW5kZWYgbWVtc2V0CisjICBkZWZpbmUgbWVtc2V0KGEsYixjKSAgICAgICAgIGx6b19tZW1zZXQoYSxiLGMpCisjZWxpZiAhZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgIGRlZmluZSBsem9fbWVtc2V0KGEsYixjKSAgICAgbWVtc2V0KGEsYixjKQorI2VuZGlmCisKKworI3VuZGVmIE5ERUJVRworI2lmIGRlZmluZWQoTFpPX0NGR19GUkVFU1RBTkRJTkcpCisjICB1bmRlZiBMWk9fREVCVUcKKyMgIGRlZmluZSBOREVCVUcgMQorIyAgdW5kZWYgYXNzZXJ0CisjICBkZWZpbmUgYXNzZXJ0KGUpICgodm9pZCkwKQorI2Vsc2UKKyMgIGlmICFkZWZpbmVkKExaT19ERUJVRykKKyMgICAgZGVmaW5lIE5ERUJVRyAxCisjICBlbmRpZgorIyAgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI2lmIDAgJiYgZGVmaW5lZChfX0JPVU5EU19DSEVDS0lOR19PTikKKyMgIGluY2x1ZGUgPHVuY2hlY2tlZC5oPgorI2Vsc2UKKyMgIGRlZmluZSBCT1VORFNfQ0hFQ0tJTkdfT0ZGX0RVUklORyhzdG10KSAgICAgIHN0bXQKKyMgIGRlZmluZSBCT1VORFNfQ0hFQ0tJTkdfT0ZGX0lOX0VYUFIoZXhwcikgICAgIChleHByKQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2x6b19pbmxpbmUpCisjICBkZWZpbmUgX19sem9faW5saW5lCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2x6b19mb3JjZWlubGluZSkKKyMgIGRlZmluZSBfX2x6b19mb3JjZWlubGluZQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19sem9fbm9pbmxpbmUpCisjICBkZWZpbmUgX19sem9fbm9pbmxpbmUKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIDEKKyMgIGRlZmluZSBMWk9fQllURSh4KSAgICAgICAoKHVuc2lnbmVkIGNoYXIpICh4KSkKKyNlbHNlCisjICBkZWZpbmUgTFpPX0JZVEUoeCkgICAgICAgKCh1bnNpZ25lZCBjaGFyKSAoKHgpICYgMHhmZikpCisjZW5kaWYKKworI2RlZmluZSBMWk9fTUFYKGEsYikgICAgICAgICgoYSkgPj0gKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBMWk9fTUlOKGEsYikgICAgICAgICgoYSkgPD0gKGIpID8gKGEpIDogKGIpKQorI2RlZmluZSBMWk9fTUFYMyhhLGIsYykgICAgICgoYSkgPj0gKGIpID8gTFpPX01BWChhLGMpIDogTFpPX01BWChiLGMpKQorI2RlZmluZSBMWk9fTUlOMyhhLGIsYykgICAgICgoYSkgPD0gKGIpID8gTFpPX01JTihhLGMpIDogTFpPX01JTihiLGMpKQorCisjZGVmaW5lIGx6b19zaXplb2YodHlwZSkgICAgKChsem9fdWludCkgKHNpemVvZih0eXBlKSkpCisKKyNkZWZpbmUgTFpPX0hJR0goYXJyYXkpICAgICAoKGx6b191aW50KSAoc2l6ZW9mKGFycmF5KS9zaXplb2YoKihhcnJheSkpKSkKKworLyogdGhpcyBhbHdheXMgZml0cyBpbnRvIDE2IGJpdHMgKi8KKyNkZWZpbmUgTFpPX1NJWkUoYml0cykgICAgICAoMXUgPDwgKGJpdHMpKQorI2RlZmluZSBMWk9fTUFTSyhiaXRzKSAgICAgIChMWk9fU0laRShiaXRzKSAtIDEpCisKKyNkZWZpbmUgTFpPX0xTSVpFKGJpdHMpICAgICAoMXVsIDw8IChiaXRzKSkKKyNkZWZpbmUgTFpPX0xNQVNLKGJpdHMpICAgICAoTFpPX0xTSVpFKGJpdHMpIC0gMSkKKworI2RlZmluZSBMWk9fVVNJWkUoYml0cykgICAgICgobHpvX3VpbnQpIDEgPDwgKGJpdHMpKQorI2RlZmluZSBMWk9fVU1BU0soYml0cykgICAgIChMWk9fVVNJWkUoYml0cykgLSAxKQorCisjaWYgIWRlZmluZWQoRE1VTCkKKyNpZiAwCisgICAvKiAzMiozMiBtdWx0aXBsaWVzIG1heSBiZSBmYXN0ZXIgdGhhbiA2NCo2NCBvbiBzb21lIDY0LWJpdCBtYWNoaW5lcywKKyAgICAqIGJ1dCB0aGVuIHdlIG5lZWQgZXh0cmEgY2FzdHMgZnJvbSB1bnNpZ25lZDwtPnNpemVfdCAqLworIyAgZGVmaW5lIERNVUwoYSxiKSAoKGx6b194aW50KSAoKGx6b191aW50MzIpKGEpICogKGx6b191aW50MzIpKGIpKSkKKyNlbHNlCisjICBkZWZpbmUgRE1VTChhLGIpICgobHpvX3hpbnQpICgoYSkgKiAoYikpKQorI2VuZGlmCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbXBpbGVyIGFuZCBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgc3R1ZmYKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogU29tZSBkZWZpbmVzIHRoYXQgaW5kaWNhdGUgaWYgbWVtb3J5IGNhbiBiZSBhY2Nlc3NlZCBhdCB1bmFsaWduZWQKKyAqIG1lbW9yeSBhZGRyZXNzZXMuIFlvdSBzaG91bGQgYWxzbyB0ZXN0IHRoYXQgdGhpcyBpcyBhY3R1YWxseSBmYXN0ZXIKKyAqIGV2ZW4gaWYgaXQgaXMgYWxsb3dlZCBieSB5b3VyIHN5c3RlbS4KKyAqLworCisjaWYgMSAmJiAhZGVmaW5lZChMWk9fQ0ZHX05PX1VOQUxJR05FRCkKKyNpZiAxICYmIChMWk9fQVJDSF9BTUQ2NCB8fCBMWk9fQVJDSF9JMzg2KQorIyAgaWYgKExaT19TSVpFT0ZfU0hPUlQgPT0gMikKKyMgICAgZGVmaW5lIExaT19VTkFMSUdORURfT0tfMgorIyAgZW5kaWYKKyMgIGlmIChMWk9fU0laRU9GX0lOVCA9PSA0KQorIyAgICBkZWZpbmUgTFpPX1VOQUxJR05FRF9PS180CisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKQorICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoc2l6ZW9mKHNob3J0KSA9PSAyKQorI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihzaXplb2YobHpvX3VpbnQzMikgPT0gNCkKKyNlbGlmIGRlZmluZWQoTFpPX0FMSUdORURfT0tfNCkKKyAgTFpPX0NPTVBJTEVfVElNRV9BU1NFUlRfSEVBREVSKHNpemVvZihsem9fdWludDMyKSA9PSA0KQorI2VuZGlmCisKKworLyogRmFzdCBtZW1jcHkgdGhhdCBjb3BpZXMgbXVsdGlwbGVzIG9mIDggYnl0ZSBjaHVua3MuCisgKiBsZW4gaXMgdGhlIG51bWJlciBvZiBieXRlcy4KKyAqIG5vdGU6IGFsbCBwYXJhbWV0ZXJzIG11c3QgYmUgbHZhbHVlcywgbGVuID49IDgKKyAqICAgICAgIGRlc3QgYW5kIHNyYyBhZHZhbmNlLCBsZW4gaXMgdW5kZWZpbmVkIGFmdGVyd2FyZHMKKyAqLworCisjZGVmaW5lIE1FTUNQWThfRFMoZGVzdCxzcmMsbGVuKSBcCisgICAgbHpvX21lbWNweShkZXN0LHNyYyxsZW4pOyBkZXN0ICs9IGxlbjsgc3JjICs9IGxlbgorCisjZGVmaW5lIEJaRVJPOF9QVFIocyxsLG4pIFwKKyAgICBsem9fbWVtc2V0KChsem9fdm9pZHApKHMpLDAsKGx6b191aW50KShsKSoobikpCisKKyNkZWZpbmUgTUVNQ1BZX0RTKGRlc3Qsc3JjLGxlbikgXAorICAgIGRvICpkZXN0KysgPSAqc3JjKys7IHdoaWxlICgtLWxlbiA+IDApCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBzb21lIGdsb2JhbHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworX19MWk9fRVhURVJOX0MgaW50IF9fbHpvX2luaXRfZG9uZTsKK19fTFpPX0VYVEVSTl9DIGNvbnN0IGNoYXIgX19sem9fY29weXJpZ2h0W107CitMWk9fRVhURVJOKGNvbnN0IGx6b19ieXRlcCkgbHpvX2NvcHlyaWdodCh2b2lkKTsKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpbmNsdWRlICJsem9fcHRyLmgiCisKKworLyogR2VuZXJhdGUgY29tcHJlc3NlZCBkYXRhIGluIGEgZGV0ZXJtaW5pc3RpYyB3YXkuCisgKiBUaGlzIGlzIGZ1bGx5IHBvcnRhYmxlLCBhbmQgY29tcHJlc3Npb24gY2FuIGJlIGZhc3RlciBhcyB3ZWxsLgorICogQSByZWFzb24gTk9UIHRvIGJlIGRldGVybWluaXN0aWMgaXMgd2hlbiB0aGUgYmxvY2sgc2l6ZSBpcworICogdmVyeSBzbWFsbCAoZS5nLiA4a0IpIG9yIHRoZSBkaWN0aW9uYXJ5IGlzIGJpZywgYmVjYXVzZQorICogdGhlbiB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIGRpY3Rpb25hcnkgYmVjb21lcyBhIHJlbGV2YW50CisgKiBtYWduaXR1ZGUgZm9yIGNvbXByZXNzaW9uIHNwZWVkLgorICovCisjZGVmaW5lIExaT19ERVRFUk1JTklTVElDCisKKworI2RlZmluZSBMWk9fRElDVF9VU0VfUFRSCisjaWYgMCAmJiAoTFpPX0FSQ0hfSTA4NikKKyMgIHVuZGVmIExaT19ESUNUX1VTRV9QVFIKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk9fRElDVF9VU0VfUFRSKQorIyAgZGVmaW5lIGx6b19kaWN0X3QgICAgY29uc3QgbHpvX2J5dGVwCisjICBkZWZpbmUgbHpvX2RpY3RfcCAgICBsem9fZGljdF90IF9fTFpPX01NT0RFTCAqCisjZWxzZQorIyAgZGVmaW5lIGx6b19kaWN0X3QgICAgbHpvX3VpbnQKKyMgIGRlZmluZSBsem9fZGljdF9wICAgIGx6b19kaWN0X3QgX19MWk9fTU1PREVMICoKKyNlbmRpZgorCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvX2NyYy5jIGIvbHpvLTIuMDMvc3JjL2x6b19jcmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mzk0MWFiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6b19jcmMuYwpAQCAtMCwwICsxLDE2NyBAQAorLyogbHpvX2NyYy5jIC0tIGNyYyBjaGVja3N1bSBmb3IgdGhlIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNyYzMyIGNoZWNrc3VtCisvLyBhZGFwdGVkIGZyb20gZnJlZSBjb2RlIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CisvLyBzZWUgaHR0cDovL3d3dy56bGliLm9yZy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGNvbnN0IGx6b191aW50MzIgbHpvX2NyYzMyX3RhYmxlWzI1Nl0gPSB7CisgIDB4MDAwMDAwMDBMLCAweDc3MDczMDk2TCwgMHhlZTBlNjEyY0wsIDB4OTkwOTUxYmFMLCAweDA3NmRjNDE5TCwKKyAgMHg3MDZhZjQ4ZkwsIDB4ZTk2M2E1MzVMLCAweDllNjQ5NWEzTCwgMHgwZWRiODgzMkwsIDB4NzlkY2I4YTRMLAorICAweGUwZDVlOTFlTCwgMHg5N2QyZDk4OEwsIDB4MDliNjRjMmJMLCAweDdlYjE3Y2JkTCwgMHhlN2I4MmQwN0wsCisgIDB4OTBiZjFkOTFMLCAweDFkYjcxMDY0TCwgMHg2YWIwMjBmMkwsIDB4ZjNiOTcxNDhMLCAweDg0YmU0MWRlTCwKKyAgMHgxYWRhZDQ3ZEwsIDB4NmRkZGU0ZWJMLCAweGY0ZDRiNTUxTCwgMHg4M2QzODVjN0wsIDB4MTM2Yzk4NTZMLAorICAweDY0NmJhOGMwTCwgMHhmZDYyZjk3YUwsIDB4OGE2NWM5ZWNMLCAweDE0MDE1YzRmTCwgMHg2MzA2NmNkOUwsCisgIDB4ZmEwZjNkNjNMLCAweDhkMDgwZGY1TCwgMHgzYjZlMjBjOEwsIDB4NGM2OTEwNWVMLCAweGQ1NjA0MWU0TCwKKyAgMHhhMjY3NzE3MkwsIDB4M2MwM2U0ZDFMLCAweDRiMDRkNDQ3TCwgMHhkMjBkODVmZEwsIDB4YTUwYWI1NmJMLAorICAweDM1YjVhOGZhTCwgMHg0MmIyOTg2Y0wsIDB4ZGJiYmM5ZDZMLCAweGFjYmNmOTQwTCwgMHgzMmQ4NmNlM0wsCisgIDB4NDVkZjVjNzVMLCAweGRjZDYwZGNmTCwgMHhhYmQxM2Q1OUwsIDB4MjZkOTMwYWNMLCAweDUxZGUwMDNhTCwKKyAgMHhjOGQ3NTE4MEwsIDB4YmZkMDYxMTZMLCAweDIxYjRmNGI1TCwgMHg1NmIzYzQyM0wsIDB4Y2ZiYTk1OTlMLAorICAweGI4YmRhNTBmTCwgMHgyODAyYjg5ZUwsIDB4NWYwNTg4MDhMLCAweGM2MGNkOWIyTCwgMHhiMTBiZTkyNEwsCisgIDB4MmY2ZjdjODdMLCAweDU4Njg0YzExTCwgMHhjMTYxMWRhYkwsIDB4YjY2NjJkM2RMLCAweDc2ZGM0MTkwTCwKKyAgMHgwMWRiNzEwNkwsIDB4OThkMjIwYmNMLCAweGVmZDUxMDJhTCwgMHg3MWIxODU4OUwsIDB4MDZiNmI1MWZMLAorICAweDlmYmZlNGE1TCwgMHhlOGI4ZDQzM0wsIDB4NzgwN2M5YTJMLCAweDBmMDBmOTM0TCwgMHg5NjA5YTg4ZUwsCisgIDB4ZTEwZTk4MThMLCAweDdmNmEwZGJiTCwgMHgwODZkM2QyZEwsIDB4OTE2NDZjOTdMLCAweGU2NjM1YzAxTCwKKyAgMHg2YjZiNTFmNEwsIDB4MWM2YzYxNjJMLCAweDg1NjUzMGQ4TCwgMHhmMjYyMDA0ZUwsIDB4NmMwNjk1ZWRMLAorICAweDFiMDFhNTdiTCwgMHg4MjA4ZjRjMUwsIDB4ZjUwZmM0NTdMLCAweDY1YjBkOWM2TCwgMHgxMmI3ZTk1MEwsCisgIDB4OGJiZWI4ZWFMLCAweGZjYjk4ODdjTCwgMHg2MmRkMWRkZkwsIDB4MTVkYTJkNDlMLCAweDhjZDM3Y2YzTCwKKyAgMHhmYmQ0NGM2NUwsIDB4NGRiMjYxNThMLCAweDNhYjU1MWNlTCwgMHhhM2JjMDA3NEwsIDB4ZDRiYjMwZTJMLAorICAweDRhZGZhNTQxTCwgMHgzZGQ4OTVkN0wsIDB4YTRkMWM0NmRMLCAweGQzZDZmNGZiTCwgMHg0MzY5ZTk2YUwsCisgIDB4MzQ2ZWQ5ZmNMLCAweGFkNjc4ODQ2TCwgMHhkYTYwYjhkMEwsIDB4NDQwNDJkNzNMLCAweDMzMDMxZGU1TCwKKyAgMHhhYTBhNGM1ZkwsIDB4ZGQwZDdjYzlMLCAweDUwMDU3MTNjTCwgMHgyNzAyNDFhYUwsIDB4YmUwYjEwMTBMLAorICAweGM5MGMyMDg2TCwgMHg1NzY4YjUyNUwsIDB4MjA2Zjg1YjNMLCAweGI5NjZkNDA5TCwgMHhjZTYxZTQ5ZkwsCisgIDB4NWVkZWY5MGVMLCAweDI5ZDljOTk4TCwgMHhiMGQwOTgyMkwsIDB4YzdkN2E4YjRMLCAweDU5YjMzZDE3TCwKKyAgMHgyZWI0MGQ4MUwsIDB4YjdiZDVjM2JMLCAweGMwYmE2Y2FkTCwgMHhlZGI4ODMyMEwsIDB4OWFiZmIzYjZMLAorICAweDAzYjZlMjBjTCwgMHg3NGIxZDI5YUwsIDB4ZWFkNTQ3MzlMLCAweDlkZDI3N2FmTCwgMHgwNGRiMjYxNUwsCisgIDB4NzNkYzE2ODNMLCAweGUzNjMwYjEyTCwgMHg5NDY0M2I4NEwsIDB4MGQ2ZDZhM2VMLCAweDdhNmE1YWE4TCwKKyAgMHhlNDBlY2YwYkwsIDB4OTMwOWZmOWRMLCAweDBhMDBhZTI3TCwgMHg3ZDA3OWViMUwsIDB4ZjAwZjkzNDRMLAorICAweDg3MDhhM2QyTCwgMHgxZTAxZjI2OEwsIDB4NjkwNmMyZmVMLCAweGY3NjI1NzVkTCwgMHg4MDY1NjdjYkwsCisgIDB4MTk2YzM2NzFMLCAweDZlNmIwNmU3TCwgMHhmZWQ0MWI3NkwsIDB4ODlkMzJiZTBMLCAweDEwZGE3YTVhTCwKKyAgMHg2N2RkNGFjY0wsIDB4ZjliOWRmNmZMLCAweDhlYmVlZmY5TCwgMHgxN2I3YmU0M0wsIDB4NjBiMDhlZDVMLAorICAweGQ2ZDZhM2U4TCwgMHhhMWQxOTM3ZUwsIDB4MzhkOGMyYzRMLCAweDRmZGZmMjUyTCwgMHhkMWJiNjdmMUwsCisgIDB4YTZiYzU3NjdMLCAweDNmYjUwNmRkTCwgMHg0OGIyMzY0YkwsIDB4ZDgwZDJiZGFMLCAweGFmMGExYjRjTCwKKyAgMHgzNjAzNGFmNkwsIDB4NDEwNDdhNjBMLCAweGRmNjBlZmMzTCwgMHhhODY3ZGY1NUwsIDB4MzE2ZThlZWZMLAorICAweDQ2NjliZTc5TCwgMHhjYjYxYjM4Y0wsIDB4YmM2NjgzMWFMLCAweDI1NmZkMmEwTCwgMHg1MjY4ZTIzNkwsCisgIDB4Y2MwYzc3OTVMLCAweGJiMGI0NzAzTCwgMHgyMjAyMTZiOUwsIDB4NTUwNTI2MmZMLCAweGM1YmEzYmJlTCwKKyAgMHhiMmJkMGIyOEwsIDB4MmJiNDVhOTJMLCAweDVjYjM2YTA0TCwgMHhjMmQ3ZmZhN0wsIDB4YjVkMGNmMzFMLAorICAweDJjZDk5ZThiTCwgMHg1YmRlYWUxZEwsIDB4OWI2NGMyYjBMLCAweGVjNjNmMjI2TCwgMHg3NTZhYTM5Y0wsCisgIDB4MDI2ZDkzMGFMLCAweDljMDkwNmE5TCwgMHhlYjBlMzYzZkwsIDB4NzIwNzY3ODVMLCAweDA1MDA1NzEzTCwKKyAgMHg5NWJmNGE4MkwsIDB4ZTJiODdhMTRMLCAweDdiYjEyYmFlTCwgMHgwY2I2MWIzOEwsIDB4OTJkMjhlOWJMLAorICAweGU1ZDViZTBkTCwgMHg3Y2RjZWZiN0wsIDB4MGJkYmRmMjFMLCAweDg2ZDNkMmQ0TCwgMHhmMWQ0ZTI0MkwsCisgIDB4NjhkZGIzZjhMLCAweDFmZGE4MzZlTCwgMHg4MWJlMTZjZEwsIDB4ZjZiOTI2NWJMLCAweDZmYjA3N2UxTCwKKyAgMHgxOGI3NDc3N0wsIDB4ODgwODVhZTZMLCAweGZmMGY2YTcwTCwgMHg2NjA2M2JjYUwsIDB4MTEwMTBiNWNMLAorICAweDhmNjU5ZWZmTCwgMHhmODYyYWU2OUwsIDB4NjE2YmZmZDNMLCAweDE2NmNjZjQ1TCwgMHhhMDBhZTI3OEwsCisgIDB4ZDcwZGQyZWVMLCAweDRlMDQ4MzU0TCwgMHgzOTAzYjNjMkwsIDB4YTc2NzI2NjFMLCAweGQwNjAxNmY3TCwKKyAgMHg0OTY5NDc0ZEwsIDB4M2U2ZTc3ZGJMLCAweGFlZDE2YTRhTCwgMHhkOWQ2NWFkY0wsIDB4NDBkZjBiNjZMLAorICAweDM3ZDgzYmYwTCwgMHhhOWJjYWU1M0wsIDB4ZGViYjllYzVMLCAweDQ3YjJjZjdmTCwgMHgzMGI1ZmZlOUwsCisgIDB4YmRiZGYyMWNMLCAweGNhYmFjMjhhTCwgMHg1M2IzOTMzMEwsIDB4MjRiNGEzYTZMLCAweGJhZDAzNjA1TCwKKyAgMHhjZGQ3MDY5M0wsIDB4NTRkZTU3MjlMLCAweDIzZDk2N2JmTCwgMHhiMzY2N2EyZUwsIDB4YzQ2MTRhYjhMLAorICAweDVkNjgxYjAyTCwgMHgyYTZmMmI5NEwsIDB4YjQwYmJlMzdMLCAweGMzMGM4ZWExTCwgMHg1YTA1ZGYxYkwsCisgIDB4MmQwMmVmOGRMCit9OworCisKK0xaT19QVUJMSUMoY29uc3QgbHpvX3VpbnQzMnApCitsem9fZ2V0X2NyYzMyX3RhYmxlKHZvaWQpCit7CisgICAgcmV0dXJuIGx6b19jcmMzMl90YWJsZTsKK30KKworCisjaWYgMQorI2RlZmluZSBMWk9fRE8xKGJ1ZixpKSBcCisgICAgY3JjID0gdGFibGVbKChpbnQpY3JjIF4gYnVmW2ldKSAmIDB4ZmZdIF4gKGNyYyA+PiA4KQorI2Vsc2UKKyNkZWZpbmUgTFpPX0RPMShidWYsaSkgXAorICAgIGNyYyA9IHRhYmxlWyh1bnNpZ25lZCBjaGFyKSgodW5zaWduZWQgY2hhciljcmMgXiBidWZbaV0pXSBeIChjcmMgPj4gOCkKKyNlbmRpZgorI2RlZmluZSBMWk9fRE8yKGJ1ZixpKSAgTFpPX0RPMShidWYsaSk7IExaT19ETzEoYnVmLGkrMSk7CisjZGVmaW5lIExaT19ETzQoYnVmLGkpICBMWk9fRE8yKGJ1ZixpKTsgTFpPX0RPMihidWYsaSsyKTsKKyNkZWZpbmUgTFpPX0RPOChidWYsaSkgIExaT19ETzQoYnVmLGkpOyBMWk9fRE80KGJ1ZixpKzQpOworI2RlZmluZSBMWk9fRE8xNihidWYsaSkgTFpPX0RPOChidWYsaSk7IExaT19ETzgoYnVmLGkrOCk7CisKKworTFpPX1BVQkxJQyhsem9fdWludDMyKQorbHpvX2NyYzMyKGx6b191aW50MzIgYywgY29uc3QgbHpvX2J5dGVwIGJ1ZiwgbHpvX3VpbnQgbGVuKQoreworICAgIGx6b191aW50MzIgY3JjOworI3VuZGVmIHRhYmxlCisjaWYgMQorIyAgZGVmaW5lIHRhYmxlIGx6b19jcmMzMl90YWJsZQorI2Vsc2UKKyAgIGNvbnN0IGx6b191aW50MzIgKiB0YWJsZSA9IGx6b19jcmMzMl90YWJsZTsKKyNlbmRpZgorCisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIGNyYyA9IChjICYgTFpPX1VJTlQzMl9DKDB4ZmZmZmZmZmYpKSBeIExaT19VSU5UMzJfQygweGZmZmZmZmZmKTsKKyAgICBpZiAobGVuID49IDE2KSBkbworICAgIHsKKyAgICAgICAgTFpPX0RPMTYoYnVmLDApOworICAgICAgICBidWYgKz0gMTY7CisgICAgICAgIGxlbiAtPSAxNjsKKyAgICB9IHdoaWxlIChsZW4gPj0gMTYpOworICAgIGlmIChsZW4gIT0gMCkgZG8KKyAgICB7CisgICAgICAgIExaT19ETzEoYnVmLDApOworICAgICAgICBidWYgKz0gMTsKKyAgICAgICAgbGVuIC09IDE7CisgICAgfSB3aGlsZSAobGVuID4gMCk7CisKKyAgICByZXR1cm4gY3JjIF4gTFpPX1VJTlQzMl9DKDB4ZmZmZmZmZmYpOworI3VuZGVmIHRhYmxlCit9CisKKyN1bmRlZiBMWk9fRE8xCisjdW5kZWYgTFpPX0RPMgorI3VuZGVmIExaT19ETzQKKyN1bmRlZiBMWk9fRE84CisjdW5kZWYgTFpPX0RPMTYKKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fZGljdC5oIGIvbHpvLTIuMDMvc3JjL2x6b19kaWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzYTFlMgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem9fZGljdC5oCkBAIC0wLDAgKzEsMzE2IEBACisvKiBsem9fZGljdC5oIC0tIGRpY3Rpb25hcnkgZGVmaW5pdGlvbnMgZm9yIHRoZSB0aGUgTFpPIGxpYnJhcnkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyogV0FSTklORzogdGhpcyBmaWxlIHNob3VsZCAqbm90KiBiZSB1c2VkIGJ5IGFwcGxpY2F0aW9ucy4gSXQgaXMKKyAgIHBhcnQgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBsaWJyYXJ5IGFuZCBpcyBzdWJqZWN0CisgICB0byBjaGFuZ2UuCisgKi8KKworCisjaWZuZGVmIF9fTFpPX0RJQ1RfSAorI2RlZmluZSBfX0xaT19ESUNUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBkaWN0aW9uYXJ5IHNpemUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogZGljdGlvbmFyeSBuZWVkZWQgZm9yIGNvbXByZXNzaW9uICovCisjaWYgIWRlZmluZWQoRF9CSVRTKSAmJiBkZWZpbmVkKERCSVRTKQorIyAgZGVmaW5lIERfQklUUyAgICAgICAgREJJVFMKKyNlbmRpZgorI2lmICFkZWZpbmVkKERfQklUUykKKyMgIGVycm9yICJEX0JJVFMgaXMgbm90IGRlZmluZWQiCisjZW5kaWYKKyNpZiAoRF9CSVRTIDwgMTYpCisjICBkZWZpbmUgRF9TSVpFICAgICAgICBMWk9fU0laRShEX0JJVFMpCisjICBkZWZpbmUgRF9NQVNLICAgICAgICBMWk9fTUFTSyhEX0JJVFMpCisjZWxzZQorIyAgZGVmaW5lIERfU0laRSAgICAgICAgTFpPX1VTSVpFKERfQklUUykKKyMgIGRlZmluZSBEX01BU0sgICAgICAgIExaT19VTUFTSyhEX0JJVFMpCisjZW5kaWYKKyNkZWZpbmUgRF9ISUdIICAgICAgICAgICgoRF9NQVNLID4+IDEpICsgMSkKKworCisvKiBkaWN0aW9uYXJ5IGRlcHRoICovCisjaWYgIWRlZmluZWQoRERfQklUUykKKyMgIGRlZmluZSBERF9CSVRTICAgICAgIDAKKyNlbmRpZgorI2RlZmluZSBERF9TSVpFICAgICAgICAgTFpPX1NJWkUoRERfQklUUykKKyNkZWZpbmUgRERfTUFTSyAgICAgICAgIExaT19NQVNLKEREX0JJVFMpCisKKy8qIGRpY3Rpb25hcnkgbGVuZ3RoICovCisjaWYgIWRlZmluZWQoRExfQklUUykKKyMgIGRlZmluZSBETF9CSVRTICAgICAgIChEX0JJVFMgLSBERF9CSVRTKQorI2VuZGlmCisjaWYgKERMX0JJVFMgPCAxNikKKyMgIGRlZmluZSBETF9TSVpFICAgICAgIExaT19TSVpFKERMX0JJVFMpCisjICBkZWZpbmUgRExfTUFTSyAgICAgICBMWk9fTUFTSyhETF9CSVRTKQorI2Vsc2UKKyMgIGRlZmluZSBETF9TSVpFICAgICAgIExaT19VU0laRShETF9CSVRTKQorIyAgZGVmaW5lIERMX01BU0sgICAgICAgTFpPX1VNQVNLKERMX0JJVFMpCisjZW5kaWYKKworCisjaWYgKERfQklUUyAhPSBETF9CSVRTICsgRERfQklUUykKKyMgIGVycm9yICJEX0JJVFMgZG9lcyBub3QgbWF0Y2giCisjZW5kaWYKKyNpZiAoRF9CSVRTIDwgOCB8fCBEX0JJVFMgPiAxOCkKKyMgIGVycm9yICJpbnZhbGlkIERfQklUUyIKKyNlbmRpZgorI2lmIChETF9CSVRTIDwgOCB8fCBETF9CSVRTID4gMjApCisjICBlcnJvciAiaW52YWxpZCBETF9CSVRTIgorI2VuZGlmCisjaWYgKEREX0JJVFMgPCAwIHx8IEREX0JJVFMgPiA2KQorIyAgZXJyb3IgImludmFsaWQgRERfQklUUyIKKyNlbmRpZgorCisKKyNpZiAhZGVmaW5lZChETF9NSU5fTEVOKQorIyAgZGVmaW5lIERMX01JTl9MRU4gICAgMworI2VuZGlmCisjaWYgIWRlZmluZWQoRExfU0hJRlQpCisjICBkZWZpbmUgRExfU0hJRlQgICAgICAoKERMX0JJVFMgKyAoRExfTUlOX0xFTiAtIDEpKSAvIERMX01JTl9MRU4pCisjZW5kaWYKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZGljdGlvbmFyeSBhY2Nlc3MKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2RlZmluZSBMWk9fSEFTSF9HWklQICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgTFpPX0hBU0hfR1pJUF9JTkNSRU1FTlRBTCAgICAgICAyCisjZGVmaW5lIExaT19IQVNIX0xaT19JTkNSRU1FTlRBTF9BICAgICAgMworI2RlZmluZSBMWk9fSEFTSF9MWk9fSU5DUkVNRU5UQUxfQiAgICAgIDQKKworI2lmICFkZWZpbmVkKExaT19IQVNIKQorIyAgZXJyb3IgImNob29zZSBhIGhhc2hpbmcgc3RyYXRlZ3kiCisjZW5kaWYKKworI3VuZGVmIERNCisjdW5kZWYgRFgKKworI2lmIChETF9NSU5fTEVOID09IDMpCisjICBkZWZpbmUgX0RWMl9BKHAsc2hpZnQxLHNoaWZ0MikgXAorICAgICAgICAoKCgoIChsem9feGludCkoKHApWzBdKSA8PCBzaGlmdDEpIF4gKHApWzFdKSA8PCBzaGlmdDIpIF4gKHApWzJdKQorIyAgZGVmaW5lIF9EVjJfQihwLHNoaWZ0MSxzaGlmdDIpIFwKKyAgICAgICAgKCgoKCAobHpvX3hpbnQpKChwKVsyXSkgPDwgc2hpZnQxKSBeIChwKVsxXSkgPDwgc2hpZnQyKSBeIChwKVswXSkKKyMgIGRlZmluZSBfRFYzX0IocCxzaGlmdDEsc2hpZnQyLHNoaWZ0MykgXAorICAgICAgICAoKF9EVjJfQigocCkrMSxzaGlmdDEsc2hpZnQyKSA8PCAoc2hpZnQzKSkgXiAocClbMF0pCisjZWxpZiAoRExfTUlOX0xFTiA9PSAyKQorIyAgZGVmaW5lIF9EVjJfQShwLHNoaWZ0MSxzaGlmdDIpIFwKKyAgICAgICAgKCggKGx6b194aW50KShwWzBdKSA8PCBzaGlmdDEpIF4gcFsxXSkKKyMgIGRlZmluZSBfRFYyX0IocCxzaGlmdDEsc2hpZnQyKSBcCisgICAgICAgICgoIChsem9feGludCkocFsxXSkgPDwgc2hpZnQxKSBeIHBbMl0pCisjZWxzZQorIyAgZXJyb3IgImludmFsaWQgRExfTUlOX0xFTiIKKyNlbmRpZgorI2RlZmluZSBfRFZfQShwLHNoaWZ0KSAgICAgIF9EVjJfQShwLHNoaWZ0LHNoaWZ0KQorI2RlZmluZSBfRFZfQihwLHNoaWZ0KSAgICAgIF9EVjJfQihwLHNoaWZ0LHNoaWZ0KQorI2RlZmluZSBEQTIocCxzMSxzMikgXAorICAgICAgICAoKCgoKGx6b194aW50KSgocClbMl0pIDw8IChzMikpICsgKHApWzFdKSA8PCAoczEpKSArIChwKVswXSkKKyNkZWZpbmUgRFMyKHAsczEsczIpIFwKKyAgICAgICAgKCgoKChsem9feGludCkoKHApWzJdKSA8PCAoczIpKSAtIChwKVsxXSkgPDwgKHMxKSkgLSAocClbMF0pCisjZGVmaW5lIERYMihwLHMxLHMyKSBcCisgICAgICAgICgoKCgobHpvX3hpbnQpKChwKVsyXSkgPDwgKHMyKSkgXiAocClbMV0pIDw8IChzMSkpIF4gKHApWzBdKQorI2RlZmluZSBEQTMocCxzMSxzMixzMykgKChEQTIoKHApKzEsczIsczMpIDw8IChzMSkpICsgKHApWzBdKQorI2RlZmluZSBEUzMocCxzMSxzMixzMykgKChEUzIoKHApKzEsczIsczMpIDw8IChzMSkpIC0gKHApWzBdKQorI2RlZmluZSBEWDMocCxzMSxzMixzMykgKChEWDIoKHApKzEsczIsczMpIDw8IChzMSkpIF4gKHApWzBdKQorI2RlZmluZSBETVModixzKSAgICAgICAgKChsem9fdWludCkgKCgodikgJiAoRF9NQVNLID4+IChzKSkpIDw8IChzKSkpCisjZGVmaW5lIERNKHYpICAgICAgICAgICBETVModiwwKQorCisKKyNpZiAoTFpPX0hBU0ggPT0gTFpPX0hBU0hfR1pJUCkKKyAgIC8qIGhhc2ggZnVuY3Rpb24gbGlrZSBpbiBnemlwL3psaWIgKGRlZmxhdGUpICovCisjICBkZWZpbmUgX0RJTkRFWChkdixwKSAgICAgKF9EVl9BKChwKSxETF9TSElGVCkpCisKKyNlbGlmIChMWk9fSEFTSCA9PSBMWk9fSEFTSF9HWklQX0lOQ1JFTUVOVEFMKQorICAgLyogaW5jcmVtZW50YWwgaGFzaCBsaWtlIGluIGd6aXAvemxpYiAoZGVmbGF0ZSkgKi8KKyMgIGRlZmluZSBfX0xaT19IQVNIX0lOQ1JFTUVOVEFMCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgZHYgPSBfRFZfQSgocCksRExfU0hJRlQpCisjICBkZWZpbmUgRFZBTF9ORVhUKGR2LHApICAgZHYgPSAoKChkdikgPDwgRExfU0hJRlQpIF4gcFsyXSkKKyMgIGRlZmluZSBfRElOREVYKGR2LHApICAgICAoZHYpCisjICBkZWZpbmUgRFZBTF9MT09LQUhFQUQgICAgRExfTUlOX0xFTgorCisjZWxpZiAoTFpPX0hBU0ggPT0gTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0EpCisgICAvKiBpbmNyZW1lbnRhbCBMWk8gaGFzaCB2ZXJzaW9uIEEgKi8KKyMgIGRlZmluZSBfX0xaT19IQVNIX0lOQ1JFTUVOVEFMCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgZHYgPSBfRFZfQSgocCksNSkKKyMgIGRlZmluZSBEVkFMX05FWFQoZHYscCkgXAorICAgICAgICAgICAgICAgIGR2IF49IChsem9feGludCkocFstMV0pIDw8ICgyKjUpOyBkdiA9ICgoKGR2KSA8PCA1KSBeIHBbMl0pCisjICBkZWZpbmUgX0RJTkRFWChkdixwKSAgICAgKChETVVMKDB4OWY1ZixkdikpID4+IDUpCisjICBkZWZpbmUgRFZBTF9MT09LQUhFQUQgICAgRExfTUlOX0xFTgorCisjZWxpZiAoTFpPX0hBU0ggPT0gTFpPX0hBU0hfTFpPX0lOQ1JFTUVOVEFMX0IpCisgICAvKiBpbmNyZW1lbnRhbCBMWk8gaGFzaCB2ZXJzaW9uIEIgKi8KKyMgIGRlZmluZSBfX0xaT19IQVNIX0lOQ1JFTUVOVEFMCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgZHYgPSBfRFZfQigocCksNSkKKyMgIGRlZmluZSBEVkFMX05FWFQoZHYscCkgXAorICAgICAgICAgICAgICAgIGR2IF49IHBbLTFdOyBkdiA9ICgoKGR2KSA+PiA1KSBeICgobHpvX3hpbnQpKHBbMl0pIDw8ICgyKjUpKSkKKyMgIGRlZmluZSBfRElOREVYKGR2LHApICAgICAoKERNVUwoMHg5ZjVmLGR2KSkgPj4gNSkKKyMgIGRlZmluZSBEVkFMX0xPT0tBSEVBRCAgICBETF9NSU5fTEVOCisKKyNlbHNlCisjICBlcnJvciAiY2hvb3NlIGEgaGFzaGluZyBzdHJhdGVneSIKKyNlbmRpZgorCisKKyNpZm5kZWYgRElOREVYCisjZGVmaW5lIERJTkRFWChkdixwKSAgICAgICAgKChsem9fdWludCkoKF9ESU5ERVgoZHYscCkpICYgRExfTUFTSykgPDwgRERfQklUUykKKyNlbmRpZgorI2lmICFkZWZpbmVkKERJTkRFWDEpICYmIGRlZmluZWQoRF9JTkRFWDEpCisjZGVmaW5lIERJTkRFWDEgICAgICAgICAgICAgRF9JTkRFWDEKKyNlbmRpZgorI2lmICFkZWZpbmVkKERJTkRFWDIpICYmIGRlZmluZWQoRF9JTkRFWDIpCisjZGVmaW5lIERJTkRFWDIgICAgICAgICAgICAgRF9JTkRFWDIKKyNlbmRpZgorCisKKworI2lmICFkZWZpbmVkKF9fTFpPX0hBU0hfSU5DUkVNRU5UQUwpCisjICBkZWZpbmUgRFZBTF9GSVJTVChkdixwKSAgKCh2b2lkKSAwKQorIyAgZGVmaW5lIERWQUxfTkVYVChkdixwKSAgICgodm9pZCkgMCkKKyMgIGRlZmluZSBEVkFMX0xPT0tBSEVBRCAgICAwCisjZW5kaWYKKworCisjaWYgIWRlZmluZWQoRFZBTF9BU1NFUlQpCisjaWYgZGVmaW5lZChfX0xaT19IQVNIX0lOQ1JFTUVOVEFMKSAmJiAhZGVmaW5lZChOREVCVUcpCitzdGF0aWMgdm9pZCBEVkFMX0FTU0VSVChsem9feGludCBkdiwgY29uc3QgbHpvX2J5dGVwIHApCit7CisgICAgbHpvX3hpbnQgZGY7CisgICAgRFZBTF9GSVJTVChkZiwocCkpOworICAgIGFzc2VydChESU5ERVgoZHYscCkgPT0gRElOREVYKGRmLHApKTsKK30KKyNlbHNlCisjICBkZWZpbmUgRFZBTF9BU1NFUlQoZHYscCkgKCh2b2lkKSAwKQorI2VuZGlmCisjZW5kaWYKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gZGljdGlvbmFyeSB1cGRhdGluZworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgZGVmaW5lZChMWk9fRElDVF9VU0VfUFRSKQorIyAgZGVmaW5lIERFTlRSWShwLGluKSAgICAgICAgICAgICAgICAgICAgICAgICAgKHApCisjICBkZWZpbmUgR0lOREVYKG1fcG9zLG1fb2ZmLGRpY3QsZGluZGV4LGluKSAgICBtX3BvcyA9IGRpY3RbZGluZGV4XQorI2Vsc2UKKyMgIGRlZmluZSBERU5UUlkocCxpbikgICAgICAgICAgICAgICAgICAgICAgICAgICgobHpvX3VpbnQpICgocCktKGluKSkpCisjICBkZWZpbmUgR0lOREVYKG1fcG9zLG1fb2ZmLGRpY3QsZGluZGV4LGluKSAgICBtX29mZiA9IGRpY3RbZGluZGV4XQorI2VuZGlmCisKKworI2lmIChERF9CSVRTID09IDApCisKKyMgIGRlZmluZSBVUERBVEVfRChkaWN0LGRydW4sZHYscCxpbikgICAgICAgZGljdFsgRElOREVYKGR2LHApIF0gPSBERU5UUlkocCxpbikKKyMgIGRlZmluZSBVUERBVEVfSShkaWN0LGRydW4saW5kZXgscCxpbikgICAgZGljdFtpbmRleF0gPSBERU5UUlkocCxpbikKKyMgIGRlZmluZSBVUERBVEVfUChwdHIsZHJ1bixwLGluKSAgICAgICAgICAgKHB0cilbMF0gPSBERU5UUlkocCxpbikKKworI2Vsc2UKKworIyAgZGVmaW5lIFVQREFURV9EKGRpY3QsZHJ1bixkdixwLGluKSAgIFwKKyAgICAgICAgZGljdFsgRElOREVYKGR2LHApICsgZHJ1bisrIF0gPSBERU5UUlkocCxpbik7IGRydW4gJj0gRERfTUFTSworIyAgZGVmaW5lIFVQREFURV9JKGRpY3QsZHJ1bixpbmRleCxwLGluKSAgICBcCisgICAgICAgIGRpY3RbIChpbmRleCkgKyBkcnVuKysgXSA9IERFTlRSWShwLGluKTsgZHJ1biAmPSBERF9NQVNLCisjICBkZWZpbmUgVVBEQVRFX1AocHRyLGRydW4scCxpbikgICBcCisgICAgICAgIChwdHIpIFsgZHJ1bisrIF0gPSBERU5UUlkocCxpbik7IGRydW4gJj0gRERfTUFTSworCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIHRlc3QgZm9yIGEgbWF0Y2gKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX0RJQ1RfVVNFX1BUUikKKworLyogbV9wb3MgaXMgZWl0aGVyIE5VTEwgb3IgYSB2YWxpZCBwb2ludGVyICovCisjZGVmaW5lIExaT19DSEVDS19NUE9TX0RFVChtX3BvcyxtX29mZixpbixpcCxtYXhfb2Zmc2V0KSBcCisgICAgICAgIChtX3BvcyA9PSBOVUxMIHx8IChtX29mZiA9IHBkKGlwLCBtX3BvcykpID4gbWF4X29mZnNldCkKKworLyogbV9wb3MgbWF5IHBvaW50IGFueXdoZXJlLi4uICovCisjZGVmaW5lIExaT19DSEVDS19NUE9TX05PTl9ERVQobV9wb3MsbV9vZmYsaW4saXAsbWF4X29mZnNldCkgXAorICAgIChCT1VORFNfQ0hFQ0tJTkdfT0ZGX0lOX0VYUFIoKCBcCisgICAgICAgIG1fcG9zID0gaXAgLSAobHpvX3VpbnQpIFBUUl9ESUZGKGlwLG1fcG9zKSwgXAorICAgICAgICBQVFJfTFQobV9wb3MsaW4pIHx8IFwKKyAgICAgICAgKG1fb2ZmID0gKGx6b191aW50KSBQVFJfRElGRihpcCxtX3BvcykpIDw9IDAgfHwgXAorICAgICAgICAgbV9vZmYgPiBtYXhfb2Zmc2V0ICkpKQorCisjZWxzZQorCisjZGVmaW5lIExaT19DSEVDS19NUE9TX0RFVChtX3BvcyxtX29mZixpbixpcCxtYXhfb2Zmc2V0KSBcCisgICAgICAgIChtX29mZiA9PSAwIHx8IFwKKyAgICAgICAgICgobV9vZmYgPSBwZChpcCwgaW4pIC0gbV9vZmYpID4gbWF4X29mZnNldCkgfHwgXAorICAgICAgICAgKG1fcG9zID0gKGlwKSAtIChtX29mZiksIDApICkKKworI2RlZmluZSBMWk9fQ0hFQ0tfTVBPU19OT05fREVUKG1fcG9zLG1fb2ZmLGluLGlwLG1heF9vZmZzZXQpIFwKKyAgICAgICAgKHBkKGlwLCBpbikgPD0gbV9vZmYgfHwgXAorICAgICAgICAgKChtX29mZiA9IHBkKGlwLCBpbikgLSBtX29mZikgPiBtYXhfb2Zmc2V0KSB8fCBcCisgICAgICAgICAobV9wb3MgPSAoaXApIC0gKG1fb2ZmKSwgMCkgKQorCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChMWk9fREVURVJNSU5JU1RJQykKKyMgIGRlZmluZSBMWk9fQ0hFQ0tfTVBPUyAgICBMWk9fQ0hFQ0tfTVBPU19ERVQKKyNlbHNlCisjICBkZWZpbmUgTFpPX0NIRUNLX01QT1MgICAgTFpPX0NIRUNLX01QT1NfTk9OX0RFVAorI2VuZGlmCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30gLyogZXh0ZXJuICJDIiAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvX2RsbC5jaCBiL2x6by0yLjAzL3NyYy9sem9fZGxsLmNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NmNiMjcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvX2RsbC5jaApAQCAtMCwwICsxLDY0IEBACisvKiBsem9fZGxsLmNoIC0tIERMTCBpbml0aWFsaXphdGlvbiBvZiB0aGUgTFpPIGxpYnJhcnkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBXaW5kb3dzIDE2IGJpdCArIFdhdGNvbSBDICsgRExMCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZiAoTFpPX09TX1dJTjE2ICYmIExaT19DQ19XQVRDT01DKSAmJiBkZWZpbmVkKF9fU1dfQkQpCisKKy8qIGRvbid0IHB1bGwgaW4gPHdpbmRvd3MuaD4gLSB3ZSBkb24ndCBuZWVkIGl0ICovCisjaWYgMAorQk9PTCBGQVIgUEFTQ0FMIExpYk1haW4gKCBIQU5ETEUgaEluc3RhbmNlLCBXT1JEIHdEYXRhU2VnbWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgV09SRCB3SGVhcFNpemUsIExQU1RSIGxwc3pDbWRMaW5lICkKKyNlbHNlCitpbnQgX19mYXIgX19wYXNjYWwgTGliTWFpbiAoIGludCBhLCBzaG9ydCBiLCBzaG9ydCBjLCBsb25nIGQgKQorI2VuZGlmCit7CisgICAgTFpPX1VOVVNFRChhKTsgTFpPX1VOVVNFRChiKTsgTFpPX1VOVVNFRChjKTsgTFpPX1VOVVNFRChkKTsKKyAgICByZXR1cm4gMTsKK30KKworI2VuZGlmCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvX2luaXQuYyBiL2x6by0yLjAzL3NyYy9sem9faW5pdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5Nzc4OTEKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvX2luaXQuYwpAQCAtMCwwICsxLDE3NiBAQAorLyogbHpvX2luaXQuYyAtLSBpbml0aWFsaXphdGlvbiBvZiB0aGUgTFpPIGxpYnJhcnkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBSdW50aW1lIGNoZWNrIG9mIHRoZSBhc3N1bXB0aW9ucyBhYm91dCB0aGUgc2l6ZSBvZiBidWlsdGluIHR5cGVzLAorLy8gbWVtb3J5IG1vZGVsLCBieXRlIG9yZGVyIGFuZCBvdGhlciBsb3ctbGV2ZWwgY29uc3RydWN0cy4KKy8vCisvLyBXZSBhcmUgcmVhbGx5IHBhcmFub2lkIGhlcmUgLSBMWk8gc2hvdWxkIGVpdGhlciBmYWlsCisvLyBhdCBzdGFydHVwIG9yIG5vdCBhdCBhbGwuCisvLworLy8gQmVjYXVzZSBvZiBpbmxpbmluZyBtdWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBldmFsdWF0ZXMgdG8gbm90aGluZy4KKy8vCisvLyBBbmQgd2hpbGUgbWFueSBvZiB0aGUgdGVzdHMgc2VlbSBoaWdobHkgb2J2aW91cyBhbmQgcmVkdW5kYW50IHRoZXkgYXJlCisvLyBoZXJlIHRvIGNhdGNoIGNvbXBpbGVyL29wdGltaXplciBidWdzLiBZZXMsIHRoZXNlIGRvIGV4aXN0LgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWYgIWRlZmluZWQoX19MWk9fSU5fTUlOSUxaTykKKworI2RlZmluZSBBQ0NfV0FOVF9BQ0NfQ0hLX0NIIDEKKyN1bmRlZiBBQ0NDSEtfQVNTRVJUCisjaW5jbHVkZSAibWluaWFjYy5oIgorCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChsem9faW50KQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChsem9fdWludCkKKworICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QobHpvX2ludDMyKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChsem9fdWludDMyKQorICAgIEFDQ0NIS19BU1NFUlQoKExaT19VSU5UMzJfQygxKSA8PCAoaW50KSg4KnNpemVvZihMWk9fVUlOVDMyX0MoMSkpLTEpKSA+IDApCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobHpvX3VpbnQzMikgPj0gNCkKKworI2lmICFkZWZpbmVkKF9fTFpPX1VJTlRQVFJfVF9JU19QT0lOVEVSKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChsem9fdWludHB0cl90KQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobHpvX3VpbnRwdHJfdCkgPj0gc2l6ZW9mKGx6b192b2lkcCkpCisKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QobHpvX3hpbnQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobHpvX3hpbnQpID49IHNpemVvZihsem9fdWludDMyKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsem9feGludCkgPj0gc2l6ZW9mKGx6b191aW50KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsem9feGludCkgPT0gc2l6ZW9mKGx6b191aW50MzIpIHx8IHNpemVvZihsem9feGludCkgPT0gc2l6ZW9mKGx6b191aW50KSkKKworI2VuZGlmCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyhpbnQpCitfbHpvX2NvbmZpZ19jaGVjayh2b2lkKQoreworICAgIGx6b19ib29sIHIgPSAxOworICAgIHVuaW9uIHsgdW5zaWduZWQgY2hhciBjWzIqc2l6ZW9mKGx6b194aW50KV07IGx6b194aW50IGxbMl07IH0gdTsKKyAgICBsem9fdWludHB0cl90IHA7CisKKyNpZiAhZGVmaW5lZChMWk9fQ0ZHX05PX0NPTkZJR19DSEVDSykKKyNpZiBkZWZpbmVkKExaT19BQklfQklHX0VORElBTikKKyAgICB1LmxbMF0gPSB1LmxbMV0gPSAwOyB1LmNbc2l6ZW9mKGx6b194aW50KSAtIDFdID0gMTI4OworICAgIHIgJj0gKHUubFswXSA9PSAxMjgpOworI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fQUJJX0xJVFRMRV9FTkRJQU4pCisgICAgdS5sWzBdID0gdS5sWzFdID0gMDsgdS5jWzBdID0gMTI4OworICAgIHIgJj0gKHUubFswXSA9PSAxMjgpOworI2VuZGlmCisjaWYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzIpCisgICAgcCA9IChsem9fdWludHB0cl90KSAoY29uc3QgbHpvX3ZvaWRwKSAmdS5jWzBdOworICAgIHUubFswXSA9IHUubFsxXSA9IDA7CisgICAgciAmPSAoKCogKGNvbnN0IGx6b191c2hvcnRwKSAocCsxKSkgPT0gMCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKExaT19VTkFMSUdORURfT0tfNCkKKyAgICBwID0gKGx6b191aW50cHRyX3QpIChjb25zdCBsem9fdm9pZHApICZ1LmNbMF07CisgICAgdS5sWzBdID0gdS5sWzFdID0gMDsKKyAgICByICY9ICgoKiAoY29uc3QgbHpvX3VpbnQzMnApIChwKzEpKSA9PSAwKTsKKyNlbmRpZgorI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKHUpOyBMWk9fVU5VU0VEKHApOworICAgIHJldHVybiByID09IDEgPyBMWk9fRV9PSyA6IExaT19FX0VSUk9SOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50IF9fbHpvX2luaXRfZG9uZSA9IDA7CisKK0xaT19QVUJMSUMoaW50KQorX19sem9faW5pdF92Mih1bnNpZ25lZCB2LCBpbnQgczEsIGludCBzMiwgaW50IHMzLCBpbnQgczQsIGludCBzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHM2LCBpbnQgczcsIGludCBzOCwgaW50IHM5KQoreworICAgIGludCByOworCisjaWYgZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorI2VsaWYgKExaT19DQ19NU0MgJiYgKChfTVNDX1ZFUikgPCA3MDApKQorI2Vsc2UKKyNkZWZpbmUgQUNDX1dBTlRfQUNDX0NIS19DSCAxCisjdW5kZWYgQUNDQ0hLX0FTU0VSVAorI2RlZmluZSBBQ0NDSEtfQVNTRVJUKGV4cHIpICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVChleHByKQorI2luY2x1ZGUgIm1pbmlhY2MuaCIKKyNlbmRpZgorI3VuZGVmIEFDQ0NIS19BU1NFUlQKKworICAgIF9fbHpvX2luaXRfZG9uZSA9IDE7CisKKyAgICBpZiAodiA9PSAwKQorICAgICAgICByZXR1cm4gTFpPX0VfRVJST1I7CisKKyAgICByID0gKHMxID09IC0xIHx8IHMxID09IChpbnQpIHNpemVvZihzaG9ydCkpICYmCisgICAgICAgIChzMiA9PSAtMSB8fCBzMiA9PSAoaW50KSBzaXplb2YoaW50KSkgJiYKKyAgICAgICAgKHMzID09IC0xIHx8IHMzID09IChpbnQpIHNpemVvZihsb25nKSkgJiYKKyAgICAgICAgKHM0ID09IC0xIHx8IHM0ID09IChpbnQpIHNpemVvZihsem9fdWludDMyKSkgJiYKKyAgICAgICAgKHM1ID09IC0xIHx8IHM1ID09IChpbnQpIHNpemVvZihsem9fdWludCkpICYmCisgICAgICAgIChzNiA9PSAtMSB8fCBzNiA9PSAoaW50KSBsem9fc2l6ZW9mX2RpY3RfdCkgJiYKKyAgICAgICAgKHM3ID09IC0xIHx8IHM3ID09IChpbnQpIHNpemVvZihjaGFyICopKSAmJgorICAgICAgICAoczggPT0gLTEgfHwgczggPT0gKGludCkgc2l6ZW9mKGx6b192b2lkcCkpICYmCisgICAgICAgIChzOSA9PSAtMSB8fCBzOSA9PSAoaW50KSBzaXplb2YobHpvX2NhbGxiYWNrX3QpKTsKKyAgICBpZiAoIXIpCisgICAgICAgIHJldHVybiBMWk9fRV9FUlJPUjsKKworICAgIHIgPSBfbHpvX2NvbmZpZ19jaGVjaygpOworICAgIGlmIChyICE9IExaT19FX09LKQorICAgICAgICByZXR1cm4gcjsKKworICAgIHJldHVybiByOworfQorCisKKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5JTFpPKQorI2luY2x1ZGUgImx6b19kbGwuY2giCisjZW5kaWYKKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fbWNody5jaCBiL2x6by0yLjAzL3NyYy9sem9fbWNody5jaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOGM0ZmVjCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6b19tY2h3LmNoCkBAIC0wLDAgKzEsMjQyIEBACisvKiBsem9fbWNody5jaCAtLSBtYXRjaGluZyBmdW5jdGlvbnMgdXNpbmcgYSB3aW5kb3cKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCBpbml0OworCisgICAgbHpvX3VpbnQgbG9vazsgICAgICAgICAgLyogYnl0ZXMgaW4gbG9va2FoZWFkIGJ1ZmZlciAqLworCisgICAgbHpvX3VpbnQgbV9sZW47CisgICAgbHpvX3VpbnQgbV9vZmY7CisKKyAgICBsem9fdWludCBsYXN0X21fbGVuOworICAgIGx6b191aW50IGxhc3RfbV9vZmY7CisKKyAgICBjb25zdCBsem9fYnl0ZXAgYnA7CisgICAgY29uc3QgbHpvX2J5dGVwIGlwOworICAgIGNvbnN0IGx6b19ieXRlcCBpbjsKKyAgICBjb25zdCBsem9fYnl0ZXAgaW5fZW5kOworICAgIGx6b19ieXRlcCBvdXQ7CisKKyAgICBsem9fY2FsbGJhY2tfcCBjYjsKKworICAgIGx6b191aW50IHRleHRzaXplOyAgICAgIC8qIHRleHQgc2l6ZSBjb3VudGVyICovCisgICAgbHpvX3VpbnQgY29kZXNpemU7ICAgICAgLyogY29kZSBzaXplIGNvdW50ZXIgKi8KKyAgICBsem9fdWludCBwcmludGNvdW50OyAgICAvKiBjb3VudGVyIGZvciByZXBvcnRpbmcgcHJvZ3Jlc3MgZXZlcnkgMUsgYnl0ZXMgKi8KKworICAgIC8qIHNvbWUgc3RhdHMgKi8KKyAgICB1bnNpZ25lZCBsb25nIGxpdF9ieXRlczsKKyAgICB1bnNpZ25lZCBsb25nIG1hdGNoX2J5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgcmVwX2J5dGVzOworICAgIHVuc2lnbmVkIGxvbmcgbGF6eTsKKworI2lmIGRlZmluZWQoTFpPMUIpCisgICAgbHpvX3VpbnQgcjFfbV9sZW47CisKKyAgICAvKiBzb21lIHN0YXRzICovCisgICAgdW5zaWduZWQgbG9uZyByMV9yLCBtM19yLCBtMl9tLCBtM19tOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaTzFDKQorICAgIGx6b191aW50IHIxX21fbGVuOworICAgIGx6b19ieXRlcCBtMzsKKworICAgIC8qIHNvbWUgc3RhdHMgKi8KKyAgICB1bnNpZ25lZCBsb25nIHIxX3IsIG0zX3IsIG0yX20sIG0zX207CisjZW5kaWYKKworI2lmIGRlZmluZWQoTFpPMUYpCisgICAgbHpvX3VpbnQgcjFfbGl0OworICAgIGx6b191aW50IHIxX21fbGVuOworCisgICAgLyogc29tZSBzdGF0cyAqLworICAgIHVuc2lnbmVkIGxvbmcgcjFfciwgbTJfbSwgbTNfbTsKKyNlbmRpZgorCisjaWYgZGVmaW5lZChMWk8xWCkgfHwgZGVmaW5lZChMWk8xWSkgfHwgZGVmaW5lZChMWk8xWikKKyAgICBsem9fdWludCByMV9saXQ7CisgICAgbHpvX3VpbnQgcjFfbV9sZW47CisKKyAgICAvKiBzb21lIHN0YXRzICovCisgICAgdW5zaWduZWQgbG9uZyBtMWFfbSwgbTFiX20sIG0yX20sIG0zX20sIG00X207CisgICAgdW5zaWduZWQgbG9uZyBsaXQxX3IsIGxpdDJfciwgbGl0M19yOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKExaTzJBKQorICAgIC8qIHNvbWUgc3RhdHMgKi8KKyAgICB1bnNpZ25lZCBsb25nIG0xLCBtMiwgbTMsIG00OworI2VuZGlmCit9CitMWk9fQ09NUFJFU1NfVDsKKworCisjaWYgKExaT19DQ19CT1JMQU5EQyAmJiBMWk9fQVJDSF9JMDg2KSAmJiAoX19CT1JMQU5EQ19fIDwgMHgwNDUwKQorICAgLyogd29yayBhcm91bmQgYSBCb3JsYW5kIEMgMy4xIGJ1ZyAqLworIyAgZGVmaW5lIGdldGJ5dGUoYykgICgoYykuaXAgPCAoYykuaW5fZW5kID8gKGMpLmlwICs9MSwgKGMpLmlwWy0xXSA6ICgtMSkpCisjZWxpZiBkZWZpbmVkKF9fVFVSQk9DX18pICYmIGRlZmluZWQoX19UT1NfXykKKyAgIC8qIHdvcmsgYXJvdW5kIGEgYnVnIGluIFR1cmJvIEMgLyBQdXJlIEMgKEF0YXJpIFNUKSAqLworIyAgZGVmaW5lIGdldGJ5dGUoYykgICgoYykuaXAgPCAoYykuaW5fZW5kID8gKGludCkodW5zaWduZWQpICooKGMpLmlwKSsrIDogKC0xKSkKKyNlbHNlCisjICBkZWZpbmUgZ2V0Ynl0ZShjKSAgKChjKS5pcCA8IChjKS5pbl9lbmQgPyAqKChjKS5pcCkrKyA6ICgtMSkpCisjZW5kaWYKKworI2luY2x1ZGUgImx6b19zd2QuY2giCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50Citpbml0X21hdGNoICggTFpPX0NPTVBSRVNTX1QgKmMsIGx6b19zd2RfcCBzLAorICAgICAgICAgICAgIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbiwKKyAgICAgICAgICAgICBsem9fdWludDMyIGZsYWdzICkKK3sKKyAgICBpbnQgcjsKKworICAgIGFzc2VydCghYy0+aW5pdCk7CisgICAgYy0+aW5pdCA9IDE7CisKKyAgICBzLT5jID0gYzsKKworICAgIGMtPmxhc3RfbV9sZW4gPSBjLT5sYXN0X21fb2ZmID0gMDsKKworICAgIGMtPnRleHRzaXplID0gYy0+Y29kZXNpemUgPSBjLT5wcmludGNvdW50ID0gMDsKKyAgICBjLT5saXRfYnl0ZXMgPSBjLT5tYXRjaF9ieXRlcyA9IGMtPnJlcF9ieXRlcyA9IDA7CisgICAgYy0+bGF6eSA9IDA7CisKKyAgICByID0gc3dkX2luaXQocyxkaWN0LGRpY3RfbGVuKTsKKyAgICBpZiAociAhPSAwKQorICAgICAgICByZXR1cm4gcjsKKworICAgIHMtPnVzZV9iZXN0X29mZiA9IChmbGFncyAmIDEpID8gMSA6IDA7CisgICAgcmV0dXJuIHI7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50CitmaW5kX21hdGNoICggTFpPX0NPTVBSRVNTX1QgKmMsIGx6b19zd2RfcCBzLAorICAgICAgICAgICAgIGx6b191aW50IHRoaXNfbGVuLCBsem9fdWludCBza2lwICkKK3sKKyAgICBhc3NlcnQoYy0+aW5pdCk7CisKKyAgICBpZiAoc2tpcCA+IDApCisgICAgeworICAgICAgICBhc3NlcnQodGhpc19sZW4gPj0gc2tpcCk7CisgICAgICAgIHN3ZF9hY2NlcHQocywgdGhpc19sZW4gLSBza2lwKTsKKyAgICAgICAgYy0+dGV4dHNpemUgKz0gdGhpc19sZW4gLSBza2lwICsgMTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgYXNzZXJ0KHRoaXNfbGVuIDw9IDEpOworICAgICAgICBjLT50ZXh0c2l6ZSArPSB0aGlzX2xlbiAtIHNraXA7CisgICAgfQorCisgICAgcy0+bV9sZW4gPSAxOworICAgIHMtPm1fbGVuID0gVEhSRVNIT0xEOworI2lmZGVmIFNXRF9CRVNUX09GRgorICAgIGlmIChzLT51c2VfYmVzdF9vZmYpCisgICAgICAgIGx6b19tZW1zZXQocy0+YmVzdF9wb3MsMCxzaXplb2Yocy0+YmVzdF9wb3MpKTsKKyNlbmRpZgorICAgIHN3ZF9maW5kYmVzdChzKTsKKyAgICBjLT5tX2xlbiA9IHMtPm1fbGVuOworICAgIGMtPm1fb2ZmID0gcy0+bV9vZmY7CisKKyAgICBzd2RfZ2V0Ynl0ZShzKTsKKworICAgIGlmIChzLT5iX2NoYXIgPCAwKQorICAgIHsKKyAgICAgICAgYy0+bG9vayA9IDA7CisgICAgICAgIGMtPm1fbGVuID0gMDsKKyAgICAgICAgc3dkX2V4aXQocyk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIGMtPmxvb2sgPSBzLT5sb29rICsgMTsKKyAgICB9CisgICAgYy0+YnAgPSBjLT5pcCAtIGMtPmxvb2s7CisKKyNpZiAwCisgICAgLyogYnJ1dGUgZm9yY2UgbWF0Y2ggc2VhcmNoICovCisgICAgaWYgKGMtPm1fbGVuID4gVEhSRVNIT0xEICYmIGMtPm1fbGVuICsgMSA8PSBjLT5sb29rKQorICAgIHsKKyAgICAgICAgY29uc3QgbHpvX2J5dGVwIGlwID0gYy0+YnA7CisgICAgICAgIGNvbnN0IGx6b19ieXRlcCBtICA9IGMtPmJwIC0gYy0+bV9vZmY7CisgICAgICAgIGNvbnN0IGx6b19ieXRlcCBpbiA9IGMtPmluOworCisgICAgICAgIGlmIChpcCAtIGluID4gTikKKyAgICAgICAgICAgIGluID0gaXAgLSBOOworICAgICAgICBmb3IgKDs7KQorICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoKmluICE9ICppcCkKKyAgICAgICAgICAgICAgICBpbisrOworICAgICAgICAgICAgaWYgKGluID09IGlwKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGluICE9IG0pCisgICAgICAgICAgICAgICAgaWYgKGx6b19tZW1jbXAoaW4saXAsYy0+bV9sZW4rMSkgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlcCAlcCAlcCAlNWRcbiIsaW4saXAsbSxjLT5tX2xlbik7CisgICAgICAgICAgICBpbisrOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoYy0+Y2IgJiYgYy0+Y2ItPm5wcm9ncmVzcyAmJiBjLT50ZXh0c2l6ZSA+IGMtPnByaW50Y291bnQpCisgICAgeworICAgICAgICAoKmMtPmNiLT5ucHJvZ3Jlc3MpKGMtPmNiLCBjLT50ZXh0c2l6ZSwgYy0+Y29kZXNpemUsIDApOworICAgICAgICBjLT5wcmludGNvdW50ICs9IDEwMjQ7CisgICAgfQorCisgICAgcmV0dXJuIExaT19FX09LOworfQorCisKKy8qCit2aTp0cz00OmV0CisqLworCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbHpvX3B0ci5jIGIvbHpvLTIuMDMvc3JjL2x6b19wdHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNjRiZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL2x6b19wdHIuYwpAQCAtMCwwICsxLDkyIEBACisvKiBsem9fcHRyLmMgLS0gbG93LWxldmVsIHBvaW50ZXIgY29uc3RydWN0cworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvX2NvbmYuaCIKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK0xaT19QVUJMSUMobHpvX3VpbnRwdHJfdCkKK19fbHpvX3B0cl9saW5lYXIoY29uc3QgbHpvX3ZvaWRwIHB0cikKK3sKKyAgICBsem9fdWludHB0cl90IHA7CisKKyNpZiAoTFpPX0FSQ0hfSTA4NikKKyAgICBwID0gKCgobHpvX3VpbnRwdHJfdCkoQUNDX1BUUl9GUF9TRUcocHRyKSkpIDw8ICgxNiAtIEFDQ19NTV9BSFNISUZUKSkgKyAoQUNDX1BUUl9GUF9PRkYocHRyKSk7CisjZWxpZiAoTFpPX01NX1BWUCkKKyAgICBwID0gKGx6b191aW50cHRyX3QpIChwdHIpOworICAgIHAgPSAocCA8PCAzKSB8IChwID4+IDYxKTsKKyNlbHNlCisgICAgcCA9IChsem9fdWludHB0cl90KSBQVFJfTElORUFSKHB0cik7CisjZW5kaWYKKworICAgIHJldHVybiBwOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworTFpPX1BVQkxJQyh1bnNpZ25lZCkKK19fbHpvX2FsaWduX2dhcChjb25zdCBsem9fdm9pZHAgcHRyLCBsem9fdWludCBzaXplKQoreworI2lmIGRlZmluZWQoX19MWk9fVUlOVFBUUl9UX0lTX1BPSU5URVIpCisgICAgc2l6ZV90IG4gPSAoc2l6ZV90KSBwdHI7CisgICAgbiA9ICgoKG4gKyBzaXplIC0gMSkgLyBzaXplKSAqIHNpemUpIC0gbjsKKyNlbHNlCisgICAgbHpvX3VpbnRwdHJfdCBwLCBuOworICAgIHAgPSBfX2x6b19wdHJfbGluZWFyKHB0cik7CisgICAgbiA9ICgoKHAgKyBzaXplIC0gMSkgLyBzaXplKSAqIHNpemUpIC0gcDsKKyNlbmRpZgorCisgICAgYXNzZXJ0KHNpemUgPiAwKTsKKyAgICBhc3NlcnQoKGxvbmcpbiA+PSAwKTsKKyAgICBhc3NlcnQobiA8PSBzaXplKTsKKyAgICByZXR1cm4gKHVuc2lnbmVkKW47Cit9CisKKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fcHRyLmggYi9sem8tMi4wMy9zcmMvbHpvX3B0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODZhNzAKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvbHpvX3B0ci5oCkBAIC0wLDAgKzEsMTU0IEBACisvKiBsem9fcHRyLmggLS0gbG93LWxldmVsIHBvaW50ZXIgY29uc3RydWN0cworCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKyNpZm5kZWYgX19MWk9fUFRSX0gKKyNkZWZpbmUgX19MWk9fUFRSX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gSW50ZWdyYWwgdHlwZXMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKGx6b191aW50cHRyX3QpCisjICBpZiBkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgICBkZWZpbmUgbHpvX3VpbnRwdHJfdCAgIHVuc2lnbmVkIGxvbmcKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGx6b191aW50cHRyX3QgICBhY2NfdWludHB0cl90CisjICAgIGlmZGVmIF9fQUNDX0lOVFBUUl9UX0lTX1BPSU5URVIKKyMgICAgICBkZWZpbmUgX19MWk9fVUlOVFBUUl9UX0lTX1BPSU5URVIgMQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogQWx3YXlzIHVzZSB0aGUgc2FmZSAoPWludGVncmFsKSB2ZXJzaW9uIGZvciBwb2ludGVyLWNvbXBhcmlzaW9ucy4KKyAqIFRoZSBjb21waWxlciBzaG91bGQgb3B0aW1pemUgYXdheSB0aGUgYWRkaXRpb25hbCBjYXN0cyBhbnl3YXkuCisgKgorICogTm90ZSB0aGF0IHRoaXMgb25seSB3b3JrcyBpZiB0aGUgcmVwcmVzZW50YXRpb24gYW5kIG9yZGVyaW5nCisgKiBvZiB0aGUgcG9pbnRlciBhbmQgdGhlIGludGVncmFsIGlzIHRoZSBzYW1lIChhdCBiaXQgbGV2ZWwpLgorICoKKyAqIE1vc3QgMTYtYml0IGNvbXBpbGVycyBoYXZlIHRoZWlyIG93biB2aWV3IGFib3V0IHBvaW50ZXJzIC0KKyAqIGZvcnR1bmF0ZWx5IHRoZXkgZG9uJ3QgY2FyZSBhYm91dCBjb21wYXJpbmcgcG9pbnRlcnMKKyAqIHRoYXQgYXJlIHBvaW50aW5nIHRvIE5pcnZhbmEuCisgKi8KKworI2lmIChMWk9fQVJDSF9JMDg2KQorI2RlZmluZSBQVFIoYSkgICAgICAgICAgICAgICgobHpvX2J5dGVwKSAoYSkpCisvKiBvbmx5IG5lZWQgdGhlIGxvdyBiaXRzIG9mIHRoZSBwb2ludGVyIC0+IG9mZnNldCBpcyBvayAqLworI2RlZmluZSBQVFJfQUxJR05FRF80KGEpICAgICgoQUNDX1BUUl9GUF9PRkYoYSkgJiAzKSA9PSAwKQorI2RlZmluZSBQVFJfQUxJR05FRDJfNChhLGIpICgoKEFDQ19QVFJfRlBfT0ZGKGEpIHwgQUNDX1BUUl9GUF9PRkYoYikpICYgMykgPT0gMCkKKyNlbGlmIChMWk9fTU1fUFZQKQorI2RlZmluZSBQVFIoYSkgICAgICAgICAgICAgICgobHpvX2J5dGVwKSAoYSkpCisjZGVmaW5lIFBUUl9BTElHTkVEXzgoYSkgICAgKCgoKGx6b191aW50cHRyX3QpKGEpKSA+PiA2MSkgPT0gMCkKKyNkZWZpbmUgUFRSX0FMSUdORUQyXzgoYSxiKSAoKCgobHpvX3VpbnRwdHJfdCkoYSl8KGx6b191aW50cHRyX3QpKGIpKSA+PiA2MSkgPT0gMCkKKyNlbHNlCisjZGVmaW5lIFBUUihhKSAgICAgICAgICAgICAgKChsem9fdWludHB0cl90KSAoYSkpCisjZGVmaW5lIFBUUl9MSU5FQVIoYSkgICAgICAgUFRSKGEpCisjZGVmaW5lIFBUUl9BTElHTkVEXzQoYSkgICAgKChQVFJfTElORUFSKGEpICYgMykgPT0gMCkKKyNkZWZpbmUgUFRSX0FMSUdORURfOChhKSAgICAoKFBUUl9MSU5FQVIoYSkgJiA3KSA9PSAwKQorI2RlZmluZSBQVFJfQUxJR05FRDJfNChhLGIpICgoKFBUUl9MSU5FQVIoYSkgfCBQVFJfTElORUFSKGIpKSAmIDMpID09IDApCisjZGVmaW5lIFBUUl9BTElHTkVEMl84KGEsYikgKCgoUFRSX0xJTkVBUihhKSB8IFBUUl9MSU5FQVIoYikpICYgNykgPT0gMCkKKyNlbmRpZgorCisjZGVmaW5lIFBUUl9MVChhLGIpICAgICAgICAgKFBUUihhKSA8IFBUUihiKSkKKyNkZWZpbmUgUFRSX0dFKGEsYikgICAgICAgICAoUFRSKGEpID49IFBUUihiKSkKKyNkZWZpbmUgUFRSX0RJRkYoYSxiKSAgICAgICAoUFRSKGEpIC0gUFRSKGIpKQorI2RlZmluZSBwZChhLGIpICAgICAgICAgICAgICgobHpvX3VpbnQpICgoYSktKGIpKSkKKworCitMWk9fRVhURVJOKGx6b191aW50cHRyX3QpCitfX2x6b19wdHJfbGluZWFyKGNvbnN0IGx6b192b2lkcCBwdHIpOworCisKK3R5cGVkZWYgdW5pb24KK3sKKyAgICBjaGFyICAgICAgICAgICAgYV9jaGFyOworICAgIHVuc2lnbmVkIGNoYXIgICBhX3VjaGFyOworICAgIHNob3J0ICAgICAgICAgICBhX3Nob3J0OworICAgIHVuc2lnbmVkIHNob3J0ICBhX3VzaG9ydDsKKyAgICBpbnQgICAgICAgICAgICAgYV9pbnQ7CisgICAgdW5zaWduZWQgaW50ICAgIGFfdWludDsKKyAgICBsb25nICAgICAgICAgICAgYV9sb25nOworICAgIHVuc2lnbmVkIGxvbmcgICBhX3Vsb25nOworICAgIGx6b19pbnQgICAgICAgICBhX2x6b19pbnQ7CisgICAgbHpvX3VpbnQgICAgICAgIGFfbHpvX3VpbnQ7CisgICAgbHpvX2ludDMyICAgICAgIGFfbHpvX2ludDMyOworICAgIGx6b191aW50MzIgICAgICBhX2x6b191aW50MzI7CisgICAgcHRyZGlmZl90ICAgICAgIGFfcHRyZGlmZl90OworICAgIGx6b191aW50cHRyX3QgICBhX2x6b191aW50cHRyX3Q7CisgICAgbHpvX3ZvaWRwICAgICAgIGFfbHpvX3ZvaWRwOworICAgIHZvaWQgKiAgICAgICAgICBhX3ZvaWRfcDsKKyAgICBsem9fYnl0ZXAgICAgICAgYV9sem9fYnl0ZXA7CisgICAgbHpvX2J5dGVwcCAgICAgIGFfbHpvX2J5dGVwcDsKKyAgICBsem9fdWludHAgICAgICAgYV9sem9fdWludHA7CisgICAgbHpvX3VpbnQgKiAgICAgIGFfbHpvX3VpbnRfcDsKKyAgICBsem9fdWludDMycCAgICAgYV9sem9fdWludDMycDsKKyAgICBsem9fdWludDMyICogICAgYV9sem9fdWludDMyX3A7CisgICAgdW5zaWduZWQgY2hhciAqIGFfdWNoYXJfcDsKKyAgICBjaGFyICogICAgICAgICAgYV9jaGFyX3A7Cit9Citsem9fZnVsbF9hbGlnbl90OworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvc3JjL2x6b19zdHIuYyBiL2x6by0yLjAzL3NyYy9sem9fc3RyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYwODk2MAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem9fc3RyLmMKQEAgLTAsMCArMSw3MSBAQAorLyogbHpvX3N0ci5jIC0tIHN0cmluZyBmdW5jdGlvbnMgZm9yIHRoZSB0aGUgTFpPIGxpYnJhcnkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2luY2x1ZGUgImx6b19jb25mLmgiCisKKyN1bmRlZiBsem9fbWVtY21wCisjdW5kZWYgbHpvX21lbWNweQorI3VuZGVmIGx6b19tZW1tb3ZlCisjdW5kZWYgbHpvX21lbXNldAorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8gc2xvdyBidXQgcG9ydGFibGUgPHN0cmluZy5oPiBzdHVmZiwgb25seSB1c2VkIGluIGFzc2VydGlvbnMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmICFkZWZpbmVkKF9fTFpPX01NT0RFTF9IVUdFKQorIyAgdW5kZWYgQUNDX0hBVkVfTU1fSFVHRV9QVFIKKyNlbmRpZgorI2RlZmluZSBhY2NfaHNpemVfdCAgICAgICAgICAgICBsem9fdWludAorI2RlZmluZSBhY2NfaHZvaWRfcCAgICAgICAgICAgICBsem9fdm9pZHAKKyNkZWZpbmUgYWNjX2hieXRlX3AgICAgICAgICAgICAgbHpvX2J5dGVwCisjZGVmaW5lIEFDQ0xJQl9QVUJMSUMocixmKSAgICAgIExaT19QVUJMSUMocikgZgorI2RlZmluZSBhY2NfaG1lbWNtcCAgICAgICAgICAgICBsem9fbWVtY21wCisjZGVmaW5lIGFjY19obWVtY3B5ICAgICAgICAgICAgIGx6b19tZW1jcHkKKyNkZWZpbmUgYWNjX2htZW1tb3ZlICAgICAgICAgICAgbHpvX21lbW1vdmUKKyNkZWZpbmUgYWNjX2htZW1zZXQgICAgICAgICAgICAgbHpvX21lbXNldAorI2RlZmluZSBBQ0NfV0FOVF9BQ0NMSUJfSE1FTUNQWSAxCisjaW5jbHVkZSAibWluaWFjYy5oIgorI3VuZGVmIEFDQ0xJQl9QVUJMSUMKKworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fc3dkLmNoIGIvbHpvLTIuMDMvc3JjL2x6b19zd2QuY2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0YjE3YwotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem9fc3dkLmNoCkBAIC0wLDAgKzEsNzA3IEBACisvKiBsem9fc3dkLmNoIC0tIHNsaWRpbmcgd2luZG93IGRpY3Rpb25hcnkKKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2lmIChMWk9fVUlOVF9NQVggPCBMWk9fMHhmZmZmZmZmZkwpCisjICBlcnJvciAiTFpPX1VJTlRfTUFYIgorI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjaWZuZGVmIFNXRF9OCisjICBkZWZpbmUgU1dEX04gICAgICAgICAgICAgTgorI2VuZGlmCisjaWZuZGVmIFNXRF9GCisjICBkZWZpbmUgU1dEX0YgICAgICAgICAgICAgRgorI2VuZGlmCisjaWZuZGVmIFNXRF9USFJFU0hPTEQKKyMgIGRlZmluZSBTV0RfVEhSRVNIT0xEICAgICBUSFJFU0hPTEQKKyNlbmRpZgorCisvKiB1bnNpZ25lZCB0eXBlIGZvciBkaWN0aW9uYXJ5IGFjY2VzcyAtIGRvbid0IHdhc3RlIG1lbW9yeSBoZXJlICovCisjaWYgKDBVTCArIFNXRF9OICsgU1dEX0YgKyBTV0RfRiA8IDBVTCArIFVTSFJUX01BWCkKKyAgIHR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICBzd2RfdWludDsKKyMgIGRlZmluZSBTV0RfVUlOVF9NQVggICAgICBVU0hSVF9NQVgKKyNlbGlmICgwVUwgKyBTV0RfTiArIFNXRF9GICsgU1dEX0YgPCAwVUwgKyBVSU5UX01BWCkKKyAgIHR5cGVkZWYgdW5zaWduZWQgICAgICAgICBzd2RfdWludDsKKyMgIGRlZmluZSBTV0RfVUlOVF9NQVggICAgICBVSU5UX01BWAorI2Vsc2UKKyAgIHR5cGVkZWYgbHpvX3VpbnQgICAgICAgICBzd2RfdWludDsKKyMgIGRlZmluZSBTV0RfVUlOVF9NQVggICAgICBMWk9fVUlOVF9NQVgKKyNlbmRpZgorI2RlZmluZSBzd2RfdWludHAgICAgICAgICAgIHN3ZF91aW50IF9fTFpPX01NT0RFTCAqCisjZGVmaW5lIFNXRF9VSU5UKHgpICAgICAgICAgKChzd2RfdWludCkoeCkpCisKKworI2lmbmRlZiBTV0RfSFNJWkUKKyMgIGRlZmluZSBTV0RfSFNJWkUgICAgICAgICAxNjM4NAorI2VuZGlmCisjaWZuZGVmIFNXRF9NQVhfQ0hBSU4KKyMgIGRlZmluZSBTV0RfTUFYX0NIQUlOICAgICAyMDQ4CisjZW5kaWYKKworI2lmICFkZWZpbmVkKEhFQUQzKQorI2lmIDEKKyMgIGRlZmluZSBIRUFEMyhiLHApIFwKKyAgICAoKERNVUwoMHg5ZjVmLCgoKCgobHpvX3hpbnQpYltwXTw8NSleYltwKzFdKTw8NSleYltwKzJdKSk+PjUpICYgKFNXRF9IU0laRS0xKSkKKyNlbHNlCisjICBkZWZpbmUgSEVBRDMoYixwKSBcCisgICAgKChETVVMKDB4OWY1ZiwoKCgoKGx6b194aW50KWJbcCsyXTw8NSleYltwKzFdKTw8NSleYltwXSkpPj41KSAmIChTV0RfSFNJWkUtMSkpCisjZW5kaWYKKyNlbmRpZgorCisjaWYgKFNXRF9USFJFU0hPTEQgPT0gMSkgJiYgIWRlZmluZWQoSEVBRDIpCisjICBpZiAxICYmIGRlZmluZWQoTFpPX1VOQUxJR05FRF9PS18yKQorIyAgICBkZWZpbmUgSEVBRDIoYixwKSAgICAgICgqIChsem9fdXNob3J0cCkgJihiW3BdKSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEhFQUQyKGIscCkgICAgICAoYltwXSBeICgodW5zaWduZWQpYltwKzFdPDw4KSkKKyMgIGVuZGlmCisjICBkZWZpbmUgTklMMiAgICAgICAgICAgICAgU1dEX1VJTlRfTUFYCisjZW5kaWYKKworCit0eXBlZGVmIHN0cnVjdAoreworLyogcHVibGljIC0gImJ1aWx0LWluIiAqLworICAgIGx6b191aW50IG47CisgICAgbHpvX3VpbnQgZjsKKyAgICBsem9fdWludCB0aHJlc2hvbGQ7CisKKy8qIHB1YmxpYyAtIGNvbmZpZ3VyYXRpb24gKi8KKyAgICBsem9fdWludCBtYXhfY2hhaW47CisgICAgbHpvX3VpbnQgbmljZV9sZW5ndGg7CisgICAgbHpvX2Jvb2wgdXNlX2Jlc3Rfb2ZmOworICAgIGx6b191aW50IGxhenlfaW5zZXJ0OworCisvKiBwdWJsaWMgLSBvdXRwdXQgKi8KKyAgICBsem9fdWludCBtX2xlbjsKKyAgICBsem9fdWludCBtX29mZjsKKyAgICBsem9fdWludCBsb29rOworICAgIGludCBiX2NoYXI7CisjaWYgZGVmaW5lZChTV0RfQkVTVF9PRkYpCisgICAgbHpvX3VpbnQgYmVzdF9vZmZbIFNXRF9CRVNUX09GRiBdOworI2VuZGlmCisKKy8qIHNlbWkgcHVibGljICovCisgICAgTFpPX0NPTVBSRVNTX1QgKmM7CisgICAgbHpvX3VpbnQgbV9wb3M7CisjaWYgZGVmaW5lZChTV0RfQkVTVF9PRkYpCisgICAgbHpvX3VpbnQgYmVzdF9wb3NbIFNXRF9CRVNUX09GRiBdOworI2VuZGlmCisKKy8qIHByaXZhdGUgKi8KKyAgICBjb25zdCBsem9fYnl0ZXAgZGljdDsKKyAgICBjb25zdCBsem9fYnl0ZXAgZGljdF9lbmQ7CisgICAgbHpvX3VpbnQgZGljdF9sZW47CisKKy8qIHByaXZhdGUgKi8KKyAgICBsem9fdWludCBpcDsgICAgICAgICAgICAgICAgLyogaW5wdXQgcG9pbnRlciAobG9va2FoZWFkKSAqLworICAgIGx6b191aW50IGJwOyAgICAgICAgICAgICAgICAvKiBidWZmZXIgcG9pbnRlciAqLworICAgIGx6b191aW50IHJwOyAgICAgICAgICAgICAgICAvKiByZW1vdmUgcG9pbnRlciAqLworICAgIGx6b191aW50IGJfc2l6ZTsKKworICAgIGx6b19ieXRlcCBiX3dyYXA7CisKKyAgICBsem9fdWludCBub2RlX2NvdW50OworICAgIGx6b191aW50IGZpcnN0X3JwOworCisjaWYgZGVmaW5lZChfX0xaT19NTU9ERUxfSFVHRSkKKyMgIGRlZmluZSBBKHR5cGUsIG4pICAgICgoKChuKSAqIHNpemVvZih0eXBlKSkgKyAzVUwpICZ+IDNVTCkKKworIyAgZGVmaW5lIE9fYihzKSAgICAgICAgKDBMKQorIyAgZGVmaW5lIE9faGVhZDMocykgICAgKE9fYihzKSArIEEoY2hhciwgMFVMICsgU1dEX04gKyBTV0RfRiArIFNXRF9GKSkKKyMgIGRlZmluZSBPX3N1Y2MzKHMpICAgIChPX2hlYWQzKHMpICsgQShzd2RfdWludCwgMFVMICsgU1dEX0hTSVpFKSkKKyMgIGRlZmluZSBPX2Jlc3QzKHMpICAgIChPX3N1Y2MzKHMpICsgQShzd2RfdWludCwgMFVMICsgU1dEX04gKyBTV0RfRikpCisjICBkZWZpbmUgT19sbGVuMyhzKSAgICAoT19iZXN0MyhzKSArIEEoc3dkX3VpbnQsIDBVTCArIFNXRF9OICsgU1dEX0YpKQorIyBpZmRlZiBIRUFEMgorIyAgZGVmaW5lIE9faGVhZDIocykgICAgKE9fbGxlbjMocykgKyBBKHN3ZF91aW50LCAwVUwgKyBTV0RfSFNJWkUpKQorIyAgZGVmaW5lIE9fRU5EKHMpICAgICAgKE9faGVhZDIocykgKyBBKHN3ZF91aW50LCAwVUwgKyA2NTUzNkwpKQorIyBlbHNlCisjICBkZWZpbmUgT19FTkQocykgICAgICAoT19sbGVuMyhzKSArIEEoc3dkX3VpbnQsIDBVTCArIFNXRF9IU0laRSkpCisjIGVuZGlmCisKKyMgIGRlZmluZSBTX0RFRihzLHR5cGUsb2ZmKSAgKCh0eXBlKSAoKGx6b19ieXRlcClzICsgMEwgKyBzaXplb2YoKnMpICsgb2ZmKSkKKyMgIGRlZmluZSBzX2IocykgICAgICAgIFNfREVGKHMsIGx6b19ieXRlcCwgT19iKHMpKQorIyAgZGVmaW5lIHNfaGVhZDMocykgICAgU19ERUYocywgc3dkX3VpbnRwLCBPX2hlYWQzKHMpKQorIyAgZGVmaW5lIHNfc3VjYzMocykgICAgU19ERUYocywgc3dkX3VpbnRwLCBPX3N1Y2MzKHMpKQorIyAgZGVmaW5lIHNfYmVzdDMocykgICAgU19ERUYocywgc3dkX3VpbnRwLCBPX2Jlc3QzKHMpKQorIyAgZGVmaW5lIHNfbGxlbjMocykgICAgU19ERUYocywgc3dkX3VpbnRwLCBPX2xsZW4zKHMpKQorIyBpZmRlZiBIRUFEMgorIyAgZGVmaW5lIHNfaGVhZDIocykgICAgU19ERUYocywgc3dkX3VpbnRwLCBPX2hlYWQyKHMpKQorIyBlbmRpZgorCisjZWxpZiBkZWZpbmVkKF9fTFpPX0NIRUNLRVIpCisgICAgLyogbWFsbG9jIGFycmF5cyBvZiB0aGUgZXhhY3Qgc2l6ZSB0byBkZXRlY3QgYW55IG92ZXJydW4gKi8KKyAgICB1bnNpZ25lZCBjaGFyICpiOworICAgIHN3ZF91aW50ICpoZWFkMzsKKyAgICBzd2RfdWludCAqc3VjYzM7CisgICAgc3dkX3VpbnQgKmJlc3QzOworICAgIHN3ZF91aW50ICpsbGVuMzsKKyMgaWZkZWYgSEVBRDIKKyAgICBzd2RfdWludCAqaGVhZDI7CisjIGVuZGlmCisKKyNlbHNlCisgICAgdW5zaWduZWQgY2hhciBiIFsgU1dEX04gKyBTV0RfRiArIFNXRF9GIF07CisgICAgc3dkX3VpbnQgaGVhZDMgWyBTV0RfSFNJWkUgXTsKKyAgICBzd2RfdWludCBzdWNjMyBbIFNXRF9OICsgU1dEX0YgXTsKKyAgICBzd2RfdWludCBiZXN0MyBbIFNXRF9OICsgU1dEX0YgXTsKKyAgICBzd2RfdWludCBsbGVuMyBbIFNXRF9IU0laRSBdOworIyBpZmRlZiBIRUFEMgorICAgIHN3ZF91aW50IGhlYWQyIFsgNjU1MzZMIF07CisjIGVuZGlmCisjZW5kaWYKK30KK2x6b19zd2RfdDsKKyNkZWZpbmUgbHpvX3N3ZF9wICAgbHpvX3N3ZF90IF9fTFpPX01NT0RFTCAqCisKKworI2lmIGRlZmluZWQoX19MWk9fTU1PREVMX0hVR0UpCisjZGVmaW5lIFNJWkVPRl9MWk9fU1dEX1QgICAgT19FTkQoMCkKKyNlbHNlCisjZGVmaW5lIHNfYihzKSAgICAgIHMtPmIKKyNkZWZpbmUgc19oZWFkMyhzKSAgcy0+aGVhZDMKKyNkZWZpbmUgc19zdWNjMyhzKSAgcy0+c3VjYzMKKyNkZWZpbmUgc19iZXN0MyhzKSAgcy0+YmVzdDMKKyNkZWZpbmUgc19sbGVuMyhzKSAgcy0+bGxlbjMKKyNpZmRlZiBIRUFEMgorI2RlZmluZSBzX2hlYWQyKHMpICBzLT5oZWFkMgorI2VuZGlmCisjZGVmaW5lIFNJWkVPRl9MWk9fU1dEX1QgICAgKHNpemVvZihsem9fc3dkX3QpKQorI2VuZGlmCisKKworLyogQWNjZXNzIG1hY3JvIGZvciBoZWFkMy4KKyAqIGhlYWQzW2tleV0gbWF5IGJlIHVuaW5pdGlhbGl6ZWQsIGJ1dCB0aGVuIGl0cyB2YWx1ZSB3aWxsIG5ldmVyIGJlIHVzZWQuCisgKi8KKyNpZiBkZWZpbmVkKF9fTFpPX0NIRUNLRVIpCisjICBkZWZpbmUgc19nZXRfaGVhZDMocyxrZXkpIFwKKyAgICAgICAgKChzLT5sbGVuM1trZXldID09IDApID8gU1dEX1VJTlRfTUFYIDogc19oZWFkMyhzKVtrZXldKQorI2Vsc2UKKyMgIGRlZmluZSBzX2dldF9oZWFkMyhzLGtleSkgICAgc19oZWFkMyhzKVtrZXldCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYwordm9pZCBzd2RfaW5pdGRpY3QobHpvX3N3ZF9wIHMsIGNvbnN0IGx6b19ieXRlcCBkaWN0LCBsem9fdWludCBkaWN0X2xlbikKK3sKKyAgICBzLT5kaWN0ID0gcy0+ZGljdF9lbmQgPSBOVUxMOworICAgIHMtPmRpY3RfbGVuID0gMDsKKworICAgIGlmICghZGljdCB8fCBkaWN0X2xlbiA8PSAwKQorICAgICAgICByZXR1cm47CisgICAgaWYgKGRpY3RfbGVuID4gcy0+bikKKyAgICB7CisgICAgICAgIGRpY3QgKz0gZGljdF9sZW4gLSBzLT5uOworICAgICAgICBkaWN0X2xlbiA9IHMtPm47CisgICAgfQorCisgICAgcy0+ZGljdCA9IGRpY3Q7CisgICAgcy0+ZGljdF9sZW4gPSBkaWN0X2xlbjsKKyAgICBzLT5kaWN0X2VuZCA9IGRpY3QgKyBkaWN0X2xlbjsKKyAgICBsem9fbWVtY3B5KHNfYihzKSxkaWN0LGRpY3RfbGVuKTsKKyAgICBzLT5pcCA9IGRpY3RfbGVuOworfQorCisKK3N0YXRpYwordm9pZCBzd2RfaW5zZXJ0ZGljdChsem9fc3dkX3AgcywgbHpvX3VpbnQgbm9kZSwgbHpvX3VpbnQgbGVuKQoreworICAgIGx6b191aW50IGtleTsKKworICAgIHMtPm5vZGVfY291bnQgPSBzLT5uIC0gbGVuOworICAgIHMtPmZpcnN0X3JwID0gbm9kZTsKKworICAgIHdoaWxlIChsZW4tLSA+IDApCisgICAgeworICAgICAgICBrZXkgPSBIRUFEMyhzX2Iocyksbm9kZSk7CisgICAgICAgIHNfc3VjYzMocylbbm9kZV0gPSBzX2dldF9oZWFkMyhzLGtleSk7CisgICAgICAgIHNfaGVhZDMocylba2V5XSA9IFNXRF9VSU5UKG5vZGUpOworICAgICAgICBzX2Jlc3QzKHMpW25vZGVdID0gU1dEX1VJTlQocy0+ZiArIDEpOworICAgICAgICBzX2xsZW4zKHMpW2tleV0rKzsKKyAgICAgICAgYXNzZXJ0KHNfbGxlbjMocylba2V5XSA8PSBTV0RfTik7CisKKyNpZmRlZiBIRUFEMgorICAgICAgICBrZXkgPSBIRUFEMihzX2Iocyksbm9kZSk7CisgICAgICAgIHNfaGVhZDIocylba2V5XSA9IFNXRF9VSU5UKG5vZGUpOworI2VuZGlmCisKKyAgICAgICAgbm9kZSsrOworICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYworaW50IHN3ZF9pbml0KGx6b19zd2RfcCBzLCBjb25zdCBsem9fYnl0ZXAgZGljdCwgbHpvX3VpbnQgZGljdF9sZW4pCit7CisgICAgbHpvX3VpbnQgaSA9IDA7CisgICAgaW50IGMgPSAwOworCisjaWYgZGVmaW5lZChfX0xaT19DSEVDS0VSKQorICAgIHMtPmIgPSBtYWxsb2MoU1dEX04gKyBTV0RfRiArIFNXRF9GKTsKKyAgICBzLT5oZWFkMyA9IG1hbGxvYyhzaXplb2Yoc3dkX3VpbnQpICogU1dEX0hTSVpFKTsKKyAgICBzLT5zdWNjMyA9IG1hbGxvYyhzaXplb2Yoc3dkX3VpbnQpICogKFNXRF9OICsgU1dEX0YpKTsKKyAgICBzLT5iZXN0MyA9IG1hbGxvYyhzaXplb2Yoc3dkX3VpbnQpICogKFNXRF9OICsgU1dEX0YpKTsKKyAgICBzLT5sbGVuMyA9IG1hbGxvYyhzaXplb2Yoc3dkX3VpbnQpICogU1dEX0hTSVpFKTsKKyNpZmRlZiBIRUFEMgorICAgIHMtPmhlYWQyID0gbWFsbG9jKHNpemVvZihzd2RfdWludCkgKiA2NTUzNkwpOworI2VuZGlmCisjZW5kaWYKKworICAgIHMtPm4gPSBTV0RfTjsKKyAgICBzLT5mID0gU1dEX0Y7CisgICAgcy0+dGhyZXNob2xkID0gU1dEX1RIUkVTSE9MRDsKKworICAgIC8qIGRlZmF1bHRzICovCisgICAgcy0+bWF4X2NoYWluID0gU1dEX01BWF9DSEFJTjsKKyAgICBzLT5uaWNlX2xlbmd0aCA9IFNXRF9GOworICAgIHMtPnVzZV9iZXN0X29mZiA9IDA7CisgICAgcy0+bGF6eV9pbnNlcnQgPSAwOworCisgICAgcy0+Yl9zaXplID0gcy0+biArIHMtPmY7CisjaWYgMAorICAgIGlmICgyICogcy0+ZiA+PSBzLT5uIHx8IHMtPmJfc2l6ZSArIHMtPmYgPj0gU1dEX1VJTlRfTUFYKQorICAgICAgICByZXR1cm4gTFpPX0VfRVJST1I7CisjZWxzZQorICAgIExaT19DT01QSUxFX1RJTUVfQVNTRVJUKCEoMHVsICsgMiAqIFNXRF9GID49IFNXRF9OKSkKKyAgICBMWk9fQ09NUElMRV9USU1FX0FTU0VSVCghKDB1bCArIFNXRF9OICsgU1dEX0YgKyBTV0RfRiA+PSBTV0RfVUlOVF9NQVgpKQorI2VuZGlmCisgICAgcy0+Yl93cmFwID0gc19iKHMpICsgcy0+Yl9zaXplOworICAgIHMtPm5vZGVfY291bnQgPSBzLT5uOworCisgICAgbHpvX21lbXNldChzX2xsZW4zKHMpLCAwLCBzaXplb2Yoc19sbGVuMyhzKVswXSkgKiAobHpvX3VpbnQpU1dEX0hTSVpFKTsKKyNpZmRlZiBIRUFEMgorI2lmIDEKKyAgICBsem9fbWVtc2V0KHNfaGVhZDIocyksIDB4ZmYsIHNpemVvZihzX2hlYWQyKHMpWzBdKSAqIDY1NTM2TCk7CisgICAgYXNzZXJ0KHNfaGVhZDIocylbMF0gPT0gTklMMik7CisjZWxzZQorICAgIGZvciAoaSA9IDA7IGkgPCA2NTUzNkw7IGkrKykKKyAgICAgICAgc19oZWFkMihzKVtpXSA9IE5JTDI7CisjZW5kaWYKKyNlbmRpZgorCisgICAgcy0+aXAgPSAwOworICAgIHN3ZF9pbml0ZGljdChzLGRpY3QsZGljdF9sZW4pOworICAgIHMtPmJwID0gcy0+aXA7CisgICAgcy0+Zmlyc3RfcnAgPSBzLT5pcDsKKworICAgIGFzc2VydChzLT5pcCArIHMtPmYgPD0gcy0+Yl9zaXplKTsKKyNpZiAxCisgICAgcy0+bG9vayA9IChsem9fdWludCkgKHMtPmMtPmluX2VuZCAtIHMtPmMtPmlwKTsKKyAgICBpZiAocy0+bG9vayA+IDApCisgICAgeworICAgICAgICBpZiAocy0+bG9vayA+IHMtPmYpCisgICAgICAgICAgICBzLT5sb29rID0gcy0+ZjsKKyAgICAgICAgbHpvX21lbWNweSgmc19iKHMpW3MtPmlwXSxzLT5jLT5pcCxzLT5sb29rKTsKKyAgICAgICAgcy0+Yy0+aXAgKz0gcy0+bG9vazsKKyAgICAgICAgcy0+aXAgKz0gcy0+bG9vazsKKyAgICB9CisjZWxzZQorICAgIHMtPmxvb2sgPSAwOworICAgIHdoaWxlIChzLT5sb29rIDwgcy0+ZikKKyAgICB7CisgICAgICAgIGlmICgoYyA9IGdldGJ5dGUoKihzLT5jKSkpIDwgMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBzX2Iocylbcy0+aXBdID0gTFpPX0JZVEUoYyk7CisgICAgICAgIHMtPmlwKys7CisgICAgICAgIHMtPmxvb2srKzsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAocy0+aXAgPT0gcy0+Yl9zaXplKQorICAgICAgICBzLT5pcCA9IDA7CisKKyAgICBpZiAocy0+bG9vayA+PSAyICYmIHMtPmRpY3RfbGVuID4gMCkKKyAgICAgICAgc3dkX2luc2VydGRpY3QocywwLHMtPmRpY3RfbGVuKTsKKworICAgIHMtPnJwID0gcy0+Zmlyc3RfcnA7CisgICAgaWYgKHMtPnJwID49IHMtPm5vZGVfY291bnQpCisgICAgICAgIHMtPnJwIC09IHMtPm5vZGVfY291bnQ7CisgICAgZWxzZQorICAgICAgICBzLT5ycCArPSBzLT5iX3NpemUgLSBzLT5ub2RlX2NvdW50OworCisjaWYgZGVmaW5lZChfX0xaT19DSEVDS0VSKQorICAgIC8qIGluaXRpYWxpemUgbWVtb3J5IGZvciB0aGUgZmlyc3QgZmV3IEhFQUQzIChpZiBzLT5pcCBpcyBub3QgZmFyCisgICAgICogZW5vdWdoIGFoZWFkIHRvIGRvIHRoaXMgam9iIGZvciB1cykuIFRoZSB2YWx1ZSBkb2Vzbid0IG1hdHRlci4gKi8KKyAgICBpZiAocy0+bG9vayA8IDMpCisgICAgICAgIGx6b19tZW1zZXQoJnNfYihzKVtzLT5icCtzLT5sb29rXSwwLDMpOworI2VuZGlmCisKKyAgICBMWk9fVU5VU0VEKGkpOworICAgIExaT19VTlVTRUQoYyk7CisgICAgcmV0dXJuIExaT19FX09LOworfQorCisKK3N0YXRpYwordm9pZCBzd2RfZXhpdChsem9fc3dkX3AgcykKK3sKKyNpZiBkZWZpbmVkKF9fTFpPX0NIRUNLRVIpCisgICAgLyogZnJlZSBpbiByZXZlcnNlIG9yZGVyIG9mIGFsbG9jYXRpb25zICovCisjaWZkZWYgSEVBRDIKKyAgICBmcmVlKHMtPmhlYWQyKTsgcy0+aGVhZDIgPSBOVUxMOworI2VuZGlmCisgICAgZnJlZShzLT5sbGVuMyk7IHMtPmxsZW4zID0gTlVMTDsKKyAgICBmcmVlKHMtPmJlc3QzKTsgcy0+YmVzdDMgPSBOVUxMOworICAgIGZyZWUocy0+c3VjYzMpOyBzLT5zdWNjMyA9IE5VTEw7CisgICAgZnJlZShzLT5oZWFkMyk7IHMtPmhlYWQzID0gTlVMTDsKKyAgICBmcmVlKHMtPmIpOyBzLT5iID0gTlVMTDsKKyNlbHNlCisgICAgTFpPX1VOVVNFRChzKTsKKyNlbmRpZgorfQorCisKKyNkZWZpbmUgc3dkX3BvczJvZmYocyxwb3MpIFwKKyAgICAocy0+YnAgPiAocG9zKSA/IHMtPmJwIC0gKHBvcykgOiBzLT5iX3NpemUgLSAoKHBvcykgLSBzLT5icCkpCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgX19sem9faW5saW5lCit2b2lkIHN3ZF9nZXRieXRlKGx6b19zd2RfcCBzKQoreworICAgIGludCBjOworCisgICAgaWYgKChjID0gZ2V0Ynl0ZSgqKHMtPmMpKSkgPCAwKQorICAgIHsKKyAgICAgICAgaWYgKHMtPmxvb2sgPiAwKQorICAgICAgICAgICAgLS1zLT5sb29rOworI2lmIGRlZmluZWQoX19MWk9fQ0hFQ0tFUikKKyAgICAgICAgLyogaW5pdGlhbGl6ZSBtZW1vcnkgLSB2YWx1ZSBkb2Vzbid0IG1hdHRlciAqLworICAgICAgICBzX2Iocylbcy0+aXBdID0gMDsKKyAgICAgICAgaWYgKHMtPmlwIDwgcy0+ZikKKyAgICAgICAgICAgIHMtPmJfd3JhcFtzLT5pcF0gPSAwOworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHNfYihzKVtzLT5pcF0gPSBMWk9fQllURShjKTsKKyAgICAgICAgaWYgKHMtPmlwIDwgcy0+ZikKKyAgICAgICAgICAgIHMtPmJfd3JhcFtzLT5pcF0gPSBMWk9fQllURShjKTsKKyAgICB9CisgICAgaWYgKCsrcy0+aXAgPT0gcy0+Yl9zaXplKQorICAgICAgICBzLT5pcCA9IDA7CisgICAgaWYgKCsrcy0+YnAgPT0gcy0+Yl9zaXplKQorICAgICAgICBzLT5icCA9IDA7CisgICAgaWYgKCsrcy0+cnAgPT0gcy0+Yl9zaXplKQorICAgICAgICBzLT5ycCA9IDA7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyByZW1vdmUgbm9kZSBmcm9tIGxpc3RzCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBfX2x6b19pbmxpbmUKK3ZvaWQgc3dkX3JlbW92ZV9ub2RlKGx6b19zd2RfcCBzLCBsem9fdWludCBub2RlKQoreworICAgIGlmIChzLT5ub2RlX2NvdW50ID09IDApCisgICAgeworICAgICAgICBsem9fdWludCBrZXk7CisKKyNpZmRlZiBMWk9fREVCVUcKKyAgICAgICAgaWYgKHMtPmZpcnN0X3JwICE9IExaT19VSU5UX01BWCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKG5vZGUgIT0gcy0+Zmlyc3RfcnApCisgICAgICAgICAgICAgICAgcHJpbnRmKCJSZW1vdmUgJTV1OiAlNXUgJTV1ICU1dSAlNXUgICU2dSAlNnVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLCBzLT5ycCwgcy0+aXAsIHMtPmJwLCBzLT5maXJzdF9ycCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHMtPmlwIC0gbm9kZSwgcy0+aXAgLSBzLT5icCk7CisgICAgICAgICAgICBhc3NlcnQobm9kZSA9PSBzLT5maXJzdF9ycCk7CisgICAgICAgICAgICBzLT5maXJzdF9ycCA9IExaT19VSU5UX01BWDsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAga2V5ID0gSEVBRDMoc19iKHMpLG5vZGUpOworICAgICAgICBhc3NlcnQoc19sbGVuMyhzKVtrZXldID4gMCk7CisgICAgICAgIC0tc19sbGVuMyhzKVtrZXldOworCisjaWZkZWYgSEVBRDIKKyAgICAgICAga2V5ID0gSEVBRDIoc19iKHMpLG5vZGUpOworICAgICAgICBhc3NlcnQoc19oZWFkMihzKVtrZXldICE9IE5JTDIpOworICAgICAgICBpZiAoKGx6b191aW50KSBzX2hlYWQyKHMpW2tleV0gPT0gbm9kZSkKKyAgICAgICAgICAgIHNfaGVhZDIocylba2V5XSA9IE5JTDI7CisjZW5kaWYKKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXMtPm5vZGVfY291bnQ7Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMKK3ZvaWQgc3dkX2FjY2VwdChsem9fc3dkX3AgcywgbHpvX3VpbnQgbikKK3sKKyAgICBhc3NlcnQobiA8PSBzLT5sb29rKTsKKworICAgIHdoaWxlIChuLS0pCisgICAgeworICAgICAgICBsem9fdWludCBrZXk7CisKKyAgICAgICAgc3dkX3JlbW92ZV9ub2RlKHMscy0+cnApOworCisgICAgICAgIC8qIGFkZCBicCBpbnRvIEhFQUQzICovCisgICAgICAgIGtleSA9IEhFQUQzKHNfYihzKSxzLT5icCk7CisgICAgICAgIHNfc3VjYzMocylbcy0+YnBdID0gc19nZXRfaGVhZDMocyxrZXkpOworICAgICAgICBzX2hlYWQzKHMpW2tleV0gPSBTV0RfVUlOVChzLT5icCk7CisgICAgICAgIHNfYmVzdDMocylbcy0+YnBdID0gU1dEX1VJTlQocy0+ZiArIDEpOworICAgICAgICBzX2xsZW4zKHMpW2tleV0rKzsKKyAgICAgICAgYXNzZXJ0KHNfbGxlbjMocylba2V5XSA8PSBTV0RfTik7CisKKyNpZmRlZiBIRUFEMgorICAgICAgICAvKiBhZGQgYnAgaW50byBIRUFEMiAqLworICAgICAgICBrZXkgPSBIRUFEMihzX2Iocykscy0+YnApOworICAgICAgICBzX2hlYWQyKHMpW2tleV0gPSBTV0RfVUlOVChzLT5icCk7CisjZW5kaWYKKworICAgICAgICBzd2RfZ2V0Ynl0ZShzKTsKKyAgICB9Cit9CisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMKK3ZvaWQgc3dkX3NlYXJjaChsem9fc3dkX3AgcywgbHpvX3VpbnQgbm9kZSwgbHpvX3VpbnQgY250KQoreworICAgIGNvbnN0IGx6b19ieXRlcCBwMTsKKyAgICBjb25zdCBsem9fYnl0ZXAgcDI7CisgICAgY29uc3QgbHpvX2J5dGVwIHB4OworICAgIGx6b191aW50IG1fbGVuID0gcy0+bV9sZW47CisgICAgY29uc3QgbHpvX2J5dGVwIGIgID0gc19iKHMpOworICAgIGNvbnN0IGx6b19ieXRlcCBicCA9IHNfYihzKSArIHMtPmJwOworICAgIGNvbnN0IGx6b19ieXRlcCBieCA9IHNfYihzKSArIHMtPmJwICsgcy0+bG9vazsKKyAgICB1bnNpZ25lZCBjaGFyIHNjYW5fZW5kMTsKKworICAgIGFzc2VydChzLT5tX2xlbiA+IDApOworCisgICAgc2Nhbl9lbmQxID0gYnBbbV9sZW4gLSAxXTsKKyAgICBmb3IgKCA7IGNudC0tID4gMDsgbm9kZSA9IHNfc3VjYzMocylbbm9kZV0pCisgICAgeworICAgICAgICBwMSA9IGJwOworICAgICAgICBwMiA9IGIgKyBub2RlOworICAgICAgICBweCA9IGJ4OworCisgICAgICAgIGFzc2VydChtX2xlbiA8IHMtPmxvb2spOworCisgICAgICAgIGlmICgKKyNpZiAxCisgICAgICAgICAgICBwMlttX2xlbiAtIDFdID09IHNjYW5fZW5kMSAmJgorICAgICAgICAgICAgcDJbbV9sZW5dID09IHAxW21fbGVuXSAmJgorI2VuZGlmCisgICAgICAgICAgICBwMlswXSA9PSBwMVswXSAmJgorICAgICAgICAgICAgcDJbMV0gPT0gcDFbMV0pCisgICAgICAgIHsKKyAgICAgICAgICAgIGx6b191aW50IGk7CisgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChicCwmYltub2RlXSwzKSA9PSAwKTsKKworI2lmIDAgJiYgZGVmaW5lZChMWk9fVU5BTElHTkVEX09LXzQpCisgICAgICAgICAgICBwMSArPSAzOyBwMiArPSAzOworICAgICAgICAgICAgd2hpbGUgKHAxIDwgcHggJiYgKiAoY29uc3QgbHpvX3VpbnQzMnApIHAxID09ICogKGNvbnN0IGx6b191aW50MzJwKSBwMikKKyAgICAgICAgICAgICAgICBwMSArPSA0LCBwMiArPSA0OworICAgICAgICAgICAgd2hpbGUgKHAxIDwgcHggJiYgKnAxID09ICpwMikKKyAgICAgICAgICAgICAgICBwMSArPSAxLCBwMiArPSAxOworI2Vsc2UKKyAgICAgICAgICAgIHAxICs9IDI7IHAyICs9IDI7CisgICAgICAgICAgICBkbyB7fSB3aGlsZSAoKytwMSA8IHB4ICYmICpwMSA9PSAqKytwMik7CisjZW5kaWYKKyAgICAgICAgICAgIGkgPSBwZChwMSwgYnApOworCisjaWZkZWYgTFpPX0RFQlVHCisgICAgICAgICAgICBpZiAobHpvX21lbWNtcChicCwmYltub2RlXSxpKSAhPSAwKQorICAgICAgICAgICAgICAgIHByaW50ZigiJTVsZCAlNWxkICUwMnglMDJ4ICUwMnglMDJ4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgKGxvbmcpcy0+YnAsIChsb25nKSBub2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgYnBbMF0sIGJwWzFdLCBiW25vZGVdLCBiW25vZGUrMV0pOworI2VuZGlmCisgICAgICAgICAgICBhc3NlcnQobHpvX21lbWNtcChicCwmYltub2RlXSxpKSA9PSAwKTsKKworI2lmIGRlZmluZWQoU1dEX0JFU1RfT0ZGKQorICAgICAgICAgICAgaWYgKGkgPCBTV0RfQkVTVF9PRkYpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHMtPmJlc3RfcG9zW2ldID09IDApCisgICAgICAgICAgICAgICAgICAgIHMtPmJlc3RfcG9zW2ldID0gbm9kZSArIDE7CisgICAgICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChpID4gbV9sZW4pCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcy0+bV9sZW4gPSBtX2xlbiA9IGk7CisgICAgICAgICAgICAgICAgcy0+bV9wb3MgPSBub2RlOworICAgICAgICAgICAgICAgIGlmIChtX2xlbiA9PSBzLT5sb29rKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1fbGVuID49IHMtPm5pY2VfbGVuZ3RoKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgaWYgKG1fbGVuID4gKGx6b191aW50KSBzX2Jlc3QzKHMpW25vZGVdKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgc2Nhbl9lbmQxID0gYnBbbV9sZW4gLSAxXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNpZmRlZiBIRUFEMgorCitzdGF0aWMKK2x6b19ib29sIHN3ZF9zZWFyY2gyKGx6b19zd2RfcCBzKQoreworICAgIGx6b191aW50IGtleTsKKworICAgIGFzc2VydChzLT5sb29rID49IDIpOworICAgIGFzc2VydChzLT5tX2xlbiA+IDApOworCisgICAga2V5ID0gc19oZWFkMihzKVsgSEVBRDIoc19iKHMpLHMtPmJwKSBdOworICAgIGlmIChrZXkgPT0gTklMMikKKyAgICAgICAgcmV0dXJuIDA7CisjaWZkZWYgTFpPX0RFQlVHCisgICAgaWYgKGx6b19tZW1jbXAoJnNfYihzKVtzLT5icF0sJnNfYihzKVtrZXldLDIpICE9IDApCisgICAgICAgIHByaW50ZigiJTVsZCAlNWxkICUwMnglMDJ4ICUwMnglMDJ4XG4iLCAobG9uZylzLT5icCwgKGxvbmcpa2V5LAorICAgICAgICAgICAgICAgIHNfYihzKVtzLT5icF0sIHNfYihzKVtzLT5icCsxXSwgc19iKHMpW2tleV0sIHNfYihzKVtrZXkrMV0pOworI2VuZGlmCisgICAgYXNzZXJ0KGx6b19tZW1jbXAoJnNfYihzKVtzLT5icF0sJnNfYihzKVtrZXldLDIpID09IDApOworI2lmIGRlZmluZWQoU1dEX0JFU1RfT0ZGKQorICAgIGlmIChzLT5iZXN0X3Bvc1syXSA9PSAwKQorICAgICAgICBzLT5iZXN0X3Bvc1syXSA9IGtleSArIDE7CisjZW5kaWYKKworICAgIGlmIChzLT5tX2xlbiA8IDIpCisgICAgeworICAgICAgICBzLT5tX2xlbiA9IDI7CisgICAgICAgIHMtPm1fcG9zID0ga2V5OworICAgIH0KKyAgICByZXR1cm4gMTsKK30KKworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMKK3ZvaWQgc3dkX2ZpbmRiZXN0KGx6b19zd2RfcCBzKQoreworICAgIGx6b191aW50IGtleTsKKyAgICBsem9fdWludCBjbnQsIG5vZGU7CisgICAgbHpvX3VpbnQgbGVuOworCisgICAgYXNzZXJ0KHMtPm1fbGVuID4gMCk7CisKKyAgICAvKiBnZXQgY3VycmVudCBoZWFkLCBhZGQgYnAgaW50byBIRUFEMyAqLworICAgIGtleSA9IEhFQUQzKHNfYihzKSxzLT5icCk7CisgICAgbm9kZSA9IHNfc3VjYzMocylbcy0+YnBdID0gc19nZXRfaGVhZDMocyxrZXkpOworICAgIGNudCA9IHNfbGxlbjMocylba2V5XSsrOworICAgIGFzc2VydChzX2xsZW4zKHMpW2tleV0gPD0gU1dEX04gKyBTV0RfRik7CisgICAgaWYgKGNudCA+IHMtPm1heF9jaGFpbiAmJiBzLT5tYXhfY2hhaW4gPiAwKQorICAgICAgICBjbnQgPSBzLT5tYXhfY2hhaW47CisgICAgc19oZWFkMyhzKVtrZXldID0gU1dEX1VJTlQocy0+YnApOworCisgICAgcy0+Yl9jaGFyID0gc19iKHMpW3MtPmJwXTsKKyAgICBsZW4gPSBzLT5tX2xlbjsKKyAgICBpZiAocy0+bV9sZW4gPj0gcy0+bG9vaykKKyAgICB7CisgICAgICAgIGlmIChzLT5sb29rID09IDApCisgICAgICAgICAgICBzLT5iX2NoYXIgPSAtMTsKKyAgICAgICAgcy0+bV9vZmYgPSAwOworICAgICAgICBzX2Jlc3QzKHMpW3MtPmJwXSA9IFNXRF9VSU5UKHMtPmYgKyAxKTsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyNpZmRlZiBIRUFEMgorICAgICAgICBpZiAoc3dkX3NlYXJjaDIocykpCisjZW5kaWYKKyAgICAgICAgICAgIGlmIChzLT5sb29rID49IDMpCisgICAgICAgICAgICAgICAgc3dkX3NlYXJjaChzLG5vZGUsY250KTsKKyAgICAgICAgaWYgKHMtPm1fbGVuID4gbGVuKQorICAgICAgICAgICAgcy0+bV9vZmYgPSBzd2RfcG9zMm9mZihzLHMtPm1fcG9zKTsKKyAgICAgICAgc19iZXN0MyhzKVtzLT5icF0gPSBTV0RfVUlOVChzLT5tX2xlbik7CisKKyNpZiBkZWZpbmVkKFNXRF9CRVNUX09GRikKKyAgICAgICAgaWYgKHMtPnVzZV9iZXN0X29mZikKKyAgICAgICAgeworICAgICAgICAgICAgaW50IGk7CisgICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgU1dEX0JFU1RfT0ZGOyBpKyspCisgICAgICAgICAgICAgICAgaWYgKHMtPmJlc3RfcG9zW2ldID4gMCkKKyAgICAgICAgICAgICAgICAgICAgcy0+YmVzdF9vZmZbaV0gPSBzd2RfcG9zMm9mZihzLHMtPmJlc3RfcG9zW2ldLTEpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcy0+YmVzdF9vZmZbaV0gPSAwOworICAgICAgICB9CisjZW5kaWYKKyAgICB9CisKKyAgICBzd2RfcmVtb3ZlX25vZGUocyxzLT5ycCk7CisKKyNpZmRlZiBIRUFEMgorICAgIC8qIGFkZCBicCBpbnRvIEhFQUQyICovCisgICAga2V5ID0gSEVBRDIoc19iKHMpLHMtPmJwKTsKKyAgICBzX2hlYWQyKHMpW2tleV0gPSBTV0RfVUlOVChzLT5icCk7CisjZW5kaWYKK30KKworCisjdW5kZWYgSEVBRDMKKyN1bmRlZiBIRUFEMgorI3VuZGVmIHNfZ2V0X2hlYWQzCisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9sem9fdXRpbC5jIGIvbHpvLTIuMDMvc3JjL2x6b191dGlsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiZmI0MAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3NyYy9sem9fdXRpbC5jCkBAIC0wLDAgKzEsMTY1IEBACisvKiBsem9fdXRpbC5jIC0tIHV0aWxpdGllcyBmb3IgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJsem9fY29uZi5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLy8KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogSWYgeW91IHVzZSB0aGUgTFpPIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBJIHdvdWxkIGFwcHJlY2lhdGUgdGhhdCB5b3UKKyAqIGtlZXAgdGhpcyBjb3B5cmlnaHQgc3RyaW5nIGluIHRoZSBleGVjdXRhYmxlIG9mIHlvdXIgcHJvZHVjdC4KKy4qLworCitjb25zdCBjaGFyIF9fbHpvX2NvcHlyaWdodFtdID0KKyNpZiAhZGVmaW5lZChfX0xaT19JTl9NSU5MWk8pCisgICAgLyogc2F2ZSBzcGFjZSBhcyBzb21lIHBlb3BsZSB3YW50IGEgcmVhbGx5IHNtYWxsIGRlY29tcHJlc3NvciAqLworICAgIExaT19WRVJTSU9OX1NUUklORzsKKyNlbHNlCisgICAgIlxyXG5cbiIKKyAgICAiTFpPIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS5cbiIKKyAgICAiJENvcHlyaWdodDogTFpPIChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXJcbiIKKyAgICAiPG1hcmt1c0BvYmVyaHVtZXIuY29tPlxuIgorICAgICJodHRwOi8vd3d3Lm9iZXJodW1lci5jb20gJFxuXG4iCisgICAgIiRJZDogTFpPIHZlcnNpb246IHYiIExaT19WRVJTSU9OX1NUUklORyAiLCAiIExaT19WRVJTSU9OX0RBVEUgIiAkXG4iCisgICAgIiRCdWlsdDogIiBfX0RBVEVfXyAiICIgX19USU1FX18gIiAkXG4iCisgICAgIiRJbmZvOiAiIExaT19JTkZPX1NUUklORyAiICRcbiI7CisjZW5kaWYKKworCitMWk9fUFVCTElDKGNvbnN0IGx6b19ieXRlcCkKK2x6b19jb3B5cmlnaHQodm9pZCkKK3sKKyNpZiAoTFpPX09TX0RPUzE2ICYmIExaT19DQ19UVVJCT0MpCisgICAgcmV0dXJuIChsem9fdm9pZHApIF9fbHpvX2NvcHlyaWdodDsKKyNlbHNlCisgICAgcmV0dXJuIChjb25zdCBsem9fYnl0ZXApIF9fbHpvX2NvcHlyaWdodDsKKyNlbmRpZgorfQorCitMWk9fUFVCTElDKHVuc2lnbmVkKQorbHpvX3ZlcnNpb24odm9pZCkKK3sKKyAgICByZXR1cm4gTFpPX1ZFUlNJT047Cit9CisKK0xaT19QVUJMSUMoY29uc3QgY2hhciAqKQorbHpvX3ZlcnNpb25fc3RyaW5nKHZvaWQpCit7CisgICAgcmV0dXJuIExaT19WRVJTSU9OX1NUUklORzsKK30KKworTFpPX1BVQkxJQyhjb25zdCBjaGFyICopCitsem9fdmVyc2lvbl9kYXRlKHZvaWQpCit7CisgICAgcmV0dXJuIExaT19WRVJTSU9OX0RBVEU7Cit9CisKK0xaT19QVUJMSUMoY29uc3QgbHpvX2NoYXJwKQorX2x6b192ZXJzaW9uX3N0cmluZyh2b2lkKQoreworICAgIHJldHVybiBMWk9fVkVSU0lPTl9TVFJJTkc7Cit9CisKK0xaT19QVUJMSUMoY29uc3QgbHpvX2NoYXJwKQorX2x6b192ZXJzaW9uX2RhdGUodm9pZCkKK3sKKyAgICByZXR1cm4gTFpPX1ZFUlNJT05fREFURTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGFkbGVyMzIgY2hlY2tzdW0KKy8vIGFkYXB0ZWQgZnJvbSBmcmVlIGNvZGUgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KKy8vIHNlZSBodHRwOi8vd3d3LnpsaWIub3JnLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIExaT19CQVNFIDY1NTIxdSAvKiBsYXJnZXN0IHByaW1lIHNtYWxsZXIgdGhhbiA2NTUzNiAqLworI2RlZmluZSBMWk9fTk1BWCA1NTUyCisvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSkoQkFTRS0xKSA8PSAyXjMyLTEgKi8KKworI2RlZmluZSBMWk9fRE8xKGJ1ZixpKSAgczEgKz0gYnVmW2ldOyBzMiArPSBzMQorI2RlZmluZSBMWk9fRE8yKGJ1ZixpKSAgTFpPX0RPMShidWYsaSk7IExaT19ETzEoYnVmLGkrMSk7CisjZGVmaW5lIExaT19ETzQoYnVmLGkpICBMWk9fRE8yKGJ1ZixpKTsgTFpPX0RPMihidWYsaSsyKTsKKyNkZWZpbmUgTFpPX0RPOChidWYsaSkgIExaT19ETzQoYnVmLGkpOyBMWk9fRE80KGJ1ZixpKzQpOworI2RlZmluZSBMWk9fRE8xNihidWYsaSkgTFpPX0RPOChidWYsaSk7IExaT19ETzgoYnVmLGkrOCk7CisKK0xaT19QVUJMSUMobHpvX3VpbnQzMikKK2x6b19hZGxlcjMyKGx6b191aW50MzIgYWRsZXIsIGNvbnN0IGx6b19ieXRlcCBidWYsIGx6b191aW50IGxlbikKK3sKKyAgICBsem9fdWludDMyIHMxID0gYWRsZXIgJiAweGZmZmY7CisgICAgbHpvX3VpbnQzMiBzMiA9IChhZGxlciA+PiAxNikgJiAweGZmZmY7CisgICAgdW5zaWduZWQgazsKKworICAgIGlmIChidWYgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICB3aGlsZSAobGVuID4gMCkKKyAgICB7CisgICAgICAgIGsgPSBsZW4gPCBMWk9fTk1BWCA/ICh1bnNpZ25lZCkgbGVuIDogTFpPX05NQVg7CisgICAgICAgIGxlbiAtPSBrOworICAgICAgICBpZiAoayA+PSAxNikgZG8KKyAgICAgICAgeworICAgICAgICAgICAgTFpPX0RPMTYoYnVmLDApOworICAgICAgICAgICAgYnVmICs9IDE2OworICAgICAgICAgICAgayAtPSAxNjsKKyAgICAgICAgfSB3aGlsZSAoayA+PSAxNik7CisgICAgICAgIGlmIChrICE9IDApIGRvCisgICAgICAgIHsKKyAgICAgICAgICAgIHMxICs9ICpidWYrKzsKKyAgICAgICAgICAgIHMyICs9IHMxOworICAgICAgICB9IHdoaWxlICgtLWsgPiAwKTsKKyAgICAgICAgczEgJT0gTFpPX0JBU0U7CisgICAgICAgIHMyICU9IExaT19CQVNFOworICAgIH0KKyAgICByZXR1cm4gKHMyIDw8IDE2KSB8IHMxOworfQorCisjdW5kZWYgTFpPX0RPMQorI3VuZGVmIExaT19ETzIKKyN1bmRlZiBMWk9fRE80CisjdW5kZWYgTFpPX0RPOAorI3VuZGVmIExaT19ETzE2CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvbWluaWFjYy5oIGIvbHpvLTIuMDMvc3JjL21pbmlhY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMTVhMjBiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL21pbmlhY2MuaApAQCAtMCwwICsxLDY1NTMgQEAKKy8qIEFDQyAtLS0gQXV0b21hdGljIENvbXBpbGVyIENvbmZpZ3VyYXRpb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKworI2lmbmRlZiBfX0FDQ19IX0lOQ0xVREVECisjZGVmaW5lIF9fQUNDX0hfSU5DTFVERUQgMQorI2RlZmluZSBBQ0NfVkVSU0lPTiAgICAgMjAwODA0MzBMCisjaWYgZGVmaW5lZChfX0NZR1dJTjMyX18pICYmICFkZWZpbmVkKF9fQ1lHV0lOX18pCisjICBkZWZpbmUgX19DWUdXSU5fXyBfX0NZR1dJTjMyX18KKyNlbmRpZgorI2lmIGRlZmluZWQoX19JQk1DUFBfXykgJiYgIWRlZmluZWQoX19JQk1DX18pCisjICBkZWZpbmUgX19JQk1DX18gX19JQk1DUFBfXworI2VuZGlmCisjaWYgZGVmaW5lZChfX0lDTCkgJiYgZGVmaW5lZChfV0lOMzIpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpCisjICBkZWZpbmUgX19JTlRFTF9DT01QSUxFUiBfX0lDTAorI2VuZGlmCisjaWYgMSAmJiBkZWZpbmVkKF9fSU5URVJJWCkgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX0FMTF9TT1VSQ0UpCisjICBkZWZpbmUgX0FMTF9TT1VSQ0UgMQorI2VuZGlmCisjaWYgZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChfX1I1OTAwX18pCisjICBpZiAhZGVmaW5lZChfX0xPTkdfTUFYX18pCisjICAgIGRlZmluZSBfX0xPTkdfTUFYX18gOTIyMzM3MjAzNjg1NDc3NTgwN0wKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmIGRlZmluZWQoX19saW51eF9fKQorIyAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogMTkzKQorI2VuZGlmCisjaWYgZGVmaW5lZChfX0tFSUxfXykgJiYgZGVmaW5lZChfX0MxNjZfXykKKyMgIHByYWdtYSB3YXJuaW5nIGRpc2FibGUgPSAzMjIKKyNlbGlmIDAgJiYgZGVmaW5lZChfX0MyNTFfXykKKyMgIHByYWdtYSB3YXJuaW5nIGRpc2FibGUgPSAzMjIKKyNlbmRpZgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmICFkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpICYmICFkZWZpbmVkKF9fTVdFUktTX18pCisjICBpZiAoX01TQ19WRVIgPj0gMTMwMCkKKyMgICAgcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDY2OCkKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fUE9DQ19fKSAmJiBkZWZpbmVkKF9XSU4zMikKKyMgIGlmIChfX1BPQ0NfXyA+PSA0MDApCisjICAgIHByYWdtYSB3YXJuKGRpc2FibGU6IDIyMTYpCisjICBlbmRpZgorI2VuZGlmCisjaWYgMCAmJiBkZWZpbmVkKF9fV0FUQ09NQ19fKQorIyAgaWYgKF9fV0FUQ09NQ19fID49IDEwNTApICYmIChfX1dBVENPTUNfXyA8IDEwNjApCisjICAgIHByYWdtYSB3YXJuaW5nIDIwMyA5CisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0JPUkxBTkRDX18pICYmIGRlZmluZWQoX19NU0RPU19fKSAmJiAhZGVmaW5lZChfX0ZMQVRfXykKKyMgIHByYWdtYSBvcHRpb24gLWgKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX0NGR19OT19DT05GSUdfSEVBREVSKQorI2VsaWYgZGVmaW5lZChBQ0NfQ0ZHX0NPTkZJR19IRUFERVIpCisjICBpbmNsdWRlIEFDQ19DRkdfQ09ORklHX0hFQURFUgorI2Vsc2UKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX0NGR19OT19MSU1JVFNfSCkKKyNlbGlmIGRlZmluZWQoQUNDX0xJQkNfTkFLRUQpIHx8IGRlZmluZWQoQUNDX0JST0tFTl9MSU1JVFNfSCkKKyNpZm5kZWYgX19BQ0NfRkFMTEJBQ0tfTElNSVRTX0hfSU5DTFVERUQKKyNkZWZpbmUgX19BQ0NfRkFMTEJBQ0tfTElNSVRTX0hfSU5DTFVERUQKKyN1bmRlZiBDSEFSX0JJVAorI2RlZmluZSBDSEFSX0JJVCAgICAgICAgOAorI2lmbmRlZiBNQl9MRU5fTUFYCisjZGVmaW5lIE1CX0xFTl9NQVggICAgICAxCisjZW5kaWYKKyNpZm5kZWYgX19TQ0hBUl9NQVhfXworI2RlZmluZSBfX1NDSEFSX01BWF9fICAgMTI3CisjZW5kaWYKKyNpZm5kZWYgX19TSFJUX01BWF9fCisjZGVmaW5lIF9fU0hSVF9NQVhfXyAgICAzMjc2NworI2VuZGlmCisjaWZuZGVmIF9fSU5UX01BWF9fCisjZGVmaW5lIF9fSU5UX01BWF9fICAgICAyMTQ3NDgzNjQ3CisjZW5kaWYKKyNpZm5kZWYgX19MT05HX01BWF9fCisjaWYgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX0xQNjQpIHx8IGRlZmluZWQoX19NSVBTX1BTWDJfXykKKyNkZWZpbmUgX19MT05HX01BWF9fICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDdMCisjZWxzZQorI2RlZmluZSBfX0xPTkdfTUFYX18gICAgMjE0NzQ4MzY0N0wKKyNlbmRpZgorI2VuZGlmCisjdW5kZWYgU0NIQVJfTUlOCisjdW5kZWYgU0NIQVJfTUFYCisjdW5kZWYgVUNIQVJfTUFYCisjZGVmaW5lIFNDSEFSX01JTiAgICAgICAoLTEgLSBTQ0hBUl9NQVgpCisjZGVmaW5lIFNDSEFSX01BWCAgICAgICAoX19TQ0hBUl9NQVhfXykKKyNkZWZpbmUgVUNIQVJfTUFYICAgICAgIChTQ0hBUl9NQVggKiAyICsgMSkKKyN1bmRlZiBTSFJUX01JTgorI3VuZGVmIFNIUlRfTUFYCisjdW5kZWYgVVNIUlRfTUFYCisjZGVmaW5lIFNIUlRfTUlOICAgICAgICAoLTEgLSBTSFJUX01BWCkKKyNkZWZpbmUgU0hSVF9NQVggICAgICAgIChfX1NIUlRfTUFYX18pCisjaWYgKChfX0lOVF9NQVhfXykgPT0gKF9fU0hSVF9NQVhfXykpCisjZGVmaW5lIFVTSFJUX01BWCAgICAgICAoU0hSVF9NQVggKiAyVSArIDFVKQorI2Vsc2UKKyNkZWZpbmUgVVNIUlRfTUFYICAgICAgIChTSFJUX01BWCAqIDIgKyAxKQorI2VuZGlmCisjdW5kZWYgSU5UX01JTgorI3VuZGVmIElOVF9NQVgKKyN1bmRlZiBVSU5UX01BWAorI2RlZmluZSBJTlRfTUlOICAgICAgICAgKC0xIC0gSU5UX01BWCkKKyNkZWZpbmUgSU5UX01BWCAgICAgICAgIChfX0lOVF9NQVhfXykKKyNkZWZpbmUgVUlOVF9NQVggICAgICAgIChJTlRfTUFYICogMlUgKyAxVSkKKyN1bmRlZiBMT05HX01JTgorI3VuZGVmIExPTkdfTUFYCisjdW5kZWYgVUxPTkdfTUFYCisjZGVmaW5lIExPTkdfTUlOICAgICAgICAoLTFMIC0gTE9OR19NQVgpCisjZGVmaW5lIExPTkdfTUFYICAgICAgICAoKF9fTE9OR19NQVhfXykgKyAwTCkKKyNkZWZpbmUgVUxPTkdfTUFYICAgICAgIChMT05HX01BWCAqIDJVTCArIDFVTCkKKyN1bmRlZiBDSEFSX01JTgorI3VuZGVmIENIQVJfTUFYCisjaWYgZGVmaW5lZChfX0NIQVJfVU5TSUdORURfXykgfHwgZGVmaW5lZChfQ0hBUl9VTlNJR05FRCkKKyNkZWZpbmUgQ0hBUl9NSU4gICAgICAgIDAKKyNkZWZpbmUgQ0hBUl9NQVggICAgICAgIFVDSEFSX01BWAorI2Vsc2UKKyNkZWZpbmUgQ0hBUl9NSU4gICAgICAgIFNDSEFSX01JTgorI2RlZmluZSBDSEFSX01BWCAgICAgICAgU0NIQVJfTUFYCisjZW5kaWYKKyNlbmRpZgorI2Vsc2UKKyMgIGluY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaWYgMAorI2RlZmluZSBBQ0NfMHhmZmZmTCAgICAgICAgICAgICAweGZmZmZ1bAorI2RlZmluZSBBQ0NfMHhmZmZmZmZmZkwgICAgICAgICAweGZmZmZmZmZmdWwKKyNlbHNlCisjZGVmaW5lIEFDQ18weGZmZmZMICAgICAgICAgICAgIDY1NTM1dWwKKyNkZWZpbmUgQUNDXzB4ZmZmZmZmZmZMICAgICAgICAgNDI5NDk2NzI5NXVsCisjZW5kaWYKKyNpZiAoQUNDXzB4ZmZmZkwgPT0gQUNDXzB4ZmZmZmZmZmZMKQorIyAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAxIgorI2VuZGlmCisjaWYgKDE2dWwgKiAxNjM4NHVsICE9IDI2MjE0NHVsKQorIyAgZXJyb3IgInlvdXIgcHJlcHJvY2Vzc29yIGlzIGJyb2tlbiAyIgorI2VuZGlmCisjaWYgMAorI2lmICgzMjc2NyA+PSA0Mjk0OTY3Mjk1dWwpCisjICBlcnJvciAieW91ciBwcmVwcm9jZXNzb3IgaXMgYnJva2VuIDMiCisjZW5kaWYKKyNpZiAoNjU1MzV1ID49IDQyOTQ5NjcyOTV1bCkKKyMgIGVycm9yICJ5b3VyIHByZXByb2Nlc3NvciBpcyBicm9rZW4gNCIKKyNlbmRpZgorI2VuZGlmCisjaWYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKQorI2lmIGRlZmluZWQoX19aVENfXykgJiYgZGVmaW5lZChfX0k4Nl9fKSAmJiAhZGVmaW5lZChfX09TMl9fKQorIyAgaWYgIWRlZmluZWQoTVNET1MpCisjICAgIGRlZmluZSBNU0RPUyAxCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoX01TRE9TKQorIyAgICBkZWZpbmUgX01TRE9TIDEKKyMgIGVuZGlmCisjZWxpZiAwICYmIGRlZmluZWQoX19WRVJTSU9OKSAmJiBkZWZpbmVkKE1CX0xFTl9NQVgpCisjICBpZiAoX19WRVJTSU9OID09IDUyMCkgJiYgKE1CX0xFTl9NQVggPT0gMSkKKyMgICAgaWYgIWRlZmluZWQoX19BWlRFQ19DX18pCisjICAgICAgZGVmaW5lIF9fQVpURUNfQ19fIF9fVkVSU0lPTgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX0RPU19fKQorIyAgICAgIGRlZmluZSBfX0RPU19fIDEKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoTV9JODZITSkgJiYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKQorIyAgZGVmaW5lIHB0cmRpZmZfdCBsb25nCisjICBkZWZpbmUgX1BUUkRJRkZfVF9ERUZJTkVECisjZW5kaWYKKyNpZiAoVUlOVF9NQVggPT0gQUNDXzB4ZmZmZkwpCisjICB1bmRlZiBfX0FDQ19SRU5BTUVfQQorIyAgdW5kZWYgX19BQ0NfUkVOQU1FX0IKKyMgIGlmIGRlZmluZWQoX19BWlRFQ19DX18pICYmIGRlZmluZWQoX19ET1NfXykKKyMgICAgZGVmaW5lIF9fQUNDX1JFTkFNRV9BIDEKKyMgIGVsaWYgZGVmaW5lZChfTVNDX1ZFUikgJiYgZGVmaW5lZChNU0RPUykKKyMgICAgaWYgKF9NU0NfVkVSIDwgNjAwKQorIyAgICAgIGRlZmluZSBfX0FDQ19SRU5BTUVfQSAxCisjICAgIGVsaWYgKF9NU0NfVkVSIDwgNzAwKQorIyAgICAgIGRlZmluZSBfX0FDQ19SRU5BTUVfQiAxCisjICAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQoX19UU0NfXykgJiYgZGVmaW5lZChfX09TMl9fKQorIyAgICBkZWZpbmUgX19BQ0NfUkVOQU1FX0EgMQorIyAgZWxpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgZGVmaW5lZChfX1RVUkJPQ19fKSAmJiAoX19UVVJCT0NfXyA8IDB4MDQxMCkKKyMgICAgZGVmaW5lIF9fQUNDX1JFTkFNRV9BIDEKKyMgIGVsaWYgZGVmaW5lZChfX1BBQ0lGSUNfXykgJiYgZGVmaW5lZChET1MpCisjICAgIGlmICFkZWZpbmVkKF9fZmFyKQorIyAgICAgIGRlZmluZSBfX2ZhciBmYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19uZWFyKQorIyAgICAgIGRlZmluZSBfX25lYXIgbmVhcgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoX19BQ0NfUkVOQU1FX0EpCisjICAgIGlmICFkZWZpbmVkKF9fY2RlY2wpCisjICAgICAgZGVmaW5lIF9fY2RlY2wgY2RlY2wKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19mYXIpCisjICAgICAgZGVmaW5lIF9fZmFyIGZhcgorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX2h1Z2UpCisjICAgICAgZGVmaW5lIF9faHVnZSBodWdlCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fbmVhcikKKyMgICAgICBkZWZpbmUgX19uZWFyIG5lYXIKKyMgICAgZW5kaWYKKyMgICAgaWYgIWRlZmluZWQoX19wYXNjYWwpCisjICAgICAgZGVmaW5lIF9fcGFzY2FsIHBhc2NhbAorIyAgICBlbmRpZgorIyAgICBpZiAhZGVmaW5lZChfX2h1Z2UpCisjICAgICAgZGVmaW5lIF9faHVnZSBodWdlCisjICAgIGVuZGlmCisjICBlbGlmIGRlZmluZWQoX19BQ0NfUkVOQU1FX0IpCisjICAgIGlmICFkZWZpbmVkKF9fY2RlY2wpCisjICAgICAgZGVmaW5lIF9fY2RlY2wgX2NkZWNsCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fZmFyKQorIyAgICAgIGRlZmluZSBfX2ZhciBfZmFyCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9faHVnZSkKKyMgICAgICBkZWZpbmUgX19odWdlIF9odWdlCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fbmVhcikKKyMgICAgICBkZWZpbmUgX19uZWFyIF9uZWFyCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fcGFzY2FsKQorIyAgICAgIGRlZmluZSBfX3Bhc2NhbCBfcGFzY2FsCisjICAgIGVuZGlmCisjICBlbGlmIChkZWZpbmVkKF9fUFVSRUNfXykgfHwgZGVmaW5lZChfX1RVUkJPQ19fKSkgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgICBpZiAhZGVmaW5lZChfX2NkZWNsKQorIyAgICAgIGRlZmluZSBfX2NkZWNsIGNkZWNsCisjICAgIGVuZGlmCisjICAgIGlmICFkZWZpbmVkKF9fcGFzY2FsKQorIyAgICAgIGRlZmluZSBfX3Bhc2NhbCBwYXNjYWwKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjICB1bmRlZiBfX0FDQ19SRU5BTUVfQQorIyAgdW5kZWYgX19BQ0NfUkVOQU1FX0IKKyNlbmRpZgorI2lmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmTCkKKyNpZiBkZWZpbmVkKF9fQVpURUNfQ19fKSAmJiBkZWZpbmVkKF9fRE9TX18pCisjICBkZWZpbmUgQUNDX0JST0tFTl9DREVDTF9BTFRfU1lOVEFYIDEKKyNlbGlmIGRlZmluZWQoX01TQ19WRVIpICYmIGRlZmluZWQoTVNET1MpCisjICBpZiAoX01TQ19WRVIgPCA2MDApCisjICAgIGRlZmluZSBBQ0NfQlJPS0VOX0lOVEVHUkFMX0NPTlNUQU5UUyAxCisjICBlbmRpZgorIyAgaWYgKF9NU0NfVkVSIDwgNzAwKQorIyAgICBkZWZpbmUgQUNDX0JST0tFTl9JTlRFR1JBTF9QUk9NT1RJT04gMQorIyAgICBkZWZpbmUgQUNDX0JST0tFTl9TSVpFT0YgMQorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19QQUNJRklDX18pICYmIGRlZmluZWQoRE9TKQorIyAgZGVmaW5lIEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTIDEKKyNlbGlmIGRlZmluZWQoX19UVVJCT0NfXykgJiYgZGVmaW5lZChfX01TRE9TX18pCisjICBpZiAoX19UVVJCT0NfXyA8IDB4MDE1MCkKKyMgICAgZGVmaW5lIEFDQ19CUk9LRU5fQ0RFQ0xfQUxUX1NZTlRBWCAxCisjICAgIGRlZmluZSBBQ0NfQlJPS0VOX0lOVEVHUkFMX0NPTlNUQU5UUyAxCisjICAgIGRlZmluZSBBQ0NfQlJPS0VOX0lOVEVHUkFMX1BST01PVElPTiAxCisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDAyMDApCisjICAgIGRlZmluZSBBQ0NfQlJPS0VOX1NJWkVPRiAxCisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDA0MDApICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgIGRlZmluZSBBQ0NfQlJPS0VOX0NERUNMX0FMVF9TWU5UQVggMQorIyAgZW5kaWYKKyNlbGlmIChkZWZpbmVkKF9fUFVSRUNfXykgfHwgZGVmaW5lZChfX1RVUkJPQ19fKSkgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgZGVmaW5lIEFDQ19CUk9LRU5fQ0RFQ0xfQUxUX1NZTlRBWCAxCisjICBkZWZpbmUgQUNDX0JST0tFTl9TSVpFT0YgMQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKSAmJiAoX19XQVRDT01DX18gPCA5MDApCisjICBkZWZpbmUgQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMgMQorI2VuZGlmCisjaWYgZGVmaW5lZChfQ1JBWSkgJiYgZGVmaW5lZChfQ1JBWTEpCisjICBkZWZpbmUgQUNDX0JST0tFTl9TSUdORURfUklHSFRfU0hJRlQgMQorI2VuZGlmCisjZGVmaW5lIEFDQ19QUF9TVFJJTkdJWkUoeCkgICAgICAgICAgICAgI3gKKyNkZWZpbmUgQUNDX1BQX01BQ1JPX0VYUEFORCh4KSAgICAgICAgICBBQ0NfUFBfU1RSSU5HSVpFKHgpCisjZGVmaW5lIEFDQ19QUF9DT05DQVQyKGEsYikgICAgICAgICAgICAgYSAjIyBiCisjZGVmaW5lIEFDQ19QUF9DT05DQVQzKGEsYixjKSAgICAgICAgICAgYSAjIyBiICMjIGMKKyNkZWZpbmUgQUNDX1BQX0NPTkNBVDQoYSxiLGMsZCkgICAgICAgICBhICMjIGIgIyMgYyAjIyBkCisjZGVmaW5lIEFDQ19QUF9DT05DQVQ1KGEsYixjLGQsZSkgICAgICAgYSAjIyBiICMjIGMgIyMgZCAjIyBlCisjZGVmaW5lIEFDQ19QUF9FQ09OQ0FUMihhLGIpICAgICAgICAgICAgQUNDX1BQX0NPTkNBVDIoYSxiKQorI2RlZmluZSBBQ0NfUFBfRUNPTkNBVDMoYSxiLGMpICAgICAgICAgIEFDQ19QUF9DT05DQVQzKGEsYixjKQorI2RlZmluZSBBQ0NfUFBfRUNPTkNBVDQoYSxiLGMsZCkgICAgICAgIEFDQ19QUF9DT05DQVQ0KGEsYixjLGQpCisjZGVmaW5lIEFDQ19QUF9FQ09OQ0FUNShhLGIsYyxkLGUpICAgICAgQUNDX1BQX0NPTkNBVDUoYSxiLGMsZCxlKQorI2lmIDEKKyNkZWZpbmUgQUNDX0NQUF9TVFJJTkdJWkUoeCkgICAgICAgICAgICAjeAorI2RlZmluZSBBQ0NfQ1BQX01BQ1JPX0VYUEFORCh4KSAgICAgICAgIEFDQ19DUFBfU1RSSU5HSVpFKHgpCisjZGVmaW5lIEFDQ19DUFBfQ09OQ0FUMihhLGIpICAgICAgICAgICAgYSAjIyBiCisjZGVmaW5lIEFDQ19DUFBfQ09OQ0FUMyhhLGIsYykgICAgICAgICAgYSAjIyBiICMjIGMKKyNkZWZpbmUgQUNDX0NQUF9DT05DQVQ0KGEsYixjLGQpICAgICAgICBhICMjIGIgIyMgYyAjIyBkCisjZGVmaW5lIEFDQ19DUFBfQ09OQ0FUNShhLGIsYyxkLGUpICAgICAgYSAjIyBiICMjIGMgIyMgZCAjIyBlCisjZGVmaW5lIEFDQ19DUFBfRUNPTkNBVDIoYSxiKSAgICAgICAgICAgQUNDX0NQUF9DT05DQVQyKGEsYikKKyNkZWZpbmUgQUNDX0NQUF9FQ09OQ0FUMyhhLGIsYykgICAgICAgICBBQ0NfQ1BQX0NPTkNBVDMoYSxiLGMpCisjZGVmaW5lIEFDQ19DUFBfRUNPTkNBVDQoYSxiLGMsZCkgICAgICAgQUNDX0NQUF9DT05DQVQ0KGEsYixjLGQpCisjZGVmaW5lIEFDQ19DUFBfRUNPTkNBVDUoYSxiLGMsZCxlKSAgICAgQUNDX0NQUF9DT05DQVQ1KGEsYixjLGQsZSkKKyNlbmRpZgorI2RlZmluZSBfX0FDQ19NQVNLX0dFTihvLGIpICAgICAoKCgoKG8pIDw8ICgoYiktMSkpIC0gKG8pKSA8PCAxKSArIChvKSkKKyNpZiAxICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBpZiAhZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgICBkZWZpbmUgX19TVERDX0NPTlNUQU5UX01BQ1JPUyAxCisjICBlbmRpZgorIyAgaWYgIWRlZmluZWQoX19TVERDX0xJTUlUX01BQ1JPUykKKyMgICAgZGVmaW5lIF9fU1REQ19MSU1JVF9NQUNST1MgMQorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBkZWZpbmUgQUNDX0VYVEVSTl9DIGV4dGVybiAiQyIKKyNlbHNlCisjICBkZWZpbmUgQUNDX0VYVEVSTl9DIGV4dGVybgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19BQ0NfT1NfT1ZFUlJJREUpCisjaWYgZGVmaW5lZChBQ0NfT1NfRlJFRVNUQU5ESU5HKQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAiZnJlZXN0YW5kaW5nIgorI2VsaWYgZGVmaW5lZChBQ0NfT1NfRU1CRURERUQpCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJlbWJlZGRlZCIKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKQorIyAgZGVmaW5lIEFDQ19PU19FTUJFRERFRCAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJlbWJlZGRlZCIKKyNlbGlmIGRlZmluZWQoX19DWUdXSU5fXykgJiYgZGVmaW5lZChfX0dOVUNfXykKKyMgIGRlZmluZSBBQ0NfT1NfQ1lHV0lOICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAiY3lnd2luIgorI2VsaWYgZGVmaW5lZChfX0VNWF9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEFDQ19PU19FTVggICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJlbXgiCisjZWxpZiBkZWZpbmVkKF9fQkVPU19fKQorIyAgZGVmaW5lIEFDQ19PU19CRU9TICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJiZW9zIgorI2VsaWYgZGVmaW5lZChfX0x5bnhfXykKKyMgIGRlZmluZSBBQ0NfT1NfTFlOWE9TICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAibHlueG9zIgorI2VsaWYgZGVmaW5lZChfX09TNDAwX18pCisjICBkZWZpbmUgQUNDX09TX09TNDAwICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICAgIm9zNDAwIgorI2VsaWYgZGVmaW5lZChfX1FOWF9fKQorIyAgZGVmaW5lIEFDQ19PU19RTlggICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJxbngiCisjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChfX0RQTUkzMl9fKSAmJiAoX19CT1JMQU5EQ19fID49IDB4MDQ2MCkKKyMgIGRlZmluZSBBQ0NfT1NfRE9TMzIgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAiZG9zMzIiCisjZWxpZiBkZWZpbmVkKF9fQk9STEFORENfXykgJiYgZGVmaW5lZChfX0RQTUkxNl9fKQorIyAgZGVmaW5lIEFDQ19PU19ET1MxNiAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJkb3MxNiIKKyNlbGlmIGRlZmluZWQoX19aVENfXykgJiYgZGVmaW5lZChET1MzODYpCisjICBkZWZpbmUgQUNDX09TX0RPUzMyICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICAgImRvczMyIgorI2VsaWYgZGVmaW5lZChfX09TMl9fKSB8fCBkZWZpbmVkKF9fT1MyVjJfXykKKyMgIGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmTCkKKyMgICAgZGVmaW5lIEFDQ19PU19PUzIxNiAgICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAib3MyMTYiCisjICBlbGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfT1NfT1MyICAgICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgIm9zMiIKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNoZWNrIHlvdXIgbGltaXRzLmggaGVhZGVyIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19XSU42NF9fKSB8fCBkZWZpbmVkKF9XSU42NCkgfHwgZGVmaW5lZChXSU42NCkKKyMgIGRlZmluZSBBQ0NfT1NfV0lONjQgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAid2luNjQiCisjZWxpZiBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoX19XSU5ET1dTXzM4Nl9fKQorIyAgZGVmaW5lIEFDQ19PU19XSU4zMiAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJ3aW4zMiIKKyNlbGlmIGRlZmluZWQoX19NV0VSS1NfXykgJiYgZGVmaW5lZChfX0lOVEVMX18pCisjICBkZWZpbmUgQUNDX09TX1dJTjMyICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICAgIndpbjMyIgorI2VsaWYgZGVmaW5lZChfX1dJTkRPV1NfXykgfHwgZGVmaW5lZChfV0lORE9XUykgfHwgZGVmaW5lZChfV2luZG93cykKKyMgIGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmTCkKKyMgICAgZGVmaW5lIEFDQ19PU19XSU4xNiAgICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAid2luMTYiCisjICBlbGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfT1NfV0lOMzIgICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgIndpbjMyIgorIyAgZWxzZQorIyAgICBlcnJvciAiY2hlY2sgeW91ciBsaW1pdHMuaCBoZWFkZXIiCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX0RPU19fKSB8fCBkZWZpbmVkKF9fTVNET1NfXykgfHwgZGVmaW5lZChfTVNET1MpIHx8IGRlZmluZWQoTVNET1MpIHx8IChkZWZpbmVkKF9fUEFDSUZJQ19fKSAmJiBkZWZpbmVkKERPUykpCisjICBpZiAoVUlOVF9NQVggPT0gQUNDXzB4ZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfT1NfRE9TMTYgICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgImRvczE2IgorIyAgZWxpZiAoVUlOVF9NQVggPT0gQUNDXzB4ZmZmZmZmZmZMKQorIyAgICBkZWZpbmUgQUNDX09TX0RPUzMyICAgICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICJkb3MzMiIKKyMgIGVsc2UKKyMgICAgZXJyb3IgImNoZWNrIHlvdXIgbGltaXRzLmggaGVhZGVyIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19XQVRDT01DX18pCisjICBpZiBkZWZpbmVkKF9fTlRfXykgJiYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKQorIyAgICBkZWZpbmUgQUNDX09TX0RPUzE2ICAgICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICJkb3MxNiIKKyMgIGVsaWYgZGVmaW5lZChfX05UX18pICYmIChfX1dBVENPTUNfXyA8IDExMDApCisjICAgIGRlZmluZSBBQ0NfT1NfV0lOMzIgICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgIndpbjMyIgorIyAgZWxpZiBkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX0xJTlVYX18pCisjICAgIGRlZmluZSBBQ0NfT1NfUE9TSVggICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgInBvc2l4IgorIyAgZWxzZQorIyAgICBlcnJvciAicGxlYXNlIHNwZWNpZnkgYSB0YXJnZXQgdXNpbmcgdGhlIC1idCBjb21waWxlciBvcHRpb24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX3BhbG1vc19fKQorIyAgZGVmaW5lIEFDQ19PU19QQUxNT1MgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJwYWxtb3MiCisjZWxpZiBkZWZpbmVkKF9fVE9TX18pIHx8IGRlZmluZWQoX19hdGFyaXN0X18pCisjICBkZWZpbmUgQUNDX09TX1RPUyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICAgInRvcyIKKyNlbGlmIGRlZmluZWQobWFjaW50b3NoKSAmJiAhZGVmaW5lZChfX3BwY19fKQorIyAgZGVmaW5lIEFDQ19PU19NQUNDTEFTU0lDICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJtYWNjbGFzc2ljIgorI2VsaWYgZGVmaW5lZChfX1ZNUykKKyMgIGRlZmluZSBBQ0NfT1NfVk1TICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAidm1zIgorI2VsaWYgKChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fUjU5MDBfXykpIHx8IGRlZmluZWQoX19NSVBTX1BTWDJfXykpCisjICBkZWZpbmUgQUNDX09TX0NPTlNPTEUgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfT1NfQ09OU09MRV9QUzIgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX09TICAgICAgICAgICAiY29uc29sZSIKKyMgIGRlZmluZSBBQ0NfSU5GT19PU19DT05TT0xFICAgInBzMiIKKyNlbGlmIChkZWZpbmVkKF9fbWlwc19fKSAmJiBkZWZpbmVkKF9fcHNwX18pKQorIyAgZGVmaW5lIEFDQ19PU19DT05TT0xFICAgICAgICAxCisjICBkZWZpbmUgQUNDX09TX0NPTlNPTEVfUFNQICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19PUyAgICAgICAgICAgImNvbnNvbGUiCisjICBkZWZpbmUgQUNDX0lORk9fT1NfQ09OU09MRSAgICJwc3AiCisjZWxzZQorIyAgZGVmaW5lIEFDQ19PU19QT1NJWCAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fT1MgICAgICAgICAgICJwb3NpeCIKKyNlbmRpZgorI2lmIChBQ0NfT1NfUE9TSVgpCisjICBpZiBkZWZpbmVkKF9BSVgpIHx8IGRlZmluZWQoX19BSVhfXykgfHwgZGVmaW5lZChfX2FpeF9fKQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX0FJWCAgICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgImFpeCIKKyMgIGVsaWYgZGVmaW5lZChfX0ZyZWVCU0RfXykKKyMgICAgZGVmaW5lIEFDQ19PU19QT1NJWF9GUkVFQlNEICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TX1BPU0lYICAgICAgICJmcmVlYnNkIgorIyAgZWxpZiBkZWZpbmVkKF9faHB1eF9fKSB8fCBkZWZpbmVkKF9faHB1eCkKKyMgICAgZGVmaW5lIEFDQ19PU19QT1NJWF9IUFVYICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TX1BPU0lYICAgICAgICJocHV4IgorIyAgZWxpZiBkZWZpbmVkKF9fSU5URVJJWCkKKyMgICAgZGVmaW5lIEFDQ19PU19QT1NJWF9JTlRFUklYICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TX1BPU0lYICAgICAgICJpbnRlcml4IgorIyAgZWxpZiBkZWZpbmVkKF9fSVJJWF9fKSB8fCBkZWZpbmVkKF9faXJpeF9fKQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX0lSSVggICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgImlyaXgiCisjICBlbGlmIGRlZmluZWQoX19saW51eF9fKSB8fCBkZWZpbmVkKF9fbGludXgpIHx8IGRlZmluZWQoX19MSU5VWF9fKQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX0xJTlVYICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgImxpbnV4IgorIyAgZWxpZiBkZWZpbmVkKF9fQVBQTEVfXykgfHwgZGVmaW5lZChfX01BQ09TX18pCisjICAgIGRlZmluZSBBQ0NfT1NfUE9TSVhfTUFDT1NYICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19PU19QT1NJWCAgICAgICAibWFjb3N4IgorIyAgZWxpZiBkZWZpbmVkKF9fbWluaXhfXykgfHwgZGVmaW5lZChfX21pbml4KQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX01JTklYICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgIm1pbml4IgorIyAgZWxpZiBkZWZpbmVkKF9fTmV0QlNEX18pCisjICAgIGRlZmluZSBBQ0NfT1NfUE9TSVhfTkVUQlNEICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19PU19QT1NJWCAgICAgICAibmV0YnNkIgorIyAgZWxpZiBkZWZpbmVkKF9fT3BlbkJTRF9fKQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX09QRU5CU0QgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgIm9wZW5ic2QiCisjICBlbGlmIGRlZmluZWQoX19vc2ZfXykKKyMgICAgZGVmaW5lIEFDQ19PU19QT1NJWF9PU0YgICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TX1BPU0lYICAgICAgICJvc2YiCisjICBlbGlmIGRlZmluZWQoX19zb2xhcmlzX18pIHx8IGRlZmluZWQoX19zdW4pCisjICAgIGlmIGRlZmluZWQoX19TVlI0KSB8fCBkZWZpbmVkKF9fc3ZyNF9fKQorIyAgICAgIGRlZmluZSBBQ0NfT1NfUE9TSVhfU09MQVJJUyAgMQorIyAgICAgIGRlZmluZSBBQ0NfSU5GT19PU19QT1NJWCAgICAgInNvbGFyaXMiCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgQUNDX09TX1BPU0lYX1NVTk9TICAgIDEKKyMgICAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICJzdW5vcyIKKyMgICAgZW5kaWYKKyMgIGVsaWYgZGVmaW5lZChfX3VsdHJpeF9fKSB8fCBkZWZpbmVkKF9fdWx0cml4KQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX1VMVFJJWCAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgInVsdHJpeCIKKyMgIGVsaWYgZGVmaW5lZChfVU5JQ09TKQorIyAgICBkZWZpbmUgQUNDX09TX1BPU0lYX1VOSUNPUyAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fT1NfUE9TSVggICAgICAgInVuaWNvcyIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19PU19QT1NJWF9VTktOT1dOICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX09TX1BPU0lYICAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2KQorIyAgaWYgKFVJTlRfTUFYICE9IEFDQ18weGZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjICBpZiAoVUxPTkdfTUFYICE9IEFDQ18weGZmZmZmZmZmTCkKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MzMiB8fCBBQ0NfT1NfT1MyIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjICBpZiAoVUlOVF9NQVggIT0gQUNDXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjICBpZiAoVUxPTkdfTUFYICE9IEFDQ18weGZmZmZmZmZmTCkKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChDSUwpICYmIGRlZmluZWQoX0dOVUNDKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19DSUxMWSAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJDaWxseSIKKyMgIGlmIGRlZmluZWQoX19DSUxMWV9fKQorIyAgICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fQ0lMTFlfXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgMCAmJiBkZWZpbmVkKFNEQ0MpICYmIGRlZmluZWQoX19WRVJTSU9OX18pICYmICFkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19TRENDICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJzZGNjIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKFNEQ0MpCisjZWxpZiBkZWZpbmVkKF9fUEFUSFNDQUxFX18pICYmIGRlZmluZWQoX19QQVRIQ0NfUEFUQ0hMRVZFTF9fKQorIyAgZGVmaW5lIEFDQ19DQ19QQVRIU0NBTEUgICAgICAoX19QQVRIQ0NfXyAqIDB4MTAwMDBMICsgX19QQVRIQ0NfTUlOT1JfXyAqIDB4MTAwICsgX19QQVRIQ0NfUEFUQ0hMRVZFTF9fKQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiUGF0aHNjYWxlIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIF9fUEFUSFNDQUxFX18KKyNlbGlmIGRlZmluZWQoX19JTlRFTF9DT01QSUxFUikKKyMgIGRlZmluZSBBQ0NfQ0NfSU5URUxDICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiSW50ZWwgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX0lOVEVMX0NPTVBJTEVSKQorIyAgaWYgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KQorIyAgICBkZWZpbmUgQUNDX0NDX1NZTlRBWF9NU0MgMQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0NDX1NZTlRBWF9HTlVDIDEKKyMgIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fUE9DQ19fKSAmJiBkZWZpbmVkKF9XSU4zMikKKyMgIGRlZmluZSBBQ0NfQ0NfUEVMTEVTQyAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiUGVsbGVzIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19QT0NDX18pCisjZWxpZiBkZWZpbmVkKF9fbGx2bV9fKSAmJiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fVkVSU0lPTl9fKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfTUlOT1JfXykgJiYgZGVmaW5lZChfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgICBkZWZpbmUgQUNDX0NDX0xMVk0gICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0NDX0xMVk0gICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDApCisjICBlbmRpZgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAibGx2bS1nY2MiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIF9fVkVSU0lPTl9fCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fVkVSU0lPTl9fKQorIyAgaWYgZGVmaW5lZChfX0dOVUNfTUlOT1JfXykgJiYgZGVmaW5lZChfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgICBkZWZpbmUgQUNDX0NDX0dOVUMgICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQorIyAgZWxpZiBkZWZpbmVkKF9fR05VQ19NSU5PUl9fKQorIyAgICBkZWZpbmUgQUNDX0NDX0dOVUMgICAgICAgICAoX19HTlVDX18gKiAweDEwMDAwTCArIF9fR05VQ19NSU5PUl9fICogMHgxMDApCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfQ0NfR05VQyAgICAgICAgIChfX0dOVUNfXyAqIDB4MTAwMDBMKQorIyAgZW5kaWYKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgImdjYyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgX19WRVJTSU9OX18KKyNlbGlmIGRlZmluZWQoX19BQ0tfXykgJiYgZGVmaW5lZChfQUNLKQorIyAgZGVmaW5lIEFDQ19DQ19BQ0sgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJBbXN0ZXJkYW0gQ29tcGlsZXIgS2l0IEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgICJ1bmtub3duIgorI2VsaWYgZGVmaW5lZChfX0FaVEVDX0NfXykKKyMgIGRlZmluZSBBQ0NfQ0NfQVpURUNDICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiQXp0ZWMgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX0FaVEVDX0NfXykKKyNlbGlmIGRlZmluZWQoX19CT1JMQU5EQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19CT1JMQU5EQyAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJCb3JsYW5kIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19CT1JMQU5EQ19fKQorI2VsaWYgZGVmaW5lZChfQ1JBWUMpICYmIGRlZmluZWQoX1JFTEVBU0UpCisjICBkZWZpbmUgQUNDX0NDX0NSQVlDICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIkNyYXkgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfUkVMRUFTRSkKKyNlbGlmIGRlZmluZWQoX19ETUNfXykgJiYgZGVmaW5lZChfX1NDX18pCisjICBkZWZpbmUgQUNDX0NDX0RNQyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIkRpZ2l0YWwgTWFycyBDIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fRE1DX18pCisjZWxpZiBkZWZpbmVkKF9fREVDQykKKyMgIGRlZmluZSBBQ0NfQ0NfREVDQyAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiREVDIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19ERUNDKQorI2VsaWYgZGVmaW5lZChfX0hJR0hDX18pCisjICBkZWZpbmUgQUNDX0NDX0hJR0hDICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIk1ldGFXYXJlIEhpZ2ggQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisjICBkZWZpbmUgQUNDX0NDX0lBUkMgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIklBUiBDIgorIyAgaWYgZGVmaW5lZChfX1ZFUl9fKQorIyAgICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fVkVSX18pCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19JQk1DX18pCisjICBkZWZpbmUgQUNDX0NDX0lCTUMgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIklCTSBDIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fSUJNQ19fKQorI2VsaWYgZGVmaW5lZChfX0tFSUxfXykgJiYgZGVmaW5lZChfX0MxNjZfXykKKyMgIGRlZmluZSBBQ0NfQ0NfS0VJTEMgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiS2VpbCBDIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fQzE2Nl9fKQorI2VsaWYgZGVmaW5lZChfX0xDQ19fKSAmJiBkZWZpbmVkKF9XSU4zMikgJiYgZGVmaW5lZChfX0xDQ09QVElNTEVWRUwpCisjICBkZWZpbmUgQUNDX0NDX0xDQ1dJTjMyICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgImxjYy13aW4zMiIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fTENDX18pCisjICBkZWZpbmUgQUNDX0NDX0xDQyAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgImxjYyIKKyMgIGlmIGRlZmluZWQoX19MQ0NfVkVSU0lPTl9fKQorIyAgICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fTENDX1ZFUlNJT05fXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgInVua25vd24iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgIGRlZmluZSBBQ0NfQ0NfTVNDICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiTWljcm9zb2Z0IEMiCisjICBpZiBkZWZpbmVkKF9NU0NfRlVMTF9WRVIpCisjICAgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX01TQ19WRVIpICIuIiBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9NU0NfRlVMTF9WRVIpCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX01TQ19WRVIpCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX01XRVJLU19fKQorIyAgZGVmaW5lIEFDQ19DQ19NV0VSS1MgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJNZXRyb3dlcmtzIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19NV0VSS1NfXykKKyNlbGlmIChkZWZpbmVkKF9fTkRQQ19fKSB8fCBkZWZpbmVkKF9fTkRQWF9fKSkgJiYgZGVmaW5lZChfX2kzODYpCisjICBkZWZpbmUgQUNDX0NDX05EUEMgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIk1pY3Jvd2F5IE5EUCBDIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICAidW5rbm93biIKKyNlbGlmIGRlZmluZWQoX19QQUNJRklDX18pCisjICBkZWZpbmUgQUNDX0NDX1BBQ0lGSUNDICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19DQyAgICAgICAgICAgIlBhY2lmaWMgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX1BBQ0lGSUNfXykKKyNlbGlmIGRlZmluZWQoX19QR0kpICYmIChkZWZpbmVkKF9fbGludXhfXykgfHwgZGVmaW5lZChfX1dJTjMyX18pKQorIyAgZGVmaW5lIEFDQ19DQ19QR0kgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJQb3J0bGFuZCBHcm91cCBQR0kgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZWxpZiBkZWZpbmVkKF9fUFVSRUNfXykgJiYgZGVmaW5lZChfX1RPU19fKQorIyAgZGVmaW5lIEFDQ19DQ19QVVJFQyAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJQdXJlIEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19QVVJFQ19fKQorI2VsaWYgZGVmaW5lZChfX1NDX18pICYmIGRlZmluZWQoX19aVENfXykKKyMgIGRlZmluZSBBQ0NfQ0NfU1lNQU5URUNDICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiU3ltYW50ZWMgQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX1NDX18pCisjZWxpZiBkZWZpbmVkKF9fU1VOUFJPX0MpCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJTdW5Qcm8gQyIKKyMgIGlmICgoX19TVU5QUk9fQykrMCA+IDApCisjICAgIGRlZmluZSBBQ0NfQ0NfU1VOUFJPQyAgICAgIF9fU1VOUFJPX0MKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX1NVTlBST19DKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0NDX1NVTlBST0MgICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19TVU5QUk9fQ0MpCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJTdW5Qcm8gQyIKKyMgIGlmICgoX19TVU5QUk9fQ0MpKzAgPiAwKQorIyAgICBkZWZpbmUgQUNDX0NDX1NVTlBST0MgICAgICBfX1NVTlBST19DQworIyAgICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fU1VOUFJPX0NDKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0NDX1NVTlBST0MgICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICJ1bmtub3duIgorIyAgZW5kaWYKKyNlbGlmIGRlZmluZWQoX19USU5ZQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19USU5ZQyAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJUaW55IEMiCisjICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICAgIEFDQ19QUF9NQUNST19FWFBBTkQoX19USU5ZQ19fKQorI2VsaWYgZGVmaW5lZChfX1RTQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19UT1BTUEVFREMgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJUb3BTcGVlZCBDIgorIyAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fVFNDX18pCisjZWxpZiBkZWZpbmVkKF9fV0FUQ09NQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19XQVRDT01DICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJXYXRjb20gQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX1dBVENPTUNfXykKKyNlbGlmIGRlZmluZWQoX19UVVJCT0NfXykKKyMgIGRlZmluZSBBQ0NfQ0NfVFVSQk9DICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAiVHVyYm8gQyIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgQUNDX1BQX01BQ1JPX0VYUEFORChfX1RVUkJPQ19fKQorI2VsaWYgZGVmaW5lZChfX1pUQ19fKQorIyAgZGVmaW5lIEFDQ19DQ19aT1JURUNIQyAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQ0MgICAgICAgICAgICJab3J0ZWNoIEMiCisjICBpZiAoX19aVENfXyA9PSAweDMxMCkKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0NDVkVSICAgICAgIjB4MzEwIgorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0lORk9fQ0NWRVIgICAgICBBQ0NfUFBfTUFDUk9fRVhQQU5EKF9fWlRDX18pCisjICBlbmRpZgorI2Vsc2UKKyMgIGRlZmluZSBBQ0NfQ0NfVU5LTk9XTiAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0NDICAgICAgICAgICAidW5rbm93biIKKyMgIGRlZmluZSBBQ0NfSU5GT19DQ1ZFUiAgICAgICAgInVua25vd24iCisjZW5kaWYKKyNpZiAwICYmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkgJiYgIWRlZmluZWQoX01TQ19GVUxMX1ZFUikKKyMgIGVycm9yICJBQ0NfQ0NfTVNDOiBfTVNDX0ZVTExfVkVSIGlzIG5vdCBkZWZpbmVkIgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19BQ0NfQVJDSF9PVkVSUklERSkgJiYgIWRlZmluZWQoQUNDX0FSQ0hfR0VORVJJQykgJiYgZGVmaW5lZChfQ1JBWSkKKyMgIGlmIChVSU5UX01BWCA+IEFDQ18weGZmZmZmZmZmTCkgJiYgZGVmaW5lZChfQ1JBWSkKKyMgICAgaWYgZGVmaW5lZChfQ1JBWU1QUCkgfHwgZGVmaW5lZChfQ1JBWVQzRCkgfHwgZGVmaW5lZChfQ1JBWVQzRSkKKyMgICAgICBkZWZpbmUgQUNDX0FSQ0hfQ1JBWV9NUFAgICAgIDEKKyMgICAgZWxpZiBkZWZpbmVkKF9DUkFZMSkKKyMgICAgICBkZWZpbmUgQUNDX0FSQ0hfQ1JBWV9QVlAgICAgIDEKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0FDQ19BUkNIX09WRVJSSURFKQorI2lmIGRlZmluZWQoQUNDX0FSQ0hfR0VORVJJQykKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJnZW5lcmljIgorI2VsaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2KQorIyAgZGVmaW5lIEFDQ19BUkNIX0kwODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19BUkNIX0lBMTYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImkwODYiCisjZWxpZiBkZWZpbmVkKF9fYWxwaGFfXykgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9NX0FMUEhBKQorIyAgZGVmaW5lIEFDQ19BUkNIX0FMUEhBICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImFscGhhIgorI2VsaWYgKEFDQ19BUkNIX0NSQVlfTVBQKSAmJiAoZGVmaW5lZChfQ1JBWVQzRCkgfHwgZGVmaW5lZChfQ1JBWVQzRSkpCisjICBkZWZpbmUgQUNDX0FSQ0hfQUxQSEEgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAiYWxwaGEiCisjZWxpZiBkZWZpbmVkKF9fYW1kNjRfXykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZpbmVkKF9NX0FNRDY0KQorIyAgZGVmaW5lIEFDQ19BUkNIX0FNRDY0ICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImFtZDY0IgorI2VsaWYgZGVmaW5lZChfX3RodW1iX18pIHx8IChkZWZpbmVkKF9NX0FSTSkgJiYgZGVmaW5lZChfTV9USFVNQikpCisjICBkZWZpbmUgQUNDX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0FSQ0hfQVJNX1RIVU1CICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAiYXJtX3RodW1iIgorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fSUNDQVJNX18pCisjICBkZWZpbmUgQUNDX0FSQ0hfQVJNICAgICAgICAgICAgICAxCisjICBpZiBkZWZpbmVkKF9fQ1BVX01PREVfXykgJiYgKChfX0NQVV9NT0RFX18pKzAgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19BUkNIX0FSTV9USFVNQiAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICJhcm1fdGh1bWIiCisjICBlbGlmIGRlZmluZWQoX19DUFVfTU9ERV9fKSAmJiAoKF9fQ1BVX01PREVfXykrMCA9PSAyKQorIyAgICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgImFybSIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICJhcm0iCisjICBlbmRpZgorI2VsaWYgZGVmaW5lZChfX2FybV9fKSB8fCBkZWZpbmVkKF9NX0FSTSkKKyMgIGRlZmluZSBBQ0NfQVJDSF9BUk0gICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJhcm0iCisjZWxpZiAoVUlOVF9NQVggPD0gQUNDXzB4ZmZmZkwpICYmIGRlZmluZWQoX19BVlJfXykKKyMgIGRlZmluZSBBQ0NfQVJDSF9BVlIgICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJhdnIiCisjZWxpZiBkZWZpbmVkKF9fYmZpbl9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX0JMQUNLRklOICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImJsYWNrZmluIgorI2VsaWYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKSAmJiBkZWZpbmVkKF9fQzE2Nl9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX0MxNjYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImMxNjYiCisjZWxpZiBkZWZpbmVkKF9fY3Jpc19fKQorIyAgZGVmaW5lIEFDQ19BUkNIX0NSSVMgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImNyaXMiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0NFWjgwX18pCisjICBkZWZpbmUgQUNDX0FSQ0hfRVo4MCAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAiZXo4MCIKKyNlbGlmIGRlZmluZWQoX19IODMwMF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBIX18pIHx8IGRlZmluZWQoX19IODMwMFNfXykgfHwgZGVmaW5lZChfX0g4MzAwU1hfXykKKyMgIGRlZmluZSBBQ0NfQVJDSF9IODMwMCAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJoODMwMCIKKyNlbGlmIGRlZmluZWQoX19ocHBhX18pIHx8IGRlZmluZWQoX19ocHBhKQorIyAgZGVmaW5lIEFDQ19BUkNIX0hQUEEgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImhwcGEiCisjZWxpZiBkZWZpbmVkKF9fMzg2X18pIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX01fSTM4NikKKyMgIGRlZmluZSBBQ0NfQVJDSF9JMzg2ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfQVJDSF9JQTMyICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJpMzg2IgorI2VsaWYgKEFDQ19DQ19aT1JURUNIQyAmJiBkZWZpbmVkKF9fSTg2X18pKQorIyAgZGVmaW5lIEFDQ19BUkNIX0kzODYgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19BUkNIX0lBMzIgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgImkzODYiCisjZWxpZiAoQUNDX09TX0RPUzMyICYmIEFDQ19DQ19ISUdIQykgJiYgZGVmaW5lZChfSTM4NikKKyMgIGRlZmluZSBBQ0NfQVJDSF9JMzg2ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfQVJDSF9JQTMyICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJpMzg2IgorI2VsaWYgZGVmaW5lZChfX2lhNjRfXykgfHwgZGVmaW5lZChfX2lhNjQpIHx8IGRlZmluZWQoX01fSUE2NCkKKyMgIGRlZmluZSBBQ0NfQVJDSF9JQTY0ICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJpYTY0IgorI2VsaWYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKSAmJiBkZWZpbmVkKF9fbTMyY19fKQorIyAgZGVmaW5lIEFDQ19BUkNIX00xNkMgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm0xNmMiCisjZWxpZiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pICYmIGRlZmluZWQoX19JQ0NNMTZDX18pCisjICBkZWZpbmUgQUNDX0FSQ0hfTTE2QyAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAibTE2YyIKKyNlbGlmIGRlZmluZWQoX19tMzJyX18pCisjICBkZWZpbmUgQUNDX0FSQ0hfTTMyUiAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAibTMyciIKKyNlbGlmIChBQ0NfT1NfVE9TKSB8fCBkZWZpbmVkKF9fbTY4a19fKSB8fCBkZWZpbmVkKF9fbTY4MDAwX18pIHx8IGRlZmluZWQoX19tYzY4MDAwX18pIHx8IGRlZmluZWQoX19tYzY4MDIwX18pIHx8IGRlZmluZWQoX01fTTY4SykKKyMgIGRlZmluZSBBQ0NfQVJDSF9NNjhLICAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJtNjhrIgorI2VsaWYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKSAmJiBkZWZpbmVkKF9fQzI1MV9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX01DUzI1MSAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczI1MSIKKyNlbGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmTCkgJiYgZGVmaW5lZChfX0M1MV9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX01DUzUxICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczUxIgorI2VsaWYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fSUNDODA1MV9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX01DUzUxICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1jczUxIgorI2VsaWYgZGVmaW5lZChfX21pcHNfXykgfHwgZGVmaW5lZChfX21pcHMpIHx8IGRlZmluZWQoX01JUFNfQVJDSCkgfHwgZGVmaW5lZChfTV9NUlgwMDApCisjICBkZWZpbmUgQUNDX0FSQ0hfTUlQUyAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAibWlwcyIKKyNlbGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmTCkgJiYgZGVmaW5lZChfX01TUDQzMF9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX01TUDQzMCAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1zcDQzMCIKKyNlbGlmIGRlZmluZWQoX19JQVJfU1lTVEVNU19JQ0NfXykgJiYgZGVmaW5lZChfX0lDQzQzMF9fKQorIyAgZGVmaW5lIEFDQ19BUkNIX01TUDQzMCAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIm1zcDQzMCIKKyNlbGlmIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjKSB8fCBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19QUENfXykgfHwgZGVmaW5lZChfTV9QUEMpIHx8IGRlZmluZWQoX0FSQ0hfUFBDKSB8fCBkZWZpbmVkKF9BUkNIX1BXUikKKyMgIGRlZmluZSBBQ0NfQVJDSF9QT1dFUlBDICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAgICJwb3dlcnBjIgorI2VsaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTApIHx8IGRlZmluZWQoX19zMzkweF9fKSB8fCBkZWZpbmVkKF9fczM5MHgpCisjICBkZWZpbmUgQUNDX0FSQ0hfUzM5MCAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAiczM5MCIKKyNlbGlmIGRlZmluZWQoX19zaF9fKSB8fCBkZWZpbmVkKF9NX1NIKQorIyAgZGVmaW5lIEFDQ19BUkNIX1NIICAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgInNoIgorI2VsaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19zcGFyYykgfHwgZGVmaW5lZChfX3NwYXJjdjgpCisjICBkZWZpbmUgQUNDX0FSQ0hfU1BBUkMgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAic3BhcmMiCisjZWxpZiBkZWZpbmVkKF9fU1BVX18pCisjICBkZWZpbmUgQUNDX0FSQ0hfU1BVICAgICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgICAic3B1IgorI2VsaWYgKFVJTlRfTUFYID09IEFDQ18weGZmZmZMKSAmJiBkZWZpbmVkKF9fejgwKQorIyAgZGVmaW5lIEFDQ19BUkNIX1o4MCAgICAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgIno4MCIKKyNlbGlmIChBQ0NfQVJDSF9DUkFZX1BWUCkKKyMgIGlmIGRlZmluZWQoX0NSQVlTVjEpCisjICAgIGRlZmluZSBBQ0NfQVJDSF9DUkFZX1NWMSAgICAgICAxCisjICAgIGRlZmluZSBBQ0NfSU5GT19BUkNIICAgICAgICAgICAiY3JheV9zdjEiCisjICBlbGlmIChfQUREUjY0KQorIyAgICBkZWZpbmUgQUNDX0FSQ0hfQ1JBWV9UOTAgICAgICAgMQorIyAgICBkZWZpbmUgQUNDX0lORk9fQVJDSCAgICAgICAgICAgImNyYXlfdDkwIgorIyAgZWxpZiAoX0FERFIzMikKKyMgICAgZGVmaW5lIEFDQ19BUkNIX0NSQVlfWU1QICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICJjcmF5X3ltcCIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19BUkNIX0NSQVlfWE1QICAgICAgIDEKKyMgICAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICJjcmF5X3htcCIKKyMgIGVuZGlmCisjZWxzZQorIyAgZGVmaW5lIEFDQ19BUkNIX1VOS05PV04gICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FSQ0ggICAgICAgICAgICAgInVua25vd24iCisjZW5kaWYKKyNlbmRpZgorI2lmIDEgJiYgKEFDQ19BUkNIX1VOS05PV04pICYmIChBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX09TMikKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgMSAmJiAoQUNDX0FSQ0hfVU5LTk9XTikgJiYgKEFDQ19PU19XSU4zMikKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgV0lOMzIgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgMSAmJiAoQUNDX0FSQ0hfVU5LTk9XTikgJiYgKEFDQ19PU19XSU42NCkKKyMgIGVycm9yICJGSVhNRSAtIG1pc3NpbmcgV0lONjQgZGVmaW5lIGZvciBDUFUgYXJjaGl0ZWN0dXJlIgorI2VuZGlmCisjaWYgKEFDQ19PU19PUzIxNiB8fCBBQ0NfT1NfV0lOMTYpCisjICBkZWZpbmUgQUNDX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZWxpZiAxICYmIChBQ0NfT1NfRE9TMTYgJiYgZGVmaW5lZChCTFgyODYpKQorIyAgZGVmaW5lIEFDQ19BUkNIX0kwODZQTSAgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19BUkNIX0lBMTZQTSAgICAgICAgICAgMQorI2VsaWYgMSAmJiAoQUNDX09TX0RPUzE2ICYmIGRlZmluZWQoRE9TWDI4NikpCisjICBkZWZpbmUgQUNDX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZWxpZiAxICYmIChBQ0NfT1NfRE9TMTYgJiYgQUNDX0NDX0JPUkxBTkRDICYmIGRlZmluZWQoX19EUE1JMTZfXykpCisjICBkZWZpbmUgQUNDX0FSQ0hfSTA4NlBNICAgICAgICAgICAxCisjICBkZWZpbmUgQUNDX0FSQ0hfSUExNlBNICAgICAgICAgICAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19BUkNIX0FSTV9USFVNQikgJiYgIWRlZmluZWQoQUNDX0FSQ0hfQVJNKQorIyAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19BUkNIX0kwODZQTSkgJiYgIWRlZmluZWQoQUNDX0FSQ0hfSTA4NikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgKEFDQ19BUkNIX0kwODYpCisjICBpZiAoVUlOVF9NQVggIT0gQUNDXzB4ZmZmZkwpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gQUNDXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoQUNDX0FSQ0hfSTM4NikKKyMgIGlmIChVSU5UX01BWCAhPSBBQ0NfMHhmZmZmTCkgJiYgZGVmaW5lZChfX2kzODZfaW50MTZfXykKKyMgICAgZXJyb3IgInRoaXMgc2hvdWxkIG5vdCBoYXBwZW4iCisjICBlbmRpZgorIyAgaWYgKFVJTlRfTUFYICE9IEFDQ18weGZmZmZmZmZmTCkgJiYgIWRlZmluZWQoX19pMzg2X2ludDE2X18pCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZW5kaWYKKyMgIGlmIChVTE9OR19NQVggIT0gQUNDXzB4ZmZmZmZmZmZMKQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0FDQ19NTV9PVkVSUklERSkKKyNpZiAoQUNDX0FSQ0hfSTA4NikKKyNpZiAoVUlOVF9NQVggIT0gQUNDXzB4ZmZmZkwpCisjICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19USU5ZX18pIHx8IGRlZmluZWQoTV9JODZUTSkgfHwgZGVmaW5lZChfTV9JODZUTSkKKyMgIGRlZmluZSBBQ0NfTU1fVElOWSAgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX0hVR0VfXykgfHwgZGVmaW5lZChfSFVHRV8pIHx8IGRlZmluZWQoTV9JODZITSkgfHwgZGVmaW5lZChfTV9JODZITSkKKyMgIGRlZmluZSBBQ0NfTU1fSFVHRSAgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX1NNQUxMX18pIHx8IGRlZmluZWQoTV9JODZTTSkgfHwgZGVmaW5lZChfTV9JODZTTSkgfHwgZGVmaW5lZChTTUFMTF9NT0RFTCkKKyMgIGRlZmluZSBBQ0NfTU1fU01BTEwgICAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX01FRElVTV9fKSB8fCBkZWZpbmVkKE1fSTg2TU0pIHx8IGRlZmluZWQoX01fSTg2TU0pCisjICBkZWZpbmUgQUNDX01NX01FRElVTSAgICAgICAgIDEKKyNlbGlmIGRlZmluZWQoX19DT01QQUNUX18pIHx8IGRlZmluZWQoTV9JODZDTSkgfHwgZGVmaW5lZChfTV9JODZDTSkKKyMgIGRlZmluZSBBQ0NfTU1fQ09NUEFDVCAgICAgICAgMQorI2VsaWYgZGVmaW5lZChfX0xBUkdFX18pIHx8IGRlZmluZWQoTV9JODZMTSkgfHwgZGVmaW5lZChfTV9JODZMTSkgfHwgZGVmaW5lZChMQVJHRV9NT0RFTCkKKyMgIGRlZmluZSBBQ0NfTU1fTEFSR0UgICAgICAgICAgMQorI2VsaWYgKEFDQ19DQ19BWlRFQ0MpCisjICBpZiBkZWZpbmVkKF9MQVJHRV9DT0RFKSAmJiBkZWZpbmVkKF9MQVJHRV9EQVRBKQorIyAgICBkZWZpbmUgQUNDX01NX0xBUkdFICAgICAgICAxCisjICBlbGlmIGRlZmluZWQoX0xBUkdFX0NPREUpCisjICAgIGRlZmluZSBBQ0NfTU1fTUVESVVNICAgICAgIDEKKyMgIGVsaWYgZGVmaW5lZChfTEFSR0VfREFUQSkKKyMgICAgZGVmaW5lIEFDQ19NTV9DT01QQUNUICAgICAgMQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX01NX1NNQUxMICAgICAgICAxCisjICBlbmRpZgorI2VsaWYgKEFDQ19DQ19aT1JURUNIQyAmJiBkZWZpbmVkKF9fVkNNX18pKQorIyAgZGVmaW5lIEFDQ19NTV9MQVJHRSAgICAgICAgICAxCisjZWxzZQorIyAgZXJyb3IgInVua25vd24gbWVtb3J5IG1vZGVsIgorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2KQorI2RlZmluZSBBQ0NfSEFWRV9NTV9IVUdFX1BUUiAgICAgICAgMQorI2RlZmluZSBBQ0NfSEFWRV9NTV9IVUdFX0FSUkFZICAgICAgMQorI2lmIChBQ0NfTU1fVElOWSkKKyMgIHVuZGVmIEFDQ19IQVZFX01NX0hVR0VfQVJSQVkKKyNlbmRpZgorI2lmIChBQ0NfQ0NfQVpURUNDIHx8IEFDQ19DQ19QQUNJRklDQyB8fCBBQ0NfQ0NfWk9SVEVDSEMpCisjICB1bmRlZiBBQ0NfSEFWRV9NTV9IVUdFX1BUUgorIyAgdW5kZWYgQUNDX0hBVkVfTU1fSFVHRV9BUlJBWQorI2VsaWYgKEFDQ19DQ19ETUMgfHwgQUNDX0NDX1NZTUFOVEVDQykKKyMgIHVuZGVmIEFDQ19IQVZFX01NX0hVR0VfQVJSQVkKKyNlbGlmIChBQ0NfQ0NfTVNDICYmIGRlZmluZWQoX1FDKSkKKyMgIHVuZGVmIEFDQ19IQVZFX01NX0hVR0VfQVJSQVkKKyMgIGlmIChfTVNDX1ZFUiA8IDYwMCkKKyMgICAgdW5kZWYgQUNDX0hBVkVfTU1fSFVHRV9QVFIKKyMgIGVuZGlmCisjZWxpZiAoQUNDX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA8IDB4MDI5NSkpCisjICB1bmRlZiBBQ0NfSEFWRV9NTV9IVUdFX0FSUkFZCisjZW5kaWYKKyNpZiAoQUNDX0FSQ0hfSTA4NlBNKSAmJiAhZGVmaW5lZChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyMgIGlmIChBQ0NfT1NfRE9TMTYpCisjICAgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorIyAgZWxpZiAoQUNDX0NDX1pPUlRFQ0hDKQorIyAgZWxzZQorIyAgICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNpZiAoQUNDX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPj0gMHgwMjAwKSkKKyAgIGV4dGVybiB2b2lkIF9fbmVhciBfX2NkZWNsIF9BSFNISUZUKHZvaWQpOworIyAgZGVmaW5lIEFDQ19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0FIU0hJRlQpCisjZWxpZiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfU1lNQU5URUNDIHx8IEFDQ19DQ19aT1JURUNIQykKKyAgIGV4dGVybiB2b2lkIF9fbmVhciBfX2NkZWNsIF9BSFNISUZUKHZvaWQpOworIyAgZGVmaW5lIEFDQ19NTV9BSFNISUZUICAgICAgKCh1bnNpZ25lZCkgX0FIU0hJRlQpCisjZWxpZiAoQUNDX0NDX01TQyB8fCBBQ0NfQ0NfVE9QU1BFRURDKQorICAgZXh0ZXJuIHZvaWQgX19uZWFyIF9fY2RlY2wgX0FIU0hJRlQodm9pZCk7CisjICBkZWZpbmUgQUNDX01NX0FIU0hJRlQgICAgICAoKHVuc2lnbmVkKSBfQUhTSElGVCkKKyNlbGlmIChBQ0NfQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fID49IDB4MDI5NSkpCisgICBleHRlcm4gdm9pZCBfX25lYXIgX19jZGVjbCBfQUhTSElGVCh2b2lkKTsKKyMgIGRlZmluZSBBQ0NfTU1fQUhTSElGVCAgICAgICgodW5zaWduZWQpIF9BSFNISUZUKQorI2VsaWYgKChBQ0NfQ0NfQVpURUNDIHx8IEFDQ19DQ19QQUNJRklDQyB8fCBBQ0NfQ0NfVFVSQk9DKSAmJiBBQ0NfT1NfRE9TMTYpCisjICBkZWZpbmUgQUNDX01NX0FIU0hJRlQgICAgICAxMgorI2VsaWYgKEFDQ19DQ19XQVRDT01DKQorICAgZXh0ZXJuIHVuc2lnbmVkIGNoYXIgX0hTaGlmdDsKKyMgIGRlZmluZSBBQ0NfTU1fQUhTSElGVCAgICAgICgodW5zaWduZWQpIF9IU2hpZnQpCisjZWxzZQorIyAgZXJyb3IgIkZJWE1FIC0gaW1wbGVtZW50IEFDQ19NTV9BSFNISUZUIgorI2VuZGlmCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmCisjZWxpZiAoQUNDX0FSQ0hfQzE2NikKKyNpZiAhZGVmaW5lZChfX01PREVMX18pCisjICBlcnJvciAiRklYTUUgLSBDMTY2IF9fTU9ERUxfXyIKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAwKQorIyAgZGVmaW5lIEFDQ19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMSkKKyMgIGRlZmluZSBBQ0NfTU1fU01BTEwgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDIpCisjICBkZWZpbmUgQUNDX01NX0xBUkdFICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAzKQorIyAgZGVmaW5lIEFDQ19NTV9USU5ZICAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNCkKKyMgIGRlZmluZSBBQ0NfTU1fWFRJTlkgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDUpCisjICBkZWZpbmUgQUNDX01NX1hTTUFMTCAgICAgICAgIDEKKyNlbHNlCisjICBlcnJvciAiRklYTUUgLSBDMTY2IF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKEFDQ19BUkNIX01DUzI1MSkKKyNpZiAhZGVmaW5lZChfX01PREVMX18pCisjICBlcnJvciAiRklYTUUgLSBNQ1MyNTEgX19NT0RFTF9fIgorI2VsaWYgKChfX01PREVMX18pID09IDApCisjICBkZWZpbmUgQUNDX01NX1NNQUxMICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAyKQorIyAgZGVmaW5lIEFDQ19NTV9MQVJHRSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMykKKyMgIGRlZmluZSBBQ0NfTU1fVElOWSAgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDQpCisjICBkZWZpbmUgQUNDX01NX1hUSU5ZICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA1KQorIyAgZGVmaW5lIEFDQ19NTV9YU01BTEwgICAgICAgICAxCisjZWxzZQorIyAgZXJyb3IgIkZJWE1FIC0gTUNTMjUxIF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKEFDQ19BUkNIX01DUzUxKQorI2lmICFkZWZpbmVkKF9fTU9ERUxfXykKKyMgIGVycm9yICJGSVhNRSAtIE1DUzUxIF9fTU9ERUxfXyIKKyNlbGlmICgoX19NT0RFTF9fKSA9PSAxKQorIyAgZGVmaW5lIEFDQ19NTV9TTUFMTCAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gMikKKyMgIGRlZmluZSBBQ0NfTU1fTEFSR0UgICAgICAgICAgMQorI2VsaWYgKChfX01PREVMX18pID09IDMpCisjICBkZWZpbmUgQUNDX01NX1RJTlkgICAgICAgICAgIDEKKyNlbGlmICgoX19NT0RFTF9fKSA9PSA0KQorIyAgZGVmaW5lIEFDQ19NTV9YVElOWSAgICAgICAgICAxCisjZWxpZiAoKF9fTU9ERUxfXykgPT0gNSkKKyMgIGRlZmluZSBBQ0NfTU1fWFNNQUxMICAgICAgICAgMQorI2Vsc2UKKyMgIGVycm9yICJGSVhNRSAtIE1DUzUxIF9fTU9ERUxfXyIKKyNlbmRpZgorI2VsaWYgKEFDQ19BUkNIX0NSQVlfUFZQKQorIyAgZGVmaW5lIEFDQ19NTV9QVlAgICAgICAgICAgICAxCisjZWxzZQorIyAgZGVmaW5lIEFDQ19NTV9GTEFUICAgICAgICAgICAxCisjZW5kaWYKKyNpZiAoQUNDX01NX0NPTVBBQ1QpCisjICBkZWZpbmUgQUNDX0lORk9fTU0gICAgICAgICAgICJjb21wYWN0IgorI2VsaWYgKEFDQ19NTV9GTEFUKQorIyAgZGVmaW5lIEFDQ19JTkZPX01NICAgICAgICAgICAiZmxhdCIKKyNlbGlmIChBQ0NfTU1fSFVHRSkKKyMgIGRlZmluZSBBQ0NfSU5GT19NTSAgICAgICAgICAgImh1Z2UiCisjZWxpZiAoQUNDX01NX0xBUkdFKQorIyAgZGVmaW5lIEFDQ19JTkZPX01NICAgICAgICAgICAibGFyZ2UiCisjZWxpZiAoQUNDX01NX01FRElVTSkKKyMgIGRlZmluZSBBQ0NfSU5GT19NTSAgICAgICAgICAgIm1lZGl1bSIKKyNlbGlmIChBQ0NfTU1fUFZQKQorIyAgZGVmaW5lIEFDQ19JTkZPX01NICAgICAgICAgICAicHZwIgorI2VsaWYgKEFDQ19NTV9TTUFMTCkKKyMgIGRlZmluZSBBQ0NfSU5GT19NTSAgICAgICAgICAgInNtYWxsIgorI2VsaWYgKEFDQ19NTV9USU5ZKQorIyAgZGVmaW5lIEFDQ19JTkZPX01NICAgICAgICAgICAidGlueSIKKyNlbHNlCisjICBlcnJvciAidW5rbm93biBtZW1vcnkgbW9kZWwiCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX1NIT1JUKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfU0hPUlQgICAgICAgICAgKFNJWkVPRl9TSE9SVCkKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX0lOVCkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0lOVCAgICAgICAgICAgIChTSVpFT0ZfSU5UKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfTE9ORykKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkcgICAgICAgICAgIChTSVpFT0ZfTE9ORykKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkdfTE9ORyAgICAgIChTSVpFT0ZfTE9OR19MT05HKQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfX19JTlQxNikKKyMgIGRlZmluZSBBQ0NfU0laRU9GX19fSU5UMTYgICAgICAgIChTSVpFT0ZfX19JTlQxNikKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX19fSU5UMzIpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9fX0lOVDMyICAgICAgICAoU0laRU9GX19fSU5UMzIpCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9fX0lOVDY0KQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfX19JTlQ2NCAgICAgICAgKFNJWkVPRl9fX0lOVDY0KQorI2VuZGlmCisjaWYgZGVmaW5lZChTSVpFT0ZfVk9JRF9QKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgICAgKFNJWkVPRl9WT0lEX1ApCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9TSVpFX1QpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9TSVpFX1QgICAgICAgICAoU0laRU9GX1NJWkVfVCkKKyNlbmRpZgorI2lmIGRlZmluZWQoU0laRU9GX1BUUkRJRkZfVCkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1BUUkRJRkZfVCAgICAgIChTSVpFT0ZfUFRSRElGRl9UKQorI2VuZGlmCisjZGVmaW5lIF9fQUNDX0xTUih4LGIpICAgICgoKHgpKzB1bCkgPj4gKGIpKQorI2lmICFkZWZpbmVkKEFDQ19TSVpFT0ZfU0hPUlQpCisjICBpZiAoQUNDX0FSQ0hfQ1JBWV9QVlApCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1NIT1JUICAgICAgICA4CisjICBlbGlmIChVU0hSVF9NQVggPT0gQUNDXzB4ZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1NIT1JUICAgICAgICAyCisjICBlbGlmIChfX0FDQ19MU1IoVVNIUlRfTUFYLDcpID09IDEpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1NIT1JUICAgICAgICAxCisjICBlbGlmIChfX0FDQ19MU1IoVVNIUlRfTUFYLDE1KSA9PSAxKQorIyAgICBkZWZpbmUgQUNDX1NJWkVPRl9TSE9SVCAgICAgICAgMgorIyAgZWxpZiAoX19BQ0NfTFNSKFVTSFJUX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfU0hPUlQgICAgICAgIDQKKyMgIGVsaWYgKF9fQUNDX0xTUihVU0hSVF9NQVgsNjMpID09IDEpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1NIT1JUICAgICAgICA4CisjICBlbGlmIChfX0FDQ19MU1IoVVNIUlRfTUFYLDEyNykgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfU0hPUlQgICAgICAgIDE2CisjICBlbHNlCisjICAgIGVycm9yICJBQ0NfU0laRU9GX1NIT1JUIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19TSVpFT0ZfSU5UKQorIyAgaWYgKEFDQ19BUkNIX0NSQVlfUFZQKQorIyAgICBkZWZpbmUgQUNDX1NJWkVPRl9JTlQgICAgICAgICAgOAorIyAgZWxpZiAoVUlOVF9NQVggPT0gQUNDXzB4ZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0lOVCAgICAgICAgICAyCisjICBlbGlmIChVSU5UX01BWCA9PSBBQ0NfMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0lOVCAgICAgICAgICA0CisjICBlbGlmIChfX0FDQ19MU1IoVUlOVF9NQVgsNykgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfSU5UICAgICAgICAgIDEKKyMgIGVsaWYgKF9fQUNDX0xTUihVSU5UX01BWCwxNSkgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfSU5UICAgICAgICAgIDIKKyMgIGVsaWYgKF9fQUNDX0xTUihVSU5UX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfSU5UICAgICAgICAgIDQKKyMgIGVsaWYgKF9fQUNDX0xTUihVSU5UX01BWCw2MykgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfSU5UICAgICAgICAgIDgKKyMgIGVsaWYgKF9fQUNDX0xTUihVSU5UX01BWCwxMjcpID09IDEpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0lOVCAgICAgICAgICAxNgorIyAgZWxzZQorIyAgICBlcnJvciAiQUNDX1NJWkVPRl9JTlQiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX1NJWkVPRl9MT05HKQorIyAgaWYgKFVMT05HX01BWCA9PSBBQ0NfMHhmZmZmZmZmZkwpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkcgICAgICAgICA0CisjICBlbGlmIChfX0FDQ19MU1IoVUxPTkdfTUFYLDcpID09IDEpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkcgICAgICAgICAxCisjICBlbGlmIChfX0FDQ19MU1IoVUxPTkdfTUFYLDE1KSA9PSAxKQorIyAgICBkZWZpbmUgQUNDX1NJWkVPRl9MT05HICAgICAgICAgMgorIyAgZWxpZiAoX19BQ0NfTFNSKFVMT05HX01BWCwzMSkgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9ORyAgICAgICAgIDQKKyMgIGVsaWYgKF9fQUNDX0xTUihVTE9OR19NQVgsNjMpID09IDEpCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkcgICAgICAgICA4CisjICBlbGlmIChfX0FDQ19MU1IoVUxPTkdfTUFYLDEyNykgPT0gMSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9ORyAgICAgICAgIDE2CisjICBlbHNlCisjICAgIGVycm9yICJBQ0NfU0laRU9GX0xPTkciCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX1NJWkVPRl9MT05HX0xPTkcpICYmICFkZWZpbmVkKEFDQ19TSVpFT0ZfX19JTlQ2NCkKKyNpZiAoQUNDX1NJWkVPRl9MT05HID4gMCAmJiBBQ0NfU0laRU9GX0xPTkcgPCA4KQorIyAgaWYgZGVmaW5lZChfX0xPTkdfTUFYX18pICYmIGRlZmluZWQoX19MT05HX0xPTkdfTUFYX18pCisjICAgIGlmIChBQ0NfQ0NfR05VQyA+PSAweDAzMDMwMHVsKQorIyAgICAgIGlmICgoX19MT05HX01BWF9fKSswID09IChfX0xPTkdfTE9OR19NQVhfXykrMCkKKyMgICAgICAgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkdfTE9ORyAgICAgIEFDQ19TSVpFT0ZfTE9ORworIyAgICAgIGVsaWYgKF9fQUNDX0xTUihfX0xPTkdfTE9OR19NQVhfXywzMCkgPT0gMSkKKyMgICAgICAgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkdfTE9ORyAgICAgIDQKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX1NJWkVPRl9MT05HX0xPTkcpICYmICFkZWZpbmVkKEFDQ19TSVpFT0ZfX19JTlQ2NCkKKyNpZiAoQUNDX1NJWkVPRl9MT05HID4gMCAmJiBBQ0NfU0laRU9GX0xPTkcgPCA4KQorI2lmIChBQ0NfQVJDSF9JMDg2ICYmIEFDQ19DQ19ETUMpCisjZWxpZiAoQUNDX0NDX0NJTExZKSAmJiBkZWZpbmVkKF9fR05VQ19fKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKEFDQ19DQ19HTlVDIHx8IEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoKEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQgfHwgZGVmaW5lZChfV0lOMzIpKSAmJiBBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChBQ0NfT1NfV0lONjQgfHwgZGVmaW5lZChfV0lONjQpKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgKEFDQ19DQ19ETUMpKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgKEFDQ19DQ19TWU1BTlRFQ0MgJiYgKF9fU0NfXyA+PSAweDcwMCkpKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgKEFDQ19DQ19JTlRFTEMgJiYgZGVmaW5lZChfX2xpbnV4X18pKSkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0xPTkdfTE9ORyAgICAgIDgKKyNlbGlmIChBQ0NfQVJDSF9JMzg2ICYmIChBQ0NfQ0NfTVdFUktTIHx8IEFDQ19DQ19QRUxMRVNDIHx8IEFDQ19DQ19QR0kgfHwgQUNDX0NDX1NVTlBST0MpKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfTE9OR19MT05HICAgICAgOAorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgKEFDQ19DQ19JTlRFTEMgfHwgQUNDX0NDX01TQykpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9fX0lOVDY0ICAgICAgICA4CisjZWxpZiAoKEFDQ19PU19XSU4zMiB8fCBkZWZpbmVkKF9XSU4zMikpICYmIChBQ0NfQ0NfTVNDKSkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChBQ0NfQVJDSF9JMzg2ICYmIChBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA1MjApKSkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChBQ0NfQVJDSF9JMzg2ICYmIChBQ0NfQ0NfV0FUQ09NQyAmJiAoX19XQVRDT01DX18gPj0gMTEwMCkpKQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfX19JTlQ2NCAgICAgICAgOAorI2VsaWYgKEFDQ19DQ19XQVRDT01DICYmIGRlZmluZWQoX0lOVEVHUkFMX01BWF9CSVRTKSAmJiAoX0lOVEVHUkFMX01BWF9CSVRTID09IDY0KSkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX19fSU5UNjQgICAgICAgIDgKKyNlbGlmIChBQ0NfT1NfT1M0MDAgfHwgZGVmaW5lZChfX09TNDAwX18pKSAmJiBkZWZpbmVkKF9fTExQNjRfSUZDX18pCisjICBkZWZpbmUgQUNDX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoZGVmaW5lZChfX3ZtcykgfHwgZGVmaW5lZChfX1ZNUykpICYmIChfX0lOSVRJQUxfUE9JTlRFUl9TSVpFKzAgPT0gNjQpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZWxpZiAoQUNDX0NDX1NEQ0MpICYmIChBQ0NfU0laRU9GX0lOVCA9PSAyKQorI2VsaWYgMSAmJiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9MT05HX0xPTkcgICAgICA4CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykgJiYgZGVmaW5lZChBQ0NfQ0NfR05VQykKKyMgIGlmIChBQ0NfQ0NfR05VQyA8IDB4MDIwODAwdWwpCisjICAgIHVuZGVmIEFDQ19TSVpFT0ZfTE9OR19MT05HCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQ0ZHX05PX0xPTkdfTE9ORykgfHwgZGVmaW5lZChfX05PX0xPTkdfTE9ORykKKyMgIHVuZGVmIEFDQ19TSVpFT0ZfTE9OR19MT05HCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfU0laRU9GX1ZPSURfUCkKKyNpZiAoQUNDX0FSQ0hfSTA4NikKKyMgIGRlZmluZSBfX0FDQ19XT1JEU0laRSAgICAgICAgICAgIDIKKyMgIGlmIChBQ0NfTU1fVElOWSB8fCBBQ0NfTU1fU01BTEwgfHwgQUNDX01NX01FRElVTSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVsaWYgKEFDQ19NTV9DT01QQUNUIHx8IEFDQ19NTV9MQVJHRSB8fCBBQ0NfTU1fSFVHRSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgIDQKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkFDQ19NTSIKKyMgIGVuZGlmCisjZWxpZiAoQUNDX0FSQ0hfQVZSIHx8IEFDQ19BUkNIX1o4MCkKKyMgIGRlZmluZSBfX0FDQ19XT1JEU0laRSAgICAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICAgIDIKKyNlbGlmIChBQ0NfQVJDSF9DMTY2IHx8IEFDQ19BUkNIX01DUzUxIHx8IEFDQ19BUkNIX01DUzI1MSB8fCBBQ0NfQVJDSF9NU1A0MzApCisjICBkZWZpbmUgQUNDX1NJWkVPRl9WT0lEX1AgICAgICAgICAyCisjZWxpZiAoQUNDX0FSQ0hfSDgzMDApCisjICBpZiBkZWZpbmVkKF9fTk9STUFMX01PREVfXykKKyMgICAgZGVmaW5lIF9fQUNDX1dPUkRTSVpFICAgICAgICAgIDQKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVsaWYgZGVmaW5lZChfX0g4MzAwSF9fKSB8fCBkZWZpbmVkKF9fSDgzMDBTX18pIHx8IGRlZmluZWQoX19IODMwMFNYX18pCisjICAgIGRlZmluZSBfX0FDQ19XT1JEU0laRSAgICAgICAgICA0CisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICA0CisjICBlbHNlCisjICAgIGRlZmluZSBfX0FDQ19XT1JEU0laRSAgICAgICAgICAyCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICAyCisjICBlbmRpZgorIyAgaWYgKEFDQ19DQ19HTlVDICYmIChBQ0NfQ0NfR05VQyA8IDB4MDQwMDAwdWwpKSAmJiAoQUNDX1NJWkVPRl9JTlQgPT0gNCkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfU0laRV9UICAgICAgIEFDQ19TSVpFT0ZfSU5UCisjICAgIGRlZmluZSBBQ0NfU0laRU9GX1BUUkRJRkZfVCAgICBBQ0NfU0laRU9GX0lOVAorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQVJDSF9NMTZDKQorIyAgZGVmaW5lIF9fQUNDX1dPUkRTSVpFICAgICAgICAgICAgMgorIyAgaWYgZGVmaW5lZChfX20zMmNfY3B1X18pIHx8IGRlZmluZWQoX19tMzJjbV9jcHVfXykKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgIDQKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgIDIKKyMgIGVuZGlmCisjZWxpZiAoQUNDX1NJWkVPRl9MT05HID09IDgpICYmICgoZGVmaW5lZChfX21pcHNfXykgJiYgZGVmaW5lZChfX1I1OTAwX18pKSB8fCBkZWZpbmVkKF9fTUlQU19QU1gyX18pKQorIyAgZGVmaW5lIF9fQUNDX1dPUkRTSVpFICAgICAgICAgICAgOAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgICAgNAorI2VsaWYgZGVmaW5lZChfX0xMUDY0X18pIHx8IGRlZmluZWQoX19MTFA2NCkgfHwgZGVmaW5lZChfTExQNjQpIHx8IGRlZmluZWQoX1dJTjY0KQorIyAgZGVmaW5lIF9fQUNDX1dPUkRTSVpFICAgICAgICAgICAgOAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgICAgOAorI2VsaWYgKEFDQ19PU19PUzQwMCB8fCBkZWZpbmVkKF9fT1M0MDBfXykpICYmIGRlZmluZWQoX19MTFA2NF9JRkNfXykKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICAgIEFDQ19TSVpFT0ZfTE9ORworIyAgZGVmaW5lIEFDQ19TSVpFT0ZfU0laRV9UICAgICAgICAgQUNDX1NJWkVPRl9MT05HCisjICBkZWZpbmUgQUNDX1NJWkVPRl9QVFJESUZGX1QgICAgICBBQ0NfU0laRU9GX0xPTkcKKyNlbGlmIChBQ0NfT1NfT1M0MDAgfHwgZGVmaW5lZChfX09TNDAwX18pKQorIyAgZGVmaW5lIF9fQUNDX1dPUkRTSVpFICAgICAgICAgICAgQUNDX1NJWkVPRl9MT05HCisjICBkZWZpbmUgQUNDX1NJWkVPRl9WT0lEX1AgICAgICAgICAxNgorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfU0laRV9UICAgICAgICAgQUNDX1NJWkVPRl9MT05HCisjICBkZWZpbmUgQUNDX1NJWkVPRl9QVFJESUZGX1QgICAgICBBQ0NfU0laRU9GX0xPTkcKKyNlbGlmIChkZWZpbmVkKF9fdm1zKSB8fCBkZWZpbmVkKF9fVk1TKSkgJiYgKF9fSU5JVElBTF9QT0lOVEVSX1NJWkUrMCA9PSA2NCkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICAgIDgKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1NJWkVfVCAgICAgICAgIEFDQ19TSVpFT0ZfTE9ORworIyAgZGVmaW5lIEFDQ19TSVpFT0ZfUFRSRElGRl9UICAgICAgQUNDX1NJWkVPRl9MT05HCisjZWxpZiAoQUNDX0FSQ0hfU1BVKQorIyBpZiAwCisjICBkZWZpbmUgX19BQ0NfV09SRFNJWkUgICAgICAgICAgICAxNgorIyBlbmRpZgorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfVk9JRF9QICAgICAgICAgNAorI2Vsc2UKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1ZPSURfUCAgICAgICAgIEFDQ19TSVpFT0ZfTE9ORworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfV09SRFNJWkUpCisjICBpZiBkZWZpbmVkKF9fQUNDX1dPUkRTSVpFKQorIyAgICBkZWZpbmUgQUNDX1dPUkRTSVpFICAgICAgICAgICAgX19BQ0NfV09SRFNJWkUKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19XT1JEU0laRSAgICAgICAgICAgIEFDQ19TSVpFT0ZfVk9JRF9QCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX1NJWkVPRl9TSVpFX1QpCisjaWYgKEFDQ19BUkNIX0kwODYgfHwgQUNDX0FSQ0hfTTE2QykKKyMgIGRlZmluZSBBQ0NfU0laRU9GX1NJWkVfVCAgICAgICAgIDIKKyNlbHNlCisjICBkZWZpbmUgQUNDX1NJWkVPRl9TSVpFX1QgICAgICAgICBBQ0NfU0laRU9GX1ZPSURfUAorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfU0laRU9GX1BUUkRJRkZfVCkKKyNpZiAoQUNDX0FSQ0hfSTA4NikKKyMgIGlmIChBQ0NfTU1fVElOWSB8fCBBQ0NfTU1fU01BTEwgfHwgQUNDX01NX01FRElVTSB8fCBBQ0NfTU1fSFVHRSkKKyMgICAgZGVmaW5lIEFDQ19TSVpFT0ZfUFRSRElGRl9UICAgIEFDQ19TSVpFT0ZfVk9JRF9QCisjICBlbGlmIChBQ0NfTU1fQ09NUEFDVCB8fCBBQ0NfTU1fTEFSR0UpCisjICAgIGlmIChBQ0NfQ0NfQk9STEFOREMgfHwgQUNDX0NDX1RVUkJPQykKKyMgICAgICBkZWZpbmUgQUNDX1NJWkVPRl9QVFJESUZGX1QgIDQKKyMgICAgZWxzZQorIyAgICAgIGRlZmluZSBBQ0NfU0laRU9GX1BUUkRJRkZfVCAgMgorIyAgICBlbmRpZgorIyAgZWxzZQorIyAgICBlcnJvciAiQUNDX01NIgorIyAgZW5kaWYKKyNlbHNlCisjICBkZWZpbmUgQUNDX1NJWkVPRl9QVFJESUZGX1QgICAgICBBQ0NfU0laRU9GX1NJWkVfVAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19BQklfTkVVVFJBTF9FTkRJQU4pCisjICB1bmRlZiBBQ0NfQUJJX0JJR19FTkRJQU4KKyMgIHVuZGVmIEFDQ19BQklfTElUVExFX0VORElBTgorI2VsaWYgIWRlZmluZWQoQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAhZGVmaW5lZChBQ0NfQUJJX0xJVFRMRV9FTkRJQU4pCisjaWYgKEFDQ19BUkNIX0FMUEhBKSAmJiAoQUNDX0FSQ0hfQ1JBWV9NUFApCisjICBkZWZpbmUgQUNDX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAoQUNDX0FSQ0hfQUxQSEEgfHwgQUNDX0FSQ0hfQU1ENjQgfHwgQUNDX0FSQ0hfQkxBQ0tGSU4gfHwgQUNDX0FSQ0hfQ1JJUyB8fCBBQ0NfQVJDSF9JMDg2IHx8IEFDQ19BUkNIX0kzODYgfHwgQUNDX0FSQ0hfTVNQNDMwKQorIyAgZGVmaW5lIEFDQ19BQklfTElUVExFX0VORElBTiAgICAgMQorI2VsaWYgKEFDQ19BUkNIX002OEsgfHwgQUNDX0FSQ0hfUzM5MCkKKyMgIGRlZmluZSBBQ0NfQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0lBUl9TWVNURU1TX0lDQ19fKSAmJiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9fKQorIyAgaWYgKF9fTElUVExFX0VORElBTl9fID09IDEpCisjICAgIGRlZmluZSBBQ0NfQUJJX0xJVFRMRV9FTkRJQU4gICAxCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfQUJJX0JJR19FTkRJQU4gICAgICAxCisjICBlbmRpZgorI2VsaWYgMSAmJiBkZWZpbmVkKF9fQklHX0VORElBTl9fKSAmJiAhZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykKKyMgIGRlZmluZSBBQ0NfQUJJX0JJR19FTkRJQU4gICAgICAgIDEKKyNlbGlmIDEgJiYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fXykgJiYgIWRlZmluZWQoX19CSUdfRU5ESUFOX18pCisjICBkZWZpbmUgQUNDX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZWxpZiAxICYmIChBQ0NfQVJDSF9BUk0pICYmIGRlZmluZWQoX19BUk1FQl9fKSAmJiAhZGVmaW5lZChfX0FSTUVMX18pCisjICBkZWZpbmUgQUNDX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAxICYmIChBQ0NfQVJDSF9BUk0pICYmIGRlZmluZWQoX19BUk1FTF9fKSAmJiAhZGVmaW5lZChfX0FSTUVCX18pCisjICBkZWZpbmUgQUNDX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZWxpZiAxICYmIChBQ0NfQVJDSF9NSVBTKSAmJiBkZWZpbmVkKF9fTUlQU0VCX18pICYmICFkZWZpbmVkKF9fTUlQU0VMX18pCisjICBkZWZpbmUgQUNDX0FCSV9CSUdfRU5ESUFOICAgICAgICAxCisjZWxpZiAxICYmIChBQ0NfQVJDSF9NSVBTKSAmJiBkZWZpbmVkKF9fTUlQU0VMX18pICYmICFkZWZpbmVkKF9fTUlQU0VCX18pCisjICBkZWZpbmUgQUNDX0FCSV9MSVRUTEVfRU5ESUFOICAgICAxCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiBkZWZpbmVkKEFDQ19BQklfTElUVExFX0VORElBTikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQUJJX0JJR19FTkRJQU4pCisjICBkZWZpbmUgQUNDX0lORk9fQUJJX0VORElBTiAgICAgICAiYmUiCisjZWxpZiBkZWZpbmVkKEFDQ19BQklfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfRU5ESUFOICAgICAgICJsZSIKKyNlbGlmIGRlZmluZWQoQUNDX0FCSV9ORVVUUkFMX0VORElBTikKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfRU5ESUFOICAgICAgICJuZXV0cmFsIgorI2VuZGlmCisjaWYgKEFDQ19TSVpFT0ZfSU5UID09IDEgJiYgQUNDX1NJWkVPRl9MT05HID09IDIgJiYgQUNDX1NJWkVPRl9WT0lEX1AgPT0gMikKKyMgIGRlZmluZSBBQ0NfQUJJX0k4TFAxNiAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfUE0gICAgICAgImk4bHAxNiIKKyNlbGlmIChBQ0NfU0laRU9GX0lOVCA9PSAyICYmIEFDQ19TSVpFT0ZfTE9ORyA9PSAyICYmIEFDQ19TSVpFT0ZfVk9JRF9QID09IDIpCisjICBkZWZpbmUgQUNDX0FCSV9JTFAxNiAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfUE0gICAgICAgImlscDE2IgorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID09IDQgJiYgQUNDX1NJWkVPRl9MT05HID09IDQgJiYgQUNDX1NJWkVPRl9WT0lEX1AgPT0gNCkKKyMgIGRlZmluZSBBQ0NfQUJJX0lMUDMyICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FCSV9QTSAgICAgICAiaWxwMzIiCisjZWxpZiAoQUNDX1NJWkVPRl9JTlQgPT0gNCAmJiBBQ0NfU0laRU9GX0xPTkcgPT0gNCAmJiBBQ0NfU0laRU9GX1ZPSURfUCA9PSA4ICYmIEFDQ19TSVpFT0ZfU0laRV9UID09IDgpCisjICBkZWZpbmUgQUNDX0FCSV9MTFA2NCAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfUE0gICAgICAgImxscDY0IgorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID09IDQgJiYgQUNDX1NJWkVPRl9MT05HID09IDggJiYgQUNDX1NJWkVPRl9WT0lEX1AgPT0gOCkKKyMgIGRlZmluZSBBQ0NfQUJJX0xQNjQgICAgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FCSV9QTSAgICAgICAibHA2NCIKKyNlbGlmIChBQ0NfU0laRU9GX0lOVCA9PSA4ICYmIEFDQ19TSVpFT0ZfTE9ORyA9PSA4ICYmIEFDQ19TSVpFT0ZfVk9JRF9QID09IDgpCisjICBkZWZpbmUgQUNDX0FCSV9JTFA2NCAgICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19BQklfUE0gICAgICAgImlscDY0IgorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID09IDQgJiYgQUNDX1NJWkVPRl9MT05HID09IDggJiYgQUNDX1NJWkVPRl9WT0lEX1AgPT0gNCkKKyMgIGRlZmluZSBBQ0NfQUJJX0lQMzJMNjQgICAgICAgMQorIyAgZGVmaW5lIEFDQ19JTkZPX0FCSV9QTSAgICAgICAiaXAzMmw2NCIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fQUNDX0xJQkNfT1ZFUlJJREUpCisjaWYgZGVmaW5lZChBQ0NfTElCQ19OQUtFRCkKKyMgIGRlZmluZSBBQ0NfSU5GT19MSUJDICAgICAgICAgIm5ha2VkIgorI2VsaWYgZGVmaW5lZChBQ0NfTElCQ19GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgQUNDX0lORk9fTElCQyAgICAgICAgICJmcmVlc3RhbmRpbmciCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX01PU1RMWV9GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgQUNDX0lORk9fTElCQyAgICAgICAgICJtZnJlZXN0YW5kaW5nIgorI2VsaWYgZGVmaW5lZChBQ0NfTElCQ19JU09DOTApCisjICBkZWZpbmUgQUNDX0lORk9fTElCQyAgICAgICAgICJpc29jOTAiCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX0lTT0M5OSkKKyMgIGRlZmluZSBBQ0NfSU5GT19MSUJDICAgICAgICAgImlzb2M5OSIKKyNlbGlmIGRlZmluZWQoX19kaWV0bGliY19fKQorIyAgZGVmaW5lIEFDQ19MSUJDX0RJRVRMSUJDICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fTElCQyAgICAgICAgICJkaWV0bGliYyIKKyNlbGlmIGRlZmluZWQoX05FV0xJQl9WRVJTSU9OKQorIyAgZGVmaW5lIEFDQ19MSUJDX05FV0xJQiAgICAgICAxCisjICBkZWZpbmUgQUNDX0lORk9fTElCQyAgICAgICAgICJuZXdsaWIiCisjZWxpZiBkZWZpbmVkKF9fVUNMSUJDX18pICYmIGRlZmluZWQoX19VQ0xJQkNfTUFKT1JfXykgJiYgZGVmaW5lZChfX1VDTElCQ19NSU5PUl9fKQorIyAgaWYgZGVmaW5lZChfX1VDTElCQ19TVUJMRVZFTF9fKQorIyAgICBkZWZpbmUgQUNDX0xJQkNfVUNMSUJDICAgICAoX19VQ0xJQkNfTUFKT1JfXyAqIDB4MTAwMDBMICsgX19VQ0xJQkNfTUlOT1JfXyAqIDB4MTAwICsgX19VQ0xJQkNfU1VCTEVWRUxfXykKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19MSUJDX1VDTElCQyAgICAgMHgwMDA5MGJMCisjICBlbmRpZgorIyAgZGVmaW5lIEFDQ19JTkZPX0xJQkMgICAgICAgICAidWNsaWJjIgorI2VsaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIGRlZmluZWQoX19HTElCQ19NSU5PUl9fKQorIyAgZGVmaW5lIEFDQ19MSUJDX0dMSUJDICAgICAgICAoX19HTElCQ19fICogMHgxMDAwMEwgKyBfX0dMSUJDX01JTk9SX18gKiAweDEwMCkKKyMgIGRlZmluZSBBQ0NfSU5GT19MSUJDICAgICAgICAgImdsaWJjIgorI2VsaWYgKEFDQ19DQ19NV0VSS1MpICYmIGRlZmluZWQoX19NU0xfXykKKyMgIGRlZmluZSBBQ0NfTElCQ19NU0wgICAgICAgICAgX19NU0xfXworIyAgZGVmaW5lIEFDQ19JTkZPX0xJQkMgICAgICAgICAibXNsIgorI2VsaWYgMSAmJiBkZWZpbmVkKF9fSUFSX1NZU1RFTVNfSUNDX18pCisjICBkZWZpbmUgQUNDX0xJQkNfSVNPQzkwICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19MSUJDICAgICAgICAgImlzb2M5MCIKKyNlbHNlCisjICBkZWZpbmUgQUNDX0xJQkNfREVGQVVMVCAgICAgIDEKKyMgIGRlZmluZSBBQ0NfSU5GT19MSUJDICAgICAgICAgImRlZmF1bHQiCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX2dudWNfZXh0ZW5zaW9uX18pCisjaWYgKEFDQ19DQ19HTlVDID49IDB4MDIwODAwdWwpCisjICBkZWZpbmUgX19hY2NfZ251Y19leHRlbnNpb25fXyAgICBfX2V4dGVuc2lvbl9fCisjZWxpZiAoQUNDX0NDX0xMVk0gfHwgQUNDX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX2FjY19nbnVjX2V4dGVuc2lvbl9fICAgIF9fZXh0ZW5zaW9uX18KKyNlbHNlCisjICBkZWZpbmUgX19hY2NfZ251Y19leHRlbnNpb25fXworI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY191YV92b2xhdGlsZSkKKyMgIGRlZmluZSBfX2FjY191YV92b2xhdGlsZSAgICAgdm9sYXRpbGUKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX2FsaWdub2YpCisjaWYgKEFDQ19DQ19DSUxMWSB8fCBBQ0NfQ0NfR05VQyB8fCBBQ0NfQ0NfTExWTSB8fCBBQ0NfQ0NfUEFUSFNDQUxFIHx8IEFDQ19DQ19QR0kpCisjICBkZWZpbmUgX19hY2NfYWxpZ25vZihlKSAgICAgIF9fYWxpZ25vZl9fKGUpCisjZWxpZiAoQUNDX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA3MDApKQorIyAgZGVmaW5lIF9fYWNjX2FsaWdub2YoZSkgICAgICBfX2FsaWdub2ZfXyhlKQorI2VsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEzMDApKQorIyAgZGVmaW5lIF9fYWNjX2FsaWdub2YoZSkgICAgICBfX2FsaWdub2YoZSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2FjY19hbGlnbm9mKQorIyAgZGVmaW5lIF9fYWNjX0hBVkVfYWxpZ25vZiAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19jb25zdHJ1Y3RvcikKKyNpZiAoQUNDX0NDX0dOVUMgPj0gMHgwMzA0MDB1bCkKKyMgIGRlZmluZSBfX2FjY19jb25zdHJ1Y3RvciAgICAgX19hdHRyaWJ1dGVfXygoX19jb25zdHJ1Y3Rvcl9fLF9fdXNlZF9fKSkKKyNlbGlmIChBQ0NfQ0NfR05VQyA+PSAweDAyMDcwMHVsKQorIyAgZGVmaW5lIF9fYWNjX2NvbnN0cnVjdG9yICAgICBfX2F0dHJpYnV0ZV9fKChfX2NvbnN0cnVjdG9yX18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2NfY29uc3RydWN0b3IgICAgIF9fYXR0cmlidXRlX18oKF9fY29uc3RydWN0b3JfXykpCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hY2NfY29uc3RydWN0b3IpCisjICBkZWZpbmUgX19hY2NfSEFWRV9jb25zdHJ1Y3RvciAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19kZXN0cnVjdG9yKQorI2lmIChBQ0NfQ0NfR05VQyA+PSAweDAzMDQwMHVsKQorIyAgZGVmaW5lIF9fYWNjX2Rlc3RydWN0b3IgICAgICBfX2F0dHJpYnV0ZV9fKChfX2Rlc3RydWN0b3JfXyxfX3VzZWRfXykpCisjZWxpZiAoQUNDX0NDX0dOVUMgPj0gMHgwMjA3MDB1bCkKKyMgIGRlZmluZSBfX2FjY19kZXN0cnVjdG9yICAgICAgX19hdHRyaWJ1dGVfXygoX19kZXN0cnVjdG9yX18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2NfZGVzdHJ1Y3RvciAgICAgIF9fYXR0cmlidXRlX18oKF9fZGVzdHJ1Y3Rvcl9fKSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2FjY19kZXN0cnVjdG9yKQorIyAgZGVmaW5lIF9fYWNjX0hBVkVfZGVzdHJ1Y3RvciAxCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX0hBVkVfZGVzdHJ1Y3RvcikgJiYgIWRlZmluZWQoX19hY2NfSEFWRV9jb25zdHJ1Y3RvcikKKyMgIGVycm9yICJ0aGlzIHNob3VsZCBub3QgaGFwcGVuIgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfaW5saW5lKQorI2lmIChBQ0NfQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fIDw9IDB4MDI5NSkpCisjZWxpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIF9fYWNjX2lubGluZSAgICAgICAgICBpbmxpbmUKKyNlbGlmIChBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA1NTApKQorIyAgZGVmaW5lIF9fYWNjX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKEFDQ19DQ19DSUxMWSB8fCBBQ0NfQ0NfR05VQyB8fCBBQ0NfQ0NfTExWTSB8fCBBQ0NfQ0NfUEFUSFNDQUxFIHx8IEFDQ19DQ19QR0kpCisjICBkZWZpbmUgX19hY2NfaW5saW5lICAgICAgICAgIF9faW5saW5lX18KKyNlbGlmIChBQ0NfQ0NfRE1DKQorIyAgZGVmaW5lIF9fYWNjX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKEFDQ19DQ19JTlRFTEMpCisjICBkZWZpbmUgX19hY2NfaW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiAoQUNDX0NDX01XRVJLUyAmJiAoX19NV0VSS1NfXyA+PSAweDI0MDUpKQorIyAgZGVmaW5lIF9fYWNjX2lubGluZSAgICAgICAgICBfX2lubGluZQorI2VsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDkwMCkpCisjICBkZWZpbmUgX19hY2NfaW5saW5lICAgICAgICAgIF9faW5saW5lCisjZWxpZiBkZWZpbmVkKF9fU1REQ19WRVJTSU9OX18pICYmIChfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjICBkZWZpbmUgX19hY2NfaW5saW5lICAgICAgICAgIGlubGluZQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX2lubGluZSkKKyMgIGRlZmluZSBfX2FjY19IQVZFX2lubGluZSAxCisjZWxzZQorIyAgZGVmaW5lIF9fYWNjX2lubGluZQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfZm9yY2VpbmxpbmUpCisjaWYgKEFDQ19DQ19HTlVDID49IDB4MDMwMjAwdWwpCisjICBkZWZpbmUgX19hY2NfZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNDUwKSAmJiBBQ0NfQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2FjY19mb3JjZWlubGluZSAgICAgX19mb3JjZWlubGluZQorI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSAmJiBBQ0NfQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19hY2NfZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2NfZm9yY2VpbmxpbmUgICAgIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorI2VsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKQorIyAgZGVmaW5lIF9fYWNjX2ZvcmNlaW5saW5lICAgICBfX2ZvcmNlaW5saW5lCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hY2NfZm9yY2VpbmxpbmUpCisjICBkZWZpbmUgX19hY2NfSEFWRV9mb3JjZWlubGluZSAxCisjZWxzZQorIyAgZGVmaW5lIF9fYWNjX2ZvcmNlaW5saW5lCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19ub2lubGluZSkKKyNpZiAxICYmIChBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0NDX0dOVUMgPj0gMHgwNDAwMDB1bCkgJiYgKEFDQ19DQ19HTlVDIDwgMHgwNDAwMDN1bCkKKyMgIGRlZmluZSBfX2FjY19ub2lubGluZSAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub2lubGluZV9fLF9fdXNlZF9fKSkKKyNlbGlmIChBQ0NfQ0NfR05VQyA+PSAweDAzMDIwMHVsKQorIyAgZGVmaW5lIF9fYWNjX25vaW5saW5lICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQorI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNjAwKSAmJiBBQ0NfQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2FjY19ub2lubGluZSAgICAgICAgX19kZWNsc3BlYyhub2lubGluZSkKKyNlbGlmIChBQ0NfQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDgwMCkgJiYgQUNDX0NDX1NZTlRBWF9HTlVDKQorIyAgZGVmaW5lIF9fYWNjX25vaW5saW5lICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vaW5saW5lX18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2Nfbm9pbmxpbmUgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXykpCisjZWxpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkpCisjICBkZWZpbmUgX19hY2Nfbm9pbmxpbmUgICAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisjZWxpZiAoQUNDX0NDX01XRVJLUyAmJiAoX19NV0VSS1NfXyA+PSAweDMyMDApICYmIChBQ0NfT1NfV0lOMzIgfHwgQUNDX09TX1dJTjY0KSkKKyMgIGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICBlbHNlCisjICAgIGRlZmluZSBfX2FjY19ub2lubGluZSAgICAgIF9fZGVjbHNwZWMobm9pbmxpbmUpCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX25vaW5saW5lKQorIyAgZGVmaW5lIF9fYWNjX0hBVkVfbm9pbmxpbmUgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2FjY19ub2lubGluZQorI2VuZGlmCisjaWYgKGRlZmluZWQoX19hY2NfSEFWRV9mb3JjZWlubGluZSkgfHwgZGVmaW5lZChfX2FjY19IQVZFX25vaW5saW5lKSkgJiYgIWRlZmluZWQoX19hY2NfSEFWRV9pbmxpbmUpCisjICBlcnJvciAidGhpcyBzaG91bGQgbm90IGhhcHBlbiIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX25vcmV0dXJuKQorI2lmIChBQ0NfQ0NfR05VQyA+PSAweDAyMDcwMHVsKQorIyAgZGVmaW5lIF9fYWNjX25vcmV0dXJuICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNDUwKSAmJiBBQ0NfQ0NfU1lOVEFYX01TQykKKyMgIGRlZmluZSBfX2FjY19ub3JldHVybiAgICAgICAgX19kZWNsc3BlYyhub3JldHVybikKKyNlbGlmIChBQ0NfQ0NfSU5URUxDICYmIChfX0lOVEVMX0NPTVBJTEVSID49IDYwMCkgJiYgQUNDX0NDX1NZTlRBWF9HTlVDKQorIyAgZGVmaW5lIF9fYWNjX25vcmV0dXJuICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vcmV0dXJuX18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2Nfbm9yZXR1cm4gICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZWxpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTIwMCkpCisjICBkZWZpbmUgX19hY2Nfbm9yZXR1cm4gICAgICAgIF9fZGVjbHNwZWMobm9yZXR1cm4pCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19hY2Nfbm9yZXR1cm4pCisjICBkZWZpbmUgX19hY2NfSEFWRV9ub3JldHVybiAxCisjZWxzZQorIyAgZGVmaW5lIF9fYWNjX25vcmV0dXJuCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19ub3Rocm93KQorI2lmIChBQ0NfQ0NfR05VQyA+PSAweDAzMDMwMHVsKQorIyAgZGVmaW5lIF9fYWNjX25vdGhyb3cgICAgICAgICBfX2F0dHJpYnV0ZV9fKChfX25vdGhyb3dfXykpCisjZWxpZiAoQUNDX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA0NTApICYmIEFDQ19DQ19TWU5UQVhfTVNDKSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgZGVmaW5lIF9fYWNjX25vdGhyb3cgICAgICAgICBfX2RlY2xzcGVjKG5vdGhyb3cpCisjZWxpZiAoQUNDX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA+PSA4MDApICYmIEFDQ19DQ19TWU5UQVhfR05VQykKKyMgIGRlZmluZSBfX2FjY19ub3Rocm93ICAgICAgICAgX19hdHRyaWJ1dGVfXygoX19ub3Rocm93X18pKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2Nfbm90aHJvdyAgICAgICAgIF9fYXR0cmlidXRlX18oKF9fbm90aHJvd19fKSkKKyNlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgIGRlZmluZSBfX2FjY19ub3Rocm93ICAgICAgICAgX19kZWNsc3BlYyhub3Rocm93KQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX25vdGhyb3cpCisjICBkZWZpbmUgX19hY2NfSEFWRV9ub3Rocm93IDEKKyNlbHNlCisjICBkZWZpbmUgX19hY2Nfbm90aHJvdworI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfcmVzdHJpY3QpCisjaWYgKEFDQ19DQ19HTlVDID49IDB4MDMwNDAwdWwpCisjICBkZWZpbmUgX19hY2NfcmVzdHJpY3QgICAgICAgIF9fcmVzdHJpY3RfXworI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gNjAwKSAmJiBBQ0NfQ0NfU1lOVEFYX0dOVUMpCisjICBkZWZpbmUgX19hY2NfcmVzdHJpY3QgICAgICAgIF9fcmVzdHJpY3RfXworI2VsaWYgKEFDQ19DQ19MTFZNKQorIyAgZGVmaW5lIF9fYWNjX3Jlc3RyaWN0ICAgICAgICBfX3Jlc3RyaWN0X18KKyNlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxNDAwKSkKKyMgIGRlZmluZSBfX2FjY19yZXN0cmljdCAgICAgICAgX19yZXN0cmljdAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX3Jlc3RyaWN0KQorIyAgZGVmaW5lIF9fYWNjX0hBVkVfcmVzdHJpY3QgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2FjY19yZXN0cmljdAorI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfbGlrZWx5KSAmJiAhZGVmaW5lZChfX2FjY191bmxpa2VseSkKKyNpZiAoQUNDX0NDX0dOVUMgPj0gMHgwMzAyMDB1bCkKKyMgIGRlZmluZSBfX2FjY19saWtlbHkoZSkgICAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMSkpCisjICBkZWZpbmUgX19hY2NfdW5saWtlbHkoZSkgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDApKQorI2VsaWYgKEFDQ19DQ19JTlRFTEMgJiYgKF9fSU5URUxfQ09NUElMRVIgPj0gODAwKSkKKyMgIGRlZmluZSBfX2FjY19saWtlbHkoZSkgICAgICAgKF9fYnVpbHRpbl9leHBlY3QoISEoZSksMSkpCisjICBkZWZpbmUgX19hY2NfdW5saWtlbHkoZSkgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDApKQorI2VsaWYgKEFDQ19DQ19MTFZNIHx8IEFDQ19DQ19QQVRIU0NBTEUpCisjICBkZWZpbmUgX19hY2NfbGlrZWx5KGUpICAgICAgIChfX2J1aWx0aW5fZXhwZWN0KCEhKGUpLDEpKQorIyAgZGVmaW5lIF9fYWNjX3VubGlrZWx5KGUpICAgICAoX19idWlsdGluX2V4cGVjdCghIShlKSwwKSkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2FjY19saWtlbHkpCisjICBkZWZpbmUgX19hY2NfSEFWRV9saWtlbHkgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2FjY19saWtlbHkoZSkgICAgICAgKGUpCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fYWNjX3VubGlrZWx5KQorIyAgZGVmaW5lIF9fYWNjX0hBVkVfdW5saWtlbHkgMQorI2Vsc2UKKyMgIGRlZmluZSBfX2FjY191bmxpa2VseShlKSAgICAgKGUpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfVU5VU0VEKQorIyAgaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDYwMCkpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEKHZhcikgICAgICAgICAoKHZvaWQpICZ2YXIpCisjICBlbGlmIChBQ0NfQ0NfQk9STEFOREMgfHwgQUNDX0NDX0hJR0hDIHx8IEFDQ19DQ19ORFBDIHx8IEFDQ19DQ19QRUxMRVNDIHx8IEFDQ19DQ19UVVJCT0MpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEKHZhcikgICAgICAgICBpZiAoJnZhcikgOyBlbHNlCisjICBlbGlmIChBQ0NfQ0NfR05VQyB8fCBBQ0NfQ0NfTExWTSB8fCBBQ0NfQ0NfUEFUSFNDQUxFKQorIyAgICBkZWZpbmUgQUNDX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSB2YXIpCisjICBlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEKHZhcikgICAgICAgICBpZiAoJnZhcikgOyBlbHNlCisjICBlbGlmIChBQ0NfQ0NfS0VJTEMpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEKHZhcikgICAgICAgICB7ZXh0ZXJuIGludCBfX2FjY191bnVzZWRbMS0yKiEoc2l6ZW9mKHZhcik+MCldO30KKyMgIGVsaWYgKEFDQ19DQ19QQUNJRklDQykKKyMgICAgZGVmaW5lIEFDQ19VTlVTRUQodmFyKSAgICAgICAgICgodm9pZCkgc2l6ZW9mKHZhcikpCisjICBlbGlmIChBQ0NfQ0NfV0FUQ09NQykgJiYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICAgZGVmaW5lIEFDQ19VTlVTRUQodmFyKSAgICAgICAgICgodm9pZCkgdmFyKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX1VOVVNFRCh2YXIpICAgICAgICAgKCh2b2lkKSAmdmFyKQorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VTlVTRURfRlVOQykKKyMgIGlmIChBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA2MDApKQorIyAgICBkZWZpbmUgQUNDX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSBmdW5jKQorIyAgZWxpZiAoQUNDX0NDX0JPUkxBTkRDIHx8IEFDQ19DQ19ORFBDIHx8IEFDQ19DQ19UVVJCT0MpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEX0ZVTkMoZnVuYykgICBpZiAoZnVuYykgOyBlbHNlCisjICBlbGlmIChBQ0NfQ0NfTExWTSkKKyMgICAgZGVmaW5lIEFDQ19VTlVTRURfRlVOQyhmdW5jKSAgICgodm9pZCkgJmZ1bmMpCisjICBlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEX0ZVTkMoZnVuYykgICBpZiAoZnVuYykgOyBlbHNlCisjICBlbGlmIChBQ0NfQ0NfTVNDKQorIyAgICBkZWZpbmUgQUNDX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSAmZnVuYykKKyMgIGVsaWYgKEFDQ19DQ19LRUlMQyB8fCBBQ0NfQ0NfUEVMTEVTQykKKyMgICAgZGVmaW5lIEFDQ19VTlVTRURfRlVOQyhmdW5jKSAgIHtleHRlcm4gaW50IF9fYWNjX3VudXNlZFsxLTIqIShzaXplb2YoKGludClmdW5jKT4wKV07fQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX1VOVVNFRF9GVU5DKGZ1bmMpICAgKCh2b2lkKSBmdW5jKQorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VTlVTRURfTEFCRUwpCisjICBpZiAoQUNDX0NDX1dBVENPTUMpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjICAgIGRlZmluZSBBQ0NfVU5VU0VEX0xBQkVMKGwpICAgICBzd2l0Y2goMCkgY2FzZSAxOmdvdG8gbAorIyAgZWxpZiAoQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfV0FUQ09NQykKKyMgICAgZGVmaW5lIEFDQ19VTlVTRURfTEFCRUwobCkgICAgIGlmICgwKSBnb3RvIGwKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19VTlVTRURfTEFCRUwobCkgICAgIHN3aXRjaCgwKSBjYXNlIDE6Z290byBsCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUikKKyMgIGlmIDAKKyMgICAgZGVmaW5lIEFDQ19ERUZJTkVfVU5JTklUSUFMSVpFRF9WQVIodHlwZSx2YXIsaW5pdCkgIHR5cGUgdmFyCisjICBlbGlmIDAgJiYgKEFDQ19DQ19HTlVDKQorIyAgICBkZWZpbmUgQUNDX0RFRklORV9VTklOSVRJQUxJWkVEX1ZBUih0eXBlLHZhcixpbml0KSAgdHlwZSB2YXIgPSB2YXIKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19ERUZJTkVfVU5JTklUSUFMSVpFRF9WQVIodHlwZSx2YXIsaW5pdCkgIHR5cGUgdmFyID0gaW5pdAorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUikKKyMgIGlmIChBQ0NfQ0NfQVpURUNDIHx8IEFDQ19DQ19aT1JURUNIQykKKyMgICAgZGVmaW5lIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2FjY19jdGFbMS0hKGUpXTsKKyMgIGVsaWYgKEFDQ19DQ19ETUMgfHwgQUNDX0NDX1NZTUFOVEVDQykKKyMgICAgZGVmaW5lIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2FjY19jdGFbMXUtMiohKGUpXTsKKyMgIGVsaWYgKEFDQ19DQ19UVVJCT0MgJiYgKF9fVFVSQk9DX18gPT0gMHgwMjk1KSkKKyMgICAgZGVmaW5lIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2FjY19jdGFbMS0hKGUpXTsKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUX0hFQURFUihlKSAgZXh0ZXJuIGludCBfX2FjY19jdGFbMS0yKiEoZSldOworIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKQorIyAgaWYgKEFDQ19DQ19BWlRFQ0MpCisjICAgIGRlZmluZSBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChlKSAge3R5cGVkZWYgaW50IF9fYWNjX2N0YV90WzEtIShlKV07fQorIyAgZWxpZiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfUEFDSUZJQ0MgfHwgQUNDX0NDX1NZTUFOVEVDQyB8fCBBQ0NfQ0NfWk9SVEVDSEMpCisjICAgIGRlZmluZSBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDkwMCkpCisjICAgIGRlZmluZSBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbGlmIChBQ0NfQ0NfVFVSQk9DICYmIChfX1RVUkJPQ19fID09IDB4MDI5NSkpCisjICAgIGRlZmluZSBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChlKSAgc3dpdGNoKDApIGNhc2UgMTpjYXNlICEoZSk6YnJlYWs7CisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChlKSAge3R5cGVkZWYgaW50IF9fYWNjX2N0YV90WzEtMiohKGUpXTt9CisjICBlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19BUkNIX0kwODYgfHwgQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2IHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjICBpZiAoQUNDX0NDX0dOVUMgfHwgQUNDX0NDX0hJR0hDIHx8IEFDQ19DQ19ORFBDIHx8IEFDQ19DQ19QQUNJRklDQykKKyMgIGVsaWYgKEFDQ19DQ19ETUMgfHwgQUNDX0NDX1NZTUFOVEVDQyB8fCBBQ0NfQ0NfWk9SVEVDSEMpCisjICAgIGRlZmluZSBfX2FjY19jZGVjbCAgICAgICAgICAgICAgICAgX19jZGVjbAorIyAgICBkZWZpbmUgX19hY2NfY2RlY2xfYXRleGl0CisjICAgIGRlZmluZSBfX2FjY19jZGVjbF9tYWluICAgICAgICAgICAgX19jZGVjbAorIyAgICBpZiAoQUNDX09TX09TMiAmJiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfU1lNQU5URUNDKSkKKyMgICAgICBkZWZpbmUgX19hY2NfY2RlY2xfcXNvcnQgICAgICAgICBfX3Bhc2NhbAorIyAgICBlbGlmIChBQ0NfT1NfT1MyICYmIChBQ0NfQ0NfWk9SVEVDSEMpKQorIyAgICAgIGRlZmluZSBfX2FjY19jZGVjbF9xc29ydCAgICAgICAgIF9zdGRjYWxsCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX19hY2NfY2RlY2xfcXNvcnQgICAgICAgICBfX2NkZWNsCisjICAgIGVuZGlmCisjICBlbGlmIChBQ0NfQ0NfV0FUQ09NQykKKyMgICAgZGVmaW5lIF9fYWNjX2NkZWNsICAgICAgICAgICAgICAgICBfX2NkZWNsCisjICBlbHNlCisjICAgIGRlZmluZSBfX2FjY19jZGVjbCAgICAgICAgICAgICAgICAgX19jZGVjbAorIyAgICBkZWZpbmUgX19hY2NfY2RlY2xfYXRleGl0ICAgICAgICAgIF9fY2RlY2wKKyMgICAgZGVmaW5lIF9fYWNjX2NkZWNsX21haW4gICAgICAgICAgICBfX2NkZWNsCisjICAgIGRlZmluZSBfX2FjY19jZGVjbF9xc29ydCAgICAgICAgICAgX19jZGVjbAorIyAgZW5kaWYKKyMgIGlmIChBQ0NfQ0NfR05VQyB8fCBBQ0NfQ0NfSElHSEMgfHwgQUNDX0NDX05EUEMgfHwgQUNDX0NDX1BBQ0lGSUNDIHx8IEFDQ19DQ19XQVRDT01DKQorIyAgZWxpZiAoQUNDX09TX09TMiAmJiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfU1lNQU5URUNDKSkKKyMgICAgZGVmaW5lIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfX3Bhc2NhbAorIyAgZWxpZiAoQUNDX09TX09TMiAmJiAoQUNDX0NDX1pPUlRFQ0hDKSkKKyMgICAgZGVmaW5lIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfc3RkY2FsbAorIyAgZWxpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTQwMCkpICYmIGRlZmluZWQoX01fQ0VFX1BVUkUpCisjICAgIGRlZmluZSBfX2FjY19jZGVjbF9zaWdoYW5kbGVyICAgICAgX19jbHJjYWxsCisjICBlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSA2MDAgJiYgX01TQ19WRVIgPCA3MDApKQorIyAgICBpZiBkZWZpbmVkKF9ETEwpCisjICAgICAgZGVmaW5lIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgICAgX2ZhciBfY2RlY2wgX2xvYWRkcworIyAgICBlbGlmIGRlZmluZWQoX01UKQorIyAgICAgIGRlZmluZSBfX2FjY19jZGVjbF9zaWdoYW5kbGVyICAgIF9mYXIgX2NkZWNsCisjICAgIGVsc2UKKyMgICAgICBkZWZpbmUgX19hY2NfY2RlY2xfc2lnaGFuZGxlciAgICBfY2RlY2wKKyMgICAgZW5kaWYKKyMgIGVsc2UKKyMgICAgZGVmaW5lIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgICAgICBfX2NkZWNsCisjICBlbmRpZgorI2VsaWYgKEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQ0NfV0FUQ09NQykKKyMgIGRlZmluZSBfX2FjY19jZGVjbCAgICAgICAgICAgICAgICAgICBfX2NkZWNsCisjZWxpZiAoQUNDX0FSQ0hfTTY4SyAmJiBBQ0NfT1NfVE9TICYmIChBQ0NfQ0NfUFVSRUMgfHwgQUNDX0NDX1RVUkJPQykpCisjICBkZWZpbmUgX19hY2NfY2RlY2wgICAgICAgICAgICAgICAgICAgY2RlY2wKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX2NkZWNsKQorIyAgZGVmaW5lIF9fYWNjX2NkZWNsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19jZGVjbF9hdGV4aXQpCisjICBkZWZpbmUgX19hY2NfY2RlY2xfYXRleGl0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19jZGVjbF9tYWluKQorIyAgZGVmaW5lIF9fYWNjX2NkZWNsX21haW4KKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX2NkZWNsX3Fzb3J0KQorIyAgZGVmaW5lIF9fYWNjX2NkZWNsX3Fzb3J0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY19jZGVjbF9zaWdoYW5kbGVyKQorIyAgZGVmaW5lIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fYWNjX2NkZWNsX3ZhKQorIyAgZGVmaW5lIF9fYWNjX2NkZWNsX3ZhICAgICAgICAgICAgICAgIF9fYWNjX2NkZWNsCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX1dJTkRPV1NfSCkKKyNpZiAoQUNDX09TX0NZR1dJTiB8fCAoQUNDX09TX0VNWCAmJiBkZWZpbmVkKF9fUlNYTlRfXykpIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjICBpZiAoQUNDX0NDX1dBVENPTUMgJiYgKF9fV0FUQ09NQ19fIDwgMTAwMCkpCisjICBlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19QVzMyX18pCisjICBlbGlmICgoQUNDX09TX0NZR1dJTiB8fCBkZWZpbmVkKF9fTUlOR1czMl9fKSkgJiYgKEFDQ19DQ19HTlVDICYmIChBQ0NfQ0NfR05VQyA8IDB4MDI1ZjAwdWwpKSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19IQVZFX1dJTkRPV1NfSCAxCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX0FSQ0hfQUxQSEEpCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9TSE9SVCAgICAgICAxCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VU0hPUlQgICAgICAxCisjZWxpZiAoQUNDX0FSQ0hfQU1ENjQpCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9JTlRfSU5ERVggICAxCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgQUNDX09QVF9VTkFMSUdORUQxNiAgICAgICAxCisjICBkZWZpbmUgQUNDX09QVF9VTkFMSUdORUQzMiAgICAgICAxCisjICBkZWZpbmUgQUNDX09QVF9VTkFMSUdORUQ2NCAgICAgICAxCisjZWxpZiAoQUNDX0FSQ0hfQVJNICYmIEFDQ19BUkNIX0FSTV9USFVNQikKKyNlbGlmIChBQ0NfQVJDSF9BUk0pCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9TSE9SVCAgICAgICAxCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VU0hPUlQgICAgICAxCisjZWxpZiAoQUNDX0FSQ0hfQ1JJUykKKyMgIGRlZmluZSBBQ0NfT1BUX1VOQUxJR05FRDE2ICAgICAgIDEKKyMgIGRlZmluZSBBQ0NfT1BUX1VOQUxJR05FRDMyICAgICAgIDEKKyNlbGlmIChBQ0NfQVJDSF9JMzg2KQorIyAgZGVmaW5lIEFDQ19PUFRfVU5BTElHTkVEMTYgICAgICAgMQorIyAgZGVmaW5lIEFDQ19PUFRfVU5BTElHTkVEMzIgICAgICAgMQorI2VsaWYgKEFDQ19BUkNIX0lBNjQpCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9JTlRfSU5ERVggICAxCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjICBkZWZpbmUgQUNDX09QVF9QUkVGRVJfUE9TVElOQyAgICAxCisjZWxpZiAoQUNDX0FSQ0hfTTY4SykKKyMgIGRlZmluZSBBQ0NfT1BUX1BSRUZFUl9QT1NUSU5DICAgIDEKKyMgIGRlZmluZSBBQ0NfT1BUX1BSRUZFUl9QUkVERUMgICAgIDEKKyMgIGlmIGRlZmluZWQoX19tYzY4MDIwX18pICYmICFkZWZpbmVkKF9fbWNvbGRmaXJlX18pCisjICAgIGRlZmluZSBBQ0NfT1BUX1VOQUxJR05FRDE2ICAgICAxCisjICAgIGRlZmluZSBBQ0NfT1BUX1VOQUxJR05FRDMyICAgICAxCisjICBlbmRpZgorI2VsaWYgKEFDQ19BUkNIX01JUFMpCisjICBkZWZpbmUgQUNDX09QVF9BVk9JRF9VSU5UX0lOREVYICAxCisjZWxpZiAoQUNDX0FSQ0hfUE9XRVJQQykKKyMgIGRlZmluZSBBQ0NfT1BUX1BSRUZFUl9QUkVJTkMgICAgIDEKKyMgIGRlZmluZSBBQ0NfT1BUX1BSRUZFUl9QUkVERUMgICAgIDEKKyMgIGlmIGRlZmluZWQoQUNDX0FCSV9CSUdfRU5ESUFOKQorIyAgICBkZWZpbmUgQUNDX09QVF9VTkFMSUdORUQxNiAgICAgMQorIyAgICBkZWZpbmUgQUNDX09QVF9VTkFMSUdORUQzMiAgICAgMQorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQVJDSF9TMzkwKQorIyAgZGVmaW5lIEFDQ19PUFRfVU5BTElHTkVEMTYgICAgICAgMQorIyAgZGVmaW5lIEFDQ19PUFRfVU5BTElHTkVEMzIgICAgICAgMQorIyAgaWYgKEFDQ19TSVpFT0ZfU0laRV9UID09IDgpCisjICAgIGRlZmluZSBBQ0NfT1BUX1VOQUxJR05FRDY0ICAgICAxCisjICBlbmRpZgorI2VsaWYgKEFDQ19BUkNIX1NIKQorIyAgZGVmaW5lIEFDQ19PUFRfUFJFRkVSX1BPU1RJTkMgICAgMQorIyAgZGVmaW5lIEFDQ19PUFRfUFJFRkVSX1BSRURFQyAgICAgMQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19JTkxJTkVfQVNNKQorI2lmIGRlZmluZWQoQUNDX0NDX0xMVk0pCisjICBkZWZpbmUgQUNDX0NGR19OT19JTkxJTkVfQVNNIDEKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19VTkFMSUdORUQpCisjaWYgZGVmaW5lZChBQ0NfQUJJX05FVVRSQUxfRU5ESUFOKSB8fCBkZWZpbmVkKEFDQ19BUkNIX0dFTkVSSUMpCisjICBkZWZpbmUgQUNDX0NGR19OT19VTkFMSUdORUQgMQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19DRkdfTk9fVU5BTElHTkVEKQorIyAgdW5kZWYgQUNDX09QVF9VTkFMSUdORUQxNgorIyAgdW5kZWYgQUNDX09QVF9VTkFMSUdORUQzMgorIyAgdW5kZWYgQUNDX09QVF9VTkFMSUdORUQ2NAorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQ0ZHX05PX0lOTElORV9BU00pCisjZWxpZiAoQUNDX0FSQ0hfSTM4NiAmJiAoQUNDX09TX0RPUzMyIHx8IEFDQ19PU19XSU4zMikgJiYgKEFDQ19DQ19ETUMgfHwgQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfTVNDIHx8IEFDQ19DQ19QRUxMRVNDKSkKKyMgIGRlZmluZSBBQ0NfQVNNX1NZTlRBWF9NU0MgMQorI2VsaWYgKEFDQ19PU19XSU42NCAmJiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfSU5URUxDIHx8IEFDQ19DQ19NU0MgfHwgQUNDX0NDX1BFTExFU0MpKQorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgKEFDQ19DQ19HTlVDIHx8IEFDQ19DQ19JTlRFTEMgfHwgQUNDX0NDX1BBVEhTQ0FMRSkpCisjICBkZWZpbmUgQUNDX0FTTV9TWU5UQVhfR05VQyAxCisjZWxpZiAoQUNDX0FSQ0hfQU1ENjQgJiYgKEFDQ19DQ19HTlVDIHx8IEFDQ19DQ19JTlRFTEMgfHwgQUNDX0NDX1BBVEhTQ0FMRSkpCisjICBkZWZpbmUgQUNDX0FTTV9TWU5UQVhfR05VQyAxCisjZW5kaWYKKyNpZiAoQUNDX0FTTV9TWU5UQVhfR05VQykKKyNpZiAoQUNDX0FSQ0hfSTM4NiAmJiBBQ0NfQ0NfR05VQyAmJiAoQUNDX0NDX0dOVUMgPCAweDAyMDAwMHVsKSkKKyMgIGRlZmluZSBfX0FDQ19BU01fQ0xPQkJFUiAgICAgICAgICJheCIKKyNlbGlmIChBQ0NfQ0NfSU5URUxDKQorIyAgZGVmaW5lIF9fQUNDX0FTTV9DTE9CQkVSICAgICAgICAgIm1lbW9yeSIKKyNlbHNlCisjICBkZWZpbmUgX19BQ0NfQVNNX0NMT0JCRVIgICAgICAgICAiY2MiLCAibWVtb3J5IgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQUNDX0lORk9TVFJfTU0pCisjZWxpZiAoQUNDX01NX0ZMQVQpICYmIChkZWZpbmVkKF9fQUNDX0lORk9TVFJfUE0pIHx8IGRlZmluZWQoQUNDX0lORk9fQUJJX1BNKSkKKyMgIGRlZmluZSBfX0FDQ19JTkZPU1RSX01NICAgICAgICAgICIiCisjZWxpZiBkZWZpbmVkKEFDQ19JTkZPX01NKQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfTU0gICAgICAgICAgIi4iIEFDQ19JTkZPX01NCisjZWxzZQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfTU0gICAgICAgICAgIiIKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BQ0NfSU5GT1NUUl9QTSkKKyNlbGlmIGRlZmluZWQoQUNDX0lORk9fQUJJX1BNKQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfUE0gICAgICAgICAgIi4iIEFDQ19JTkZPX0FCSV9QTQorI2Vsc2UKKyMgIGRlZmluZSBfX0FDQ19JTkZPU1RSX1BNICAgICAgICAgICIiCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQUNDX0lORk9TVFJfRU5ESUFOKQorI2VsaWYgZGVmaW5lZChBQ0NfSU5GT19BQklfRU5ESUFOKQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfRU5ESUFOICAgICAgIi4iIEFDQ19JTkZPX0FCSV9FTkRJQU4KKyNlbHNlCisjICBkZWZpbmUgX19BQ0NfSU5GT1NUUl9FTkRJQU4gICAgICAiIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FDQ19JTkZPU1RSX09TTkFNRSkKKyNlbGlmIGRlZmluZWQoQUNDX0lORk9fT1NfQ09OU09MRSkKKyMgIGRlZmluZSBfX0FDQ19JTkZPU1RSX09TTkFNRSAgICAgIEFDQ19JTkZPX09TICIuIiBBQ0NfSU5GT19PU19DT05TT0xFCisjZWxpZiBkZWZpbmVkKEFDQ19JTkZPX09TX1BPU0lYKQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfT1NOQU1FICAgICAgQUNDX0lORk9fT1MgIi4iIEFDQ19JTkZPX09TX1BPU0lYCisjZWxzZQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfT1NOQU1FICAgICAgQUNDX0lORk9fT1MKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BQ0NfSU5GT1NUUl9MSUJDKQorI2VsaWYgZGVmaW5lZChBQ0NfSU5GT19MSUJDKQorIyAgZGVmaW5lIF9fQUNDX0lORk9TVFJfTElCQyAgICAgICAgIi4iIEFDQ19JTkZPX0xJQkMKKyNlbHNlCisjICBkZWZpbmUgX19BQ0NfSU5GT1NUUl9MSUJDICAgICAgICAiIgorI2VuZGlmCisjaWYgZGVmaW5lZChfX0FDQ19JTkZPU1RSX0NDVkVSKQorI2VsaWYgZGVmaW5lZChBQ0NfSU5GT19DQ1ZFUikKKyMgIGRlZmluZSBfX0FDQ19JTkZPU1RSX0NDVkVSICAgICAgICIgIiBBQ0NfSU5GT19DQ1ZFUgorI2Vsc2UKKyMgIGRlZmluZSBfX0FDQ19JTkZPU1RSX0NDVkVSICAgICAgICIiCisjZW5kaWYKKyNkZWZpbmUgQUNDX0lORk9fU1RSSU5HIFwKKyAgICBBQ0NfSU5GT19BUkNIIF9fQUNDX0lORk9TVFJfTU0gX19BQ0NfSU5GT1NUUl9QTSBfX0FDQ19JTkZPU1RSX0VORElBTiBcCisgICAgIiAiIF9fQUNDX0lORk9TVFJfT1NOQU1FIF9fQUNDX0lORk9TVFJfTElCQyAiICIgQUNDX0lORk9fQ0MgX19BQ0NfSU5GT1NUUl9DQ1ZFUgorI2lmIGRlZmluZWQoQUNDX0NGR19OT19DT05GSUdfSEVBREVSKQorI2VsaWYgZGVmaW5lZChBQ0NfQ0ZHX0NPTkZJR19IRUFERVIpCisjZWxzZQorI2lmICFkZWZpbmVkKEFDQ19DRkdfQVVUT19OT19IRUFERVJTKQorI2lmIGRlZmluZWQoQUNDX0xJQkNfTkFLRUQpCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX0ZSRUVTVEFORElORykKKyMgIGRlZmluZSBIQVZFX0xJTUlUU19IIDEKKyMgIGRlZmluZSBIQVZFX1NUREFSR19IIDEKKyMgIGRlZmluZSBIQVZFX1NURERFRl9IIDEKKyNlbGlmIGRlZmluZWQoQUNDX0xJQkNfTU9TVExZX0ZSRUVTVEFORElORykKKyMgIGRlZmluZSBIQVZFX0xJTUlUU19IIDEKKyMgIGRlZmluZSBIQVZFX1NFVEpNUF9IIDEKKyMgIGRlZmluZSBIQVZFX1NUREFSR19IIDEKKyMgIGRlZmluZSBIQVZFX1NURERFRl9IIDEKKyMgIGRlZmluZSBIQVZFX1NURElPX0ggMQorIyAgZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorI2Vsc2UKKyNkZWZpbmUgU1REQ19IRUFERVJTIDEKKyNkZWZpbmUgSEFWRV9BU1NFUlRfSCAxCisjZGVmaW5lIEhBVkVfQ1RZUEVfSCAxCisjZGVmaW5lIEhBVkVfRElSRU5UX0ggMQorI2RlZmluZSBIQVZFX0VSUk5PX0ggMQorI2RlZmluZSBIQVZFX0ZDTlRMX0ggMQorI2RlZmluZSBIQVZFX0ZMT0FUX0ggMQorI2RlZmluZSBIQVZFX0xJTUlUU19IIDEKKyNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCisjZGVmaW5lIEhBVkVfTUVNT1JZX0ggMQorI2RlZmluZSBIQVZFX1NFVEpNUF9IIDEKKyNkZWZpbmUgSEFWRV9TSUdOQUxfSCAxCisjZGVmaW5lIEhBVkVfU1REQVJHX0ggMQorI2RlZmluZSBIQVZFX1NURERFRl9IIDEKKyNkZWZpbmUgSEFWRV9TVERJT19IIDEKKyNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCisjZGVmaW5lIEhBVkVfU1RSSU5HX0ggMQorI2RlZmluZSBIQVZFX1RJTUVfSCAxCisjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQorI2RlZmluZSBIQVZFX1VUSU1FX0ggMQorI2RlZmluZSBIQVZFX1NZU19TVEFUX0ggMQorI2RlZmluZSBIQVZFX1NZU19USU1FX0ggMQorI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKKyNpZiAoQUNDX09TX1BPU0lYKQorIyAgaWYgKEFDQ19PU19QT1NJWF9BSVgpCisjICAgIGRlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKyMgIGVsaWYgKEFDQ19PU19QT1NJWF9GUkVFQlNEIHx8IEFDQ19PU19QT1NJWF9NQUNPU1ggfHwgQUNDX09TX1BPU0lYX05FVEJTRCB8fCBBQ0NfT1NfUE9TSVhfT1BFTkJTRCkKKyMgICAgZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKyMgICAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgZWxpZiAoQUNDX09TX1BPU0lYX0hQVVggfHwgQUNDX09TX1BPU0lYX0lOVEVSSVgpCisjICAgIGRlZmluZSBIQVZFX0FMTE9DQV9IIDEKKyMgIGVsaWYgKEFDQ19PU19QT1NJWF9NQUNPU1ggJiYgQUNDX0xJQkNfTVNMKQorIyAgICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgICAgdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorIyAgZWxpZiAoQUNDX09TX1BPU0lYX1NPTEFSSVMgfHwgQUNDX09TX1BPU0lYX1NVTk9TKQorIyAgICBkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisjICBlbmRpZgorIyAgaWYgKEFDQ19MSUJDX0RJRVRMSUJDIHx8IEFDQ19MSUJDX0dMSUJDIHx8IEFDQ19MSUJDX1VDTElCQykKKyMgICAgZGVmaW5lIEhBVkVfU1RSSU5HU19IIDEKKyMgICAgZGVmaW5lIEhBVkVfU1lTX01NQU5fSCAxCisjICAgIGRlZmluZSBIQVZFX1NZU19SRVNPVVJDRV9IIDEKKyMgICAgZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxCisjICBlbmRpZgorIyAgaWYgKEFDQ19MSUJDX05FV0xJQikKKyMgICAgdW5kZWYgSEFWRV9TVFJJTkdTX0gKKyMgIGVuZGlmCisjZWxpZiAoQUNDX09TX0NZR1dJTikKKyMgIGRlZmluZSBIQVZFX0lPX0ggMQorI2VsaWYgKEFDQ19PU19FTVgpCisjICBkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisjICBkZWZpbmUgSEFWRV9JT19IIDEKKyNlbGlmIChBQ0NfQVJDSF9NNjhLICYmIEFDQ19PU19UT1MgJiYgQUNDX0NDX0dOVUMpCisjICBpZiAhZGVmaW5lZChfX01JTlRfXykKKyMgICAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQVJDSF9NNjhLICYmIEFDQ19PU19UT1MgJiYgKEFDQ19DQ19QVVJFQyB8fCBBQ0NfQ0NfVFVSQk9DKSkKKyMgIHVuZGVmIEhBVkVfRElSRU5UX0gKKyMgIHVuZGVmIEhBVkVfRkNOVExfSAorIyAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgdW5kZWYgSEFWRV9NRU1PUllfSAorIyAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgdW5kZWYgSEFWRV9VVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19TVEFUX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgdW5kZWYgSEFWRV9TWVNfVFlQRVNfSAorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2IHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjZGVmaW5lIEhBVkVfQ09OSU9fSCAxCisjZGVmaW5lIEhBVkVfRElSRUNUX0ggMQorI2RlZmluZSBIQVZFX0RPU19IIDEKKyNkZWZpbmUgSEFWRV9JT19IIDEKKyNkZWZpbmUgSEFWRV9TSEFSRV9IIDEKKyNpZiAoQUNDX0NDX0FaVEVDQykKKyMgIHVuZGVmIEhBVkVfQ09OSU9fSAorIyAgdW5kZWYgSEFWRV9ESVJFQ1RfSAorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgdW5kZWYgSEFWRV9TSEFSRV9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICB1bmRlZiBIQVZFX1VUSU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1NUQVRfSAorIyAgdW5kZWYgSEFWRV9TWVNfVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19UWVBFU19ICisjZWxpZiAoQUNDX0NDX0JPUkxBTkRDKQorIyAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgdW5kZWYgSEFWRV9TWVNfVElNRV9ICisjICBpZiAoQUNDX09TX1dJTjMyIHx8IEFDQ19PU19XSU42NCkKKyMgICAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgZW5kaWYKKyMgIGlmIChfX0JPUkxBTkRDX18gPCAweDA0MDApCisjICAgIHVuZGVmIEhBVkVfRElSRU5UX0gKKyMgICAgdW5kZWYgSEFWRV9VVElNRV9ICisjICBlbmRpZgorI2VsaWYgKEFDQ19DQ19ETUMpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICBkZWZpbmUgSEFWRV9TWVNfRElSRU5UX0ggMQorI2VsaWYgKEFDQ19PU19ET1MzMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX0RKR1BQX18pCisjZWxpZiAoQUNDX09TX0RPUzMyICYmIEFDQ19DQ19ISUdIQykKKyMgIGRlZmluZSBIQVZFX0FMTE9DQV9IIDEKKyMgIHVuZGVmIEhBVkVfRElSRU5UX0gKKyMgIHVuZGVmIEhBVkVfVU5JU1REX0gKKyNlbGlmIChBQ0NfQ0NfSUJNQyAmJiBBQ0NfT1NfT1MyKQorIyAgdW5kZWYgSEFWRV9ET1NfSAorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgdW5kZWYgSEFWRV9VVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGRlZmluZSBIQVZFX1NZU19VVElNRV9IIDEKKyNlbGlmIChBQ0NfQ0NfSU5URUxDIHx8IEFDQ19DQ19NU0MpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICB1bmRlZiBIQVZFX1VUSU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggMQorI2VsaWYgKEFDQ19DQ19MQ0NXSU4zMikKKyMgIHVuZGVmIEhBVkVfRElSRU5UX0gKKyMgIHVuZGVmIEhBVkVfRE9TX0gKKyMgIHVuZGVmIEhBVkVfVU5JU1REX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorI2VsaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgIHVuZGVmIEhBVkVfVVRJTUVfSAorIyAgZGVmaW5lIEhBVkVfU1lTX1VUSU1FX0ggMQorI2VsaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfTElCQ19NU0wpCisjICBkZWZpbmUgSEFWRV9BTExPQ0FfSCAxCisjICB1bmRlZiBIQVZFX0RPU19ICisjICB1bmRlZiBIQVZFX1NIQVJFX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorI2VsaWYgKEFDQ19DQ19ORFBDKQorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgdW5kZWYgSEFWRV9ET1NfSAorIyAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgdW5kZWYgSEFWRV9VVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyNlbGlmIChBQ0NfQ0NfUEFDSUZJQ0MpCisjICB1bmRlZiBIQVZFX0RJUkVDVF9ICisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX0ZDTlRMX0gKKyMgIHVuZGVmIEhBVkVfSU9fSAorIyAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgdW5kZWYgSEFWRV9NRU1PUllfSAorIyAgdW5kZWYgSEFWRV9TSEFSRV9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICB1bmRlZiBIQVZFX1VUSU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1NUQVRfSAorIyAgdW5kZWYgSEFWRV9TWVNfVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19UWVBFU19ICisjZWxpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19QRUxMRVNDKQorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgdW5kZWYgSEFWRV9ET1NfSAorIyAgdW5kZWYgSEFWRV9NQUxMT0NfSAorIyAgdW5kZWYgSEFWRV9TSEFSRV9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICB1bmRlZiBIQVZFX1VUSU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorIyAgaWYgKF9fUE9DQ19fIDwgMjgwKQorIyAgZWxzZQorIyAgICBkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAxCisjICBlbmRpZgorI2VsaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfQ0NfUEdJKSAmJiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyAgdW5kZWYgSEFWRV9VVElNRV9ICisjICBkZWZpbmUgSEFWRV9TWVNfVVRJTUVfSCAxCisjZWxpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fUFczMl9fKQorI2VsaWYgKEFDQ19DQ19TWU1BTlRFQ0MpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICBpZiAoX19TQ19fIDwgMHg3MDApCisjICAgIHVuZGVmIEhBVkVfVVRJTUVfSAorIyAgICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGVuZGlmCisjZWxpZiAoQUNDX0NDX1RPUFNQRUVEQykKKyMgIHVuZGVmIEhBVkVfRElSRU5UX0gKKyMgIHVuZGVmIEhBVkVfVU5JU1REX0gKKyMgIHVuZGVmIEhBVkVfVVRJTUVfSAorIyAgdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisjICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNlbGlmIChBQ0NfQ0NfVFVSQk9DKQorIyAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgdW5kZWYgSEFWRV9TWVNfVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19UWVBFU19ICisjICBpZiAoQUNDX09TX1dJTjMyIHx8IEFDQ19PU19XSU42NCkKKyMgICAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgZW5kaWYKKyMgIGlmIChfX1RVUkJPQ19fIDwgMHgwMjAwKQorIyAgICB1bmRlZiBIQVZFX1NJR05BTF9ICisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDA0MDApCisjICAgIHVuZGVmIEhBVkVfRElSRUNUX0gKKyMgICAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgICB1bmRlZiBIQVZFX01BTExPQ19ICisjICAgIHVuZGVmIEhBVkVfTUVNT1JZX0gKKyMgICAgdW5kZWYgSEFWRV9VVElNRV9ICisjICBlbmRpZgorI2VsaWYgKEFDQ19DQ19XQVRDT01DKQorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorIyAgdW5kZWYgSEFWRV9VVElNRV9ICisjICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGRlZmluZSBIQVZFX1NZU19VVElNRV9IIDEKKyMgIGlmIChfX1dBVENPTUNfXyA8IDk1MCkKKyMgICAgdW5kZWYgSEFWRV9VTklTVERfSAorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQ0NfWk9SVEVDSEMpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX01FTU9SWV9ICisjICB1bmRlZiBIQVZFX1VOSVNURF9ICisjICB1bmRlZiBIQVZFX1VUSU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RJTUVfSAorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09TX0NPTlNPTEUpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjZW5kaWYKKyNpZiAoQUNDX09TX0VNQkVEREVEKQorIyAgdW5kZWYgSEFWRV9ESVJFTlRfSAorI2VuZGlmCisjaWYgKEFDQ19MSUJDX0lTT0M5MCB8fCBBQ0NfTElCQ19JU09DOTkpCisjICB1bmRlZiBIQVZFX0RJUkVOVF9ICisjICB1bmRlZiBIQVZFX0ZDTlRMX0gKKyMgIHVuZGVmIEhBVkVfTUFMTE9DX0gKKyMgIHVuZGVmIEhBVkVfVU5JU1REX0gKKyMgIHVuZGVmIEhBVkVfVVRJTUVfSAorIyAgdW5kZWYgSEFWRV9TWVNfU1RBVF9ICisjICB1bmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIHVuZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNlbmRpZgorI2lmIChBQ0NfTElCQ19HTElCQyA+PSAweDAyMDEwMHVsKQorIyAgZGVmaW5lIEhBVkVfU1RESU5UX0ggMQorI2VsaWYgKEFDQ19MSUJDX0RJRVRMSUJDKQorIyAgdW5kZWYgSEFWRV9TVERJTlRfSAorI2VsaWYgKEFDQ19MSUJDX1VDTElCQykKKyMgIGRlZmluZSBIQVZFX1NURElOVF9IIDEKKyNlbGlmIChBQ0NfQ0NfQk9STEFOREMpICYmIChfX0JPUkxBTkRDX18gPj0gMHg1NjApCisjICB1bmRlZiBIQVZFX1NURElOVF9ICisjZWxpZiAoQUNDX0NDX0RNQykgJiYgKF9fRE1DX18gPj0gMHg4MjUpCisjICBkZWZpbmUgSEFWRV9TVERJTlRfSCAxCisjZW5kaWYKKyNpZiAoSEFWRV9TWVNfVElNRV9IICYmIEhBVkVfVElNRV9IKQorIyAgZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0NGR19BVVRPX05PX0ZVTkNUSU9OUykKKyNpZiBkZWZpbmVkKEFDQ19MSUJDX05BS0VEKQorI2VsaWYgZGVmaW5lZChBQ0NfTElCQ19GUkVFU1RBTkRJTkcpCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX01PU1RMWV9GUkVFU1RBTkRJTkcpCisjICBkZWZpbmUgSEFWRV9MT05HSk1QIDEKKyMgIGRlZmluZSBIQVZFX01FTUNNUCAxCisjICBkZWZpbmUgSEFWRV9NRU1DUFkgMQorIyAgZGVmaW5lIEhBVkVfTUVNTU9WRSAxCisjICBkZWZpbmUgSEFWRV9NRU1TRVQgMQorIyAgZGVmaW5lIEhBVkVfU0VUSk1QIDEKKyNlbHNlCisjZGVmaW5lIEhBVkVfQUNDRVNTIDEKKyNkZWZpbmUgSEFWRV9BTExPQ0EgMQorI2RlZmluZSBIQVZFX0FURVhJVCAxCisjZGVmaW5lIEhBVkVfQVRPSSAxCisjZGVmaW5lIEhBVkVfQVRPTCAxCisjZGVmaW5lIEhBVkVfQ0hNT0QgMQorI2RlZmluZSBIQVZFX0NIT1dOIDEKKyNkZWZpbmUgSEFWRV9DVElNRSAxCisjZGVmaW5lIEhBVkVfRElGRlRJTUUgMQorI2RlZmluZSBIQVZFX0ZJTEVOTyAxCisjZGVmaW5lIEhBVkVfRlNUQVQgMQorI2RlZmluZSBIQVZFX0dFVEVOViAxCisjZGVmaW5lIEhBVkVfR0VUVElNRU9GREFZIDEKKyNkZWZpbmUgSEFWRV9HTVRJTUUgMQorI2RlZmluZSBIQVZFX0lTQVRUWSAxCisjZGVmaW5lIEhBVkVfTE9DQUxUSU1FIDEKKyNkZWZpbmUgSEFWRV9MT05HSk1QIDEKKyNkZWZpbmUgSEFWRV9MU1RBVCAxCisjZGVmaW5lIEhBVkVfTUVNQ01QIDEKKyNkZWZpbmUgSEFWRV9NRU1DUFkgMQorI2RlZmluZSBIQVZFX01FTU1PVkUgMQorI2RlZmluZSBIQVZFX01FTVNFVCAxCisjZGVmaW5lIEhBVkVfTUtESVIgMQorI2RlZmluZSBIQVZFX01LVElNRSAxCisjZGVmaW5lIEhBVkVfUVNPUlQgMQorI2RlZmluZSBIQVZFX1JBSVNFIDEKKyNkZWZpbmUgSEFWRV9STURJUiAxCisjZGVmaW5lIEhBVkVfU0VUSk1QIDEKKyNkZWZpbmUgSEFWRV9TSUdOQUwgMQorI2RlZmluZSBIQVZFX1NOUFJJTlRGIDEKKyNkZWZpbmUgSEFWRV9TVEFUIDEKKyNkZWZpbmUgSEFWRV9TVFJDSFIgMQorI2RlZmluZSBIQVZFX1NUUkRVUCAxCisjZGVmaW5lIEhBVkVfU1RSRVJST1IgMQorI2RlZmluZSBIQVZFX1NUUkZUSU1FIDEKKyNkZWZpbmUgSEFWRV9TVFJSQ0hSIDEKKyNkZWZpbmUgSEFWRV9TVFJTVFIgMQorI2RlZmluZSBIQVZFX1RJTUUgMQorI2RlZmluZSBIQVZFX1VNQVNLIDEKKyNkZWZpbmUgSEFWRV9VVElNRSAxCisjZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKKyNpZiAoQUNDX09TX0JFT1MgfHwgQUNDX09TX0NZR1dJTiB8fCBBQ0NfT1NfUE9TSVggfHwgQUNDX09TX1FOWCB8fCBBQ0NfT1NfVk1TKQorIyAgZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisjICBkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxCisjZWxpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fUFczMl9fKQorIyAgZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCisjICBkZWZpbmUgSEFWRV9TVFJOQ0FTRUNNUCAxCisjZWxzZQorIyAgZGVmaW5lIEhBVkVfU1RSSUNNUCAxCisjICBkZWZpbmUgSEFWRV9TVFJOSUNNUCAxCisjZW5kaWYKKyNpZiAoQUNDX09TX1BPU0lYKQorIyAgaWYgKEFDQ19PU19QT1NJWF9BSVgpCisjICAgIGRlZmluZSBIQVZFX0dFVFJVU0FHRSAxCisjICBlbGlmIChBQ0NfT1NfUE9TSVhfTUFDT1NYICYmIEFDQ19MSUJDX01TTCkKKyMgICAgdW5kZWYgSEFWRV9DSE9XTgorIyAgICB1bmRlZiBIQVZFX0xTVEFUCisjICBlbGlmIChBQ0NfT1NfUE9TSVhfVU5JQ09TKQorIyAgICB1bmRlZiBIQVZFX0FMTE9DQQorIyAgICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICAgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorIyAgaWYgKEFDQ19DQ19USU5ZQykKKyMgICAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIGVuZGlmCisjICBpZiAoQUNDX0xJQkNfRElFVExJQkMgfHwgQUNDX0xJQkNfR0xJQkMgfHwgQUNDX0xJQkNfVUNMSUJDKQorIyAgICBkZWZpbmUgSEFWRV9HRVRSVVNBR0UgMQorIyAgICBkZWZpbmUgSEFWRV9HRVRQQUdFU0laRSAxCisjICAgIGRlZmluZSBIQVZFX01NQVAgMQorIyAgICBkZWZpbmUgSEFWRV9NUFJPVEVDVCAxCisjICAgIGRlZmluZSBIQVZFX01VTk1BUCAxCisjICBlbmRpZgorI2VsaWYgKEFDQ19PU19DWUdXSU4pCisjICBpZiAoQUNDX0NDX0dOVUMgPCAweDAyNWEwMHVsKQorIyAgICB1bmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorIyAgICB1bmRlZiBIQVZFX0xTVEFUCisjICBlbmRpZgorIyAgaWYgKEFDQ19DQ19HTlVDIDwgMHgwMjVmMDB1bCkKKyMgICAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgICB1bmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbGlmIChBQ0NfT1NfRU1YKQorIyAgdW5kZWYgSEFWRV9DSE9XTgorIyAgdW5kZWYgSEFWRV9MU1RBVAorI2VsaWYgKEFDQ19BUkNIX002OEsgJiYgQUNDX09TX1RPUyAmJiBBQ0NfQ0NfR05VQykKKyMgIGlmICFkZWZpbmVkKF9fTUlOVF9fKQorIyAgICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICAgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBlbmRpZgorI2VsaWYgKEFDQ19BUkNIX002OEsgJiYgQUNDX09TX1RPUyAmJiAoQUNDX0NDX1BVUkVDIHx8IEFDQ19DQ19UVVJCT0MpKQorIyAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIHVuZGVmIEhBVkVfQUNDRVNTCisjICB1bmRlZiBIQVZFX0NITU9ECisjICB1bmRlZiBIQVZFX0NIT1dOCisjICB1bmRlZiBIQVZFX0ZTVEFUCisjICB1bmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorIyAgdW5kZWYgSEFWRV9MU1RBVAorIyAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgdW5kZWYgSEFWRV9VTUFTSworIyAgdW5kZWYgSEFWRV9VVElNRQorIyAgdW5kZWYgSEFWRV9WU05QUklOVEYKKyNlbmRpZgorI2lmIChBQ0NfT1NfRE9TMTYgfHwgQUNDX09TX0RPUzMyIHx8IEFDQ19PU19PUzIgfHwgQUNDX09TX09TMjE2IHx8IEFDQ19PU19XSU4xNiB8fCBBQ0NfT1NfV0lOMzIgfHwgQUNDX09TX1dJTjY0KQorI3VuZGVmIEhBVkVfQ0hPV04KKyN1bmRlZiBIQVZFX0dFVFRJTUVPRkRBWQorI3VuZGVmIEhBVkVfTFNUQVQKKyN1bmRlZiBIQVZFX1VNQVNLCisjaWYgKEFDQ19DQ19BWlRFQ0MpCisjICB1bmRlZiBIQVZFX0FMTE9DQQorIyAgdW5kZWYgSEFWRV9ESUZGVElNRQorIyAgdW5kZWYgSEFWRV9GU1RBVAorIyAgdW5kZWYgSEFWRV9TVFJEVVAKKyMgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgIHVuZGVmIEhBVkVfVVRJTUUKKyMgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjZWxpZiAoQUNDX0NDX0JPUkxBTkRDKQorIyAgaWYgKF9fQk9STEFORENfXyA8IDB4MDQwMCkKKyMgICAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgICAgdW5kZWYgSEFWRV9VVElNRQorIyAgZW5kaWYKKyMgIGlmICgoX19CT1JMQU5EQ19fIDwgMHgwNDEwKSAmJiBBQ0NfT1NfV0lOMTYpCisjICAgIHVuZGVmIEhBVkVfQUxMT0NBCisjICBlbmRpZgorIyAgaWYgKF9fQk9STEFORENfXyA8IDB4MDU1MCkKKyMgICAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgICB1bmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQ0NfRE1DKQorIyAgaWYgKEFDQ19PU19XSU4xNikKKyMgICAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIGVuZGlmCisjICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19ESkdQUF9fKQorIyAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgdW5kZWYgSEFWRV9WU05QUklOVEYKKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0hJR0hDKQorIyAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgdW5kZWYgSEFWRV9WU05QUklOVEYKKyNlbGlmIChBQ0NfQ0NfSUJNQykKKyMgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjZWxpZiAoQUNDX0NDX0lOVEVMQykKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorI2VsaWYgKEFDQ19DQ19MQ0NXSU4zMikKKyMgIGRlZmluZSB1dGltZSBfdXRpbWUKKyNlbGlmIChBQ0NfQ0NfTVNDKQorIyAgaWYgKF9NU0NfVkVSIDwgNjAwKQorIyAgICB1bmRlZiBIQVZFX1NUUkZUSU1FCisjICBlbmRpZgorIyAgaWYgKF9NU0NfVkVSIDwgNzAwKQorIyAgICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICAgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBlbGlmIChfTVNDX1ZFUiA8IDE1MDApCisjICAgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyMgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICBlbmRpZgorIyAgaWYgKChfTVNDX1ZFUiA8IDgwMCkgJiYgQUNDX09TX1dJTjE2KQorIyAgICB1bmRlZiBIQVZFX0FMTE9DQQorIyAgZW5kaWYKKyMgIGlmIChBQ0NfQVJDSF9JMDg2KSAmJiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorIyAgICB1bmRlZiBIQVZFX0xPTkdKTVAKKyMgICAgdW5kZWYgSEFWRV9TRVRKTVAKKyMgIGVuZGlmCisjZWxpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fTUlOR1czMl9fKQorIyAgaWYgKEFDQ19DQ19HTlVDIDwgMHgwMjVmMDB1bCkKKyMgICAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgICB1bmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgZWxzZQorIyAgICBkZWZpbmUgc25wcmludGYgX3NucHJpbnRmCisjICAgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorIyAgZW5kaWYKKyNlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0xJQkNfTVNMKQorIyAgaWYgKF9fTVNMX18gPCAweDgwMDB1bCkKKyMgICAgdW5kZWYgSEFWRV9DSE1PRAorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQ0NfTkRQQykKKyMgIHVuZGVmIEhBVkVfQUxMT0NBCisjICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICB1bmRlZiBIQVZFX1NUUk5JQ01QCisjICB1bmRlZiBIQVZFX1VUSU1FCisjICB1bmRlZiBIQVZFX1ZTTlBSSU5URgorIyAgaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyMgICAgdW5kZWYgSEFWRV9TVEFUCisjICBlbmRpZgorI2VsaWYgKEFDQ19DQ19QQUNJRklDQykKKyMgIHVuZGVmIEhBVkVfQUNDRVNTCisjICB1bmRlZiBIQVZFX0FMTE9DQQorIyAgdW5kZWYgSEFWRV9DSE1PRAorIyAgdW5kZWYgSEFWRV9ESUZGVElNRQorIyAgdW5kZWYgSEFWRV9GU1RBVAorIyAgdW5kZWYgSEFWRV9NS1RJTUUKKyMgIHVuZGVmIEhBVkVfUkFJU0UKKyMgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgIHVuZGVmIEhBVkVfU1RSRlRJTUUKKyMgIHVuZGVmIEhBVkVfVVRJTUUKKyMgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjZWxpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19QRUxMRVNDKQorIyAgaWYgKF9fUE9DQ19fIDwgMjgwKQorIyAgICBkZWZpbmUgYWxsb2NhIF9hbGxvY2EKKyMgICAgdW5kZWYgSEFWRV9VVElNRQorIyAgZW5kaWYKKyNlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX1BHSSkgJiYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyMgIGRlZmluZSB2c25wcmludGYgX3ZzbnByaW50ZgorI2VsaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX1BXMzJfXykKKyMgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjZWxpZiAoQUNDX0NDX1NZTUFOVEVDQykKKyMgIGlmIChBQ0NfT1NfV0lOMTYgJiYgKEFDQ19NTV9NRURJVU0gfHwgQUNDX01NX0xBUkdFIHx8IEFDQ19NTV9IVUdFKSkKKyMgICAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIGVuZGlmCisjICBpZiAoX19TQ19fIDwgMHg2MDApCisjICAgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgICAgdW5kZWYgSEFWRV9WU05QUklOVEYKKyMgIGVsc2UKKyMgICAgZGVmaW5lIHNucHJpbnRmIF9zbnByaW50ZgorIyAgICBkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKKyMgIGVuZGlmCisjICBpZiAoX19TQ19fIDwgMHg3MDApCisjICAgIHVuZGVmIEhBVkVfRElGRlRJTUUKKyMgICAgdW5kZWYgSEFWRV9VVElNRQorIyAgZW5kaWYKKyNlbGlmIChBQ0NfQ0NfVE9QU1BFRURDKQorIyAgdW5kZWYgSEFWRV9TTlBSSU5URgorIyAgdW5kZWYgSEFWRV9WU05QUklOVEYKKyNlbGlmIChBQ0NfQ0NfVFVSQk9DKQorIyAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIHVuZGVmIEhBVkVfU05QUklOVEYKKyMgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBpZiAoX19UVVJCT0NfXyA8IDB4MDIwMCkKKyMgICAgdW5kZWYgSEFWRV9SQUlTRQorIyAgICB1bmRlZiBIQVZFX1NJR05BTAorIyAgZW5kaWYKKyMgIGlmIChfX1RVUkJPQ19fIDwgMHgwMjk1KQorIyAgICB1bmRlZiBIQVZFX01LVElNRQorIyAgICB1bmRlZiBIQVZFX1NUUkZUSU1FCisjICBlbmRpZgorIyAgaWYgKF9fVFVSQk9DX18gPCAweDA0MDApCisjICAgIHVuZGVmIEhBVkVfVVRJTUUKKyMgIGVuZGlmCisjZWxpZiAoQUNDX0NDX1dBVENPTUMpCisjICBpZiAoX19XQVRDT01DX18gPCAxMTAwKQorIyAgICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICAgIHVuZGVmIEhBVkVfVlNOUFJJTlRGCisjICBlbGlmIChfX1dBVENPTUNfXyA8IDEyMDApCisjICAgIGRlZmluZSBzbnByaW50ZiBfc25wcmludGYKKyMgICAgZGVmaW5lIHZzbnByaW50ZiBfdnNucHJpbnRmCisjICBlbmRpZgorI2VsaWYgKEFDQ19DQ19aT1JURUNIQykKKyMgIGlmIChBQ0NfT1NfV0lOMTYgJiYgKEFDQ19NTV9NRURJVU0gfHwgQUNDX01NX0xBUkdFIHx8IEFDQ19NTV9IVUdFKSkKKyMgICAgdW5kZWYgSEFWRV9BTExPQ0EKKyMgIGVuZGlmCisjICB1bmRlZiBIQVZFX0RJRkZUSU1FCisjICB1bmRlZiBIQVZFX1NOUFJJTlRGCisjICB1bmRlZiBIQVZFX1VUSU1FCisjICB1bmRlZiBIQVZFX1ZTTlBSSU5URgorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09TX0NPTlNPTEUpCisjICB1bmRlZiBIQVZFX0FDQ0VTUworIyAgdW5kZWYgSEFWRV9DSE1PRAorIyAgdW5kZWYgSEFWRV9DSE9XTgorIyAgdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyMgIHVuZGVmIEhBVkVfTFNUQVQKKyMgIHVuZGVmIEhBVkVfVElNRQorIyAgdW5kZWYgSEFWRV9VTUFTSworIyAgdW5kZWYgSEFWRV9VVElNRQorI2VuZGlmCisjaWYgKEFDQ19MSUJDX0lTT0M5MCB8fCBBQ0NfTElCQ19JU09DOTkpCisjICB1bmRlZiBIQVZFX0FDQ0VTUworIyAgdW5kZWYgSEFWRV9DSE1PRAorIyAgdW5kZWYgSEFWRV9DSE9XTgorIyAgdW5kZWYgSEFWRV9GU1RBVAorIyAgdW5kZWYgSEFWRV9HRVRUSU1FT0ZEQVkKKyMgIHVuZGVmIEhBVkVfTFNUQVQKKyMgIHVuZGVmIEhBVkVfU1RBVAorIyAgdW5kZWYgSEFWRV9VTUFTSworIyAgdW5kZWYgSEFWRV9VVElNRQorIyBpZiAxCisjICB1bmRlZiBIQVZFX0FMTE9DQQorIyAgdW5kZWYgSEFWRV9JU0FUVFkKKyMgIHVuZGVmIEhBVkVfTUtESVIKKyMgIHVuZGVmIEhBVkVfUk1ESVIKKyMgIHVuZGVmIEhBVkVfU1RSRFVQCisjICB1bmRlZiBIQVZFX1NUUklDTVAKKyMgIHVuZGVmIEhBVkVfU1RSTklDTVAKKyMgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX0FVVE9fTk9fU0laRVMpCisjaWYgIWRlZmluZWQoU0laRU9GX1NIT1JUKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfU0hPUlQpCisjICBkZWZpbmUgU0laRU9GX1NIT1JUICAgICAgICAgIEFDQ19TSVpFT0ZfU0hPUlQKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9JTlQpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9JTlQpCisjICBkZWZpbmUgU0laRU9GX0lOVCAgICAgICAgICAgIEFDQ19TSVpFT0ZfSU5UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfTE9ORykgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgU0laRU9GX0xPTkcgICAgICAgICAgIEFDQ19TSVpFT0ZfTE9ORworI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0xPTkdfTE9ORykKKyMgIGRlZmluZSBTSVpFT0ZfTE9OR19MT05HICAgICAgQUNDX1NJWkVPRl9MT05HX0xPTkcKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9fX0lOVDMyKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfX19JTlQzMikKKyMgIGRlZmluZSBTSVpFT0ZfX19JTlQzMiAgICAgICAgQUNDX1NJWkVPRl9fX0lOVDMyCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfX19JTlQ2NCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX19fSU5UNjQpCisjICBkZWZpbmUgU0laRU9GX19fSU5UNjQgICAgICAgIEFDQ19TSVpFT0ZfX19JTlQ2NAorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX1ZPSURfUCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX1ZPSURfUCkKKyMgIGRlZmluZSBTSVpFT0ZfVk9JRF9QICAgICAgICAgQUNDX1NJWkVPRl9WT0lEX1AKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9TSVpFX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9TSVpFX1QpCisjICBkZWZpbmUgU0laRU9GX1NJWkVfVCAgICAgICAgIEFDQ19TSVpFT0ZfU0laRV9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfUFRSRElGRl9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfUFRSRElGRl9UKQorIyAgZGVmaW5lIFNJWkVPRl9QVFJESUZGX1QgICAgICBBQ0NfU0laRU9GX1BUUkRJRkZfVAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU0lHTkFMKSAmJiAhZGVmaW5lZChSRVRTSUdUWVBFKQorIyAgZGVmaW5lIFJFVFNJR1RZUEUgdm9pZAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19DRkdfTk9fQUNDX1RZUEVfSCkKKyNlbHNlCisjaWYgKEFDQ19TSVpFT0ZfTE9OR19MT05HKzAgPiAwKQorX19hY2NfZ251Y19leHRlbnNpb25fXyB0eXBlZGVmIGxvbmcgbG9uZyBhY2NfbGxvbmdfdDsKK19fYWNjX2dudWNfZXh0ZW5zaW9uX18gdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgYWNjX3VsbG9uZ190OworI2VuZGlmCisjaWYgKCEoQUNDX1NJWkVPRl9TSE9SVCswID4gMCAmJiBBQ0NfU0laRU9GX0lOVCswID4gMCAmJiBBQ0NfU0laRU9GX0xPTkcrMCA+IDApKQorIyAgZXJyb3IgIm1pc3NpbmcgZGVmaW5lcyBmb3Igc2l6ZXMiCisjZW5kaWYKKyNpZiAoIShBQ0NfU0laRU9GX1BUUkRJRkZfVCswID4gMCAmJiBBQ0NfU0laRU9GX1NJWkVfVCswID4gMCAmJiBBQ0NfU0laRU9GX1ZPSURfUCswID4gMCkpCisjICBlcnJvciAibWlzc2luZyBkZWZpbmVzIGZvciBzaXplcyIKKyNlbmRpZgorI2lmICFkZWZpbmVkKGFjY19pbnQxNmVfdCkKKyNpZiAoQUNDX1NJWkVPRl9MT05HID09IDIpCisjICBkZWZpbmUgYWNjX2ludDE2ZV90ICAgICAgICAgIGxvbmcKKyMgIGRlZmluZSBhY2NfdWludDE2ZV90ICAgICAgICAgdW5zaWduZWQgbG9uZworI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID09IDIpCisjICBkZWZpbmUgYWNjX2ludDE2ZV90ICAgICAgICAgIGludAorIyAgZGVmaW5lIGFjY191aW50MTZlX3QgICAgICAgICB1bnNpZ25lZCBpbnQKKyNlbGlmIChBQ0NfU0laRU9GX1NIT1JUID09IDIpCisjICBkZWZpbmUgYWNjX2ludDE2ZV90ICAgICAgICAgIHNob3J0IGludAorIyAgZGVmaW5lIGFjY191aW50MTZlX3QgICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbnQKKyNlbGlmIDEgJiYgIWRlZmluZWQoQUNDX0NGR19UWVBFX05PX01PREVfSEkpICYmIChBQ0NfQ0NfR05VQyA+PSAweDAyNWYwMHVsIHx8IEFDQ19DQ19MTFZNKQorICAgdHlwZWRlZiBpbnQgX19hY2NfaW50MTZlX2hpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19hY2NfdWludDE2ZV9oaV90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fSElfXykpKTsKKyMgIGRlZmluZSBhY2NfaW50MTZlX3QgICAgICAgICAgX19hY2NfaW50MTZlX2hpX3QKKyMgIGRlZmluZSBhY2NfdWludDE2ZV90ICAgICAgICAgX19hY2NfdWludDE2ZV9oaV90CisjZWxpZiAoQUNDX1NJWkVPRl9fX0lOVDE2ID09IDIpCisjICBkZWZpbmUgYWNjX2ludDE2ZV90ICAgICAgICAgIF9faW50MTYKKyMgIGRlZmluZSBhY2NfdWludDE2ZV90ICAgICAgICAgdW5zaWduZWQgX19pbnQxNgorI2Vsc2UKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChhY2NfaW50MTZlX3QpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMTZFX1QgICAyCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50MzJlX3QpCisjaWYgKEFDQ19TSVpFT0ZfTE9ORyA9PSA0KQorIyAgZGVmaW5lIGFjY19pbnQzMmVfdCAgICAgICAgICBsb25nIGludAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICB1bnNpZ25lZCBsb25nIGludAorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID09IDQpCisjICBkZWZpbmUgYWNjX2ludDMyZV90ICAgICAgICAgIGludAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICB1bnNpZ25lZCBpbnQKKyNlbGlmIChBQ0NfU0laRU9GX1NIT1JUID09IDQpCisjICBkZWZpbmUgYWNjX2ludDMyZV90ICAgICAgICAgIHNob3J0IGludAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICB1bnNpZ25lZCBzaG9ydCBpbnQKKyNlbGlmIChBQ0NfU0laRU9GX0xPTkdfTE9ORyA9PSA0KQorIyAgZGVmaW5lIGFjY19pbnQzMmVfdCAgICAgICAgICBhY2NfbGxvbmdfdAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICBhY2NfdWxsb25nX3QKKyNlbGlmIDEgJiYgIWRlZmluZWQoQUNDX0NGR19UWVBFX05PX01PREVfU0kpICYmIChBQ0NfQ0NfR05VQyA+PSAweDAyNWYwMHVsIHx8IEFDQ19DQ19MTFZNKSAmJiAoX19JTlRfTUFYX18rMCA+IDIxNDc0ODM2NDdMKQorICAgdHlwZWRlZiBpbnQgX19hY2NfaW50MzJlX3NpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19hY2NfdWludDMyZV9zaV90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKKyMgIGRlZmluZSBhY2NfaW50MzJlX3QgICAgICAgICAgX19hY2NfaW50MzJlX3NpX3QKKyMgIGRlZmluZSBhY2NfdWludDMyZV90ICAgICAgICAgX19hY2NfdWludDMyZV9zaV90CisjZWxpZiAxICYmICFkZWZpbmVkKEFDQ19DRkdfVFlQRV9OT19NT0RFX1NJKSAmJiAoQUNDX0NDX0dOVUMgPj0gMHgwMjVmMDB1bCkgJiYgZGVmaW5lZChfX0FWUl9fKSAmJiAoX19MT05HX01BWF9fKzAgPT0gMzI3NjdMKQorICAgdHlwZWRlZiBpbnQgX19hY2NfaW50MzJlX3NpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOworICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19hY2NfdWludDMyZV9zaV90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fU0lfXykpKTsKKyMgIGRlZmluZSBhY2NfaW50MzJlX3QgICAgICAgICAgX19hY2NfaW50MzJlX3NpX3QKKyMgIGRlZmluZSBhY2NfdWludDMyZV90ICAgICAgICAgX19hY2NfdWludDMyZV9zaV90CisjICBkZWZpbmUgQUNDX0lOVDMyX0MoYykgICAgICAgIGMjI0xMCisjICBkZWZpbmUgQUNDX1VJTlQzMl9DKGMpICAgICAgIGMjI1VMTAorI2VsaWYgKEFDQ19TSVpFT0ZfX19JTlQzMiA9PSA0KQorIyAgZGVmaW5lIGFjY19pbnQzMmVfdCAgICAgICAgICBfX2ludDMyCisjICBkZWZpbmUgYWNjX3VpbnQzMmVfdCAgICAgICAgIHVuc2lnbmVkIF9faW50MzIKKyNlbHNlCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoYWNjX2ludDMyZV90KQorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDMyRV9UICAgNAorI2VuZGlmCisjaWYgIWRlZmluZWQoYWNjX2ludDY0ZV90KQorI2lmIChBQ0NfU0laRU9GX19fSU5UNjQgPT0gOCkKKyMgIGlmIChBQ0NfQ0NfQk9STEFOREMpICYmICFkZWZpbmVkKEFDQ19DRkdfVFlQRV9QUkVGRVJfX19JTlQ2NCkKKyMgICAgZGVmaW5lIEFDQ19DRkdfVFlQRV9QUkVGRVJfX19JTlQ2NCAxCisjICBlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19TSVpFT0ZfSU5UID09IDgpICYmIChBQ0NfU0laRU9GX0lOVCA8IEFDQ19TSVpFT0ZfTE9ORykKKyMgIGRlZmluZSBhY2NfaW50NjRlX3QgICAgICAgICAgaW50CisjICBkZWZpbmUgYWNjX3VpbnQ2NGVfdCAgICAgICAgIHVuc2lnbmVkIGludAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UICAgQUNDX1NJWkVPRl9JTlQKKyNlbGlmIChBQ0NfU0laRU9GX0xPTkcgPT0gOCkKKyMgIGRlZmluZSBhY2NfaW50NjRlX3QgICAgICAgICAgbG9uZyBpbnQKKyMgIGRlZmluZSBhY2NfdWludDY0ZV90ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQ2NEVfVCAgIEFDQ19TSVpFT0ZfTE9ORworI2VsaWYgKEFDQ19TSVpFT0ZfTE9OR19MT05HID09IDgpICYmICFkZWZpbmVkKEFDQ19DRkdfVFlQRV9QUkVGRVJfX19JTlQ2NCkKKyMgIGRlZmluZSBhY2NfaW50NjRlX3QgICAgICAgICAgYWNjX2xsb25nX3QKKyMgIGRlZmluZSBhY2NfdWludDY0ZV90ICAgICAgICAgYWNjX3VsbG9uZ190CisjICBpZiAoQUNDX0NDX0JPUkxBTkRDKQorIyAgICBkZWZpbmUgQUNDX0lOVDY0X0MoYykgICAgICAoKGMpICsgMGxsKQorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICAoKGMpICsgMHVsbCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19JTlQ2NF9DKGMpICAgICAgYyMjTEwKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgYyMjVUxMCisjICBlbmRpZgorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UICAgQUNDX1NJWkVPRl9MT05HX0xPTkcKKyNlbGlmIChBQ0NfU0laRU9GX19fSU5UNjQgPT0gOCkKKyMgIGRlZmluZSBhY2NfaW50NjRlX3QgICAgICAgICAgX19pbnQ2NAorIyAgZGVmaW5lIGFjY191aW50NjRlX3QgICAgICAgICB1bnNpZ25lZCBfX2ludDY0CisjICBpZiAoQUNDX0NDX0JPUkxBTkRDKQorIyAgICBkZWZpbmUgQUNDX0lOVDY0X0MoYykgICAgICAoKGMpICsgMGk2NCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgKChjKSArIDB1aTY0KQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0lOVDY0X0MoYykgICAgICBjIyNpNjQKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgYyMjdWk2NAorIyAgZW5kaWYKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQ2NEVfVCAgIEFDQ19TSVpFT0ZfX19JTlQ2NAorI2Vsc2UKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoYWNjX2ludDMybF90KQorI2lmIGRlZmluZWQoYWNjX2ludDMyZV90KQorIyAgZGVmaW5lIGFjY19pbnQzMmxfdCAgICAgICAgICBhY2NfaW50MzJlX3QKKyMgIGRlZmluZSBhY2NfdWludDMybF90ICAgICAgICAgYWNjX3VpbnQzMmVfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDMyTF9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UMzJFX1QKKyNlbGlmIChBQ0NfU0laRU9GX0lOVCA+PSA0KSAmJiAoQUNDX1NJWkVPRl9JTlQgPCBBQ0NfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgYWNjX2ludDMybF90ICAgICAgICAgIGludAorIyAgZGVmaW5lIGFjY191aW50MzJsX3QgICAgICAgICB1bnNpZ25lZCBpbnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQzMkxfVCAgIEFDQ19TSVpFT0ZfSU5UCisjZWxpZiAoQUNDX1NJWkVPRl9MT05HID49IDQpCisjICBkZWZpbmUgYWNjX2ludDMybF90ICAgICAgICAgIGxvbmcgaW50CisjICBkZWZpbmUgYWNjX3VpbnQzMmxfdCAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMzJMX1QgICBBQ0NfU0laRU9GX0xPTkcKKyNlbHNlCisjICBlcnJvciAiYWNjX2ludDMybF90IgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50NjRsX3QpCisjaWYgZGVmaW5lZChhY2NfaW50NjRlX3QpCisjICBkZWZpbmUgYWNjX2ludDY0bF90ICAgICAgICAgIGFjY19pbnQ2NGVfdAorIyAgZGVmaW5lIGFjY191aW50NjRsX3QgICAgICAgICBhY2NfdWludDY0ZV90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQ2NEVfVAorI2Vsc2UKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoYWNjX2ludDMyZl90KQorI2lmIChBQ0NfU0laRU9GX1NJWkVfVCA+PSA4KQorIyAgZGVmaW5lIGFjY19pbnQzMmZfdCAgICAgICAgICBhY2NfaW50NjRsX3QKKyMgIGRlZmluZSBhY2NfdWludDMyZl90ICAgICAgICAgYWNjX3VpbnQ2NGxfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDMyRl9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QKKyNlbHNlCisjICBkZWZpbmUgYWNjX2ludDMyZl90ICAgICAgICAgIGFjY19pbnQzMmxfdAorIyAgZGVmaW5lIGFjY191aW50MzJmX3QgICAgICAgICBhY2NfdWludDMybF90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMzJGX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQzMkxfVAorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50cHRyX3QpCisjaWYgMSAmJiAoQUNDX09TX09TNDAwICYmIChBQ0NfU0laRU9GX1ZPSURfUCA9PSAxNikpCisjICBkZWZpbmUgX19BQ0NfSU5UUFRSX1RfSVNfUE9JTlRFUiAxCisgICB0eXBlZGVmIGNoYXIqICAgICAgICAgICAgICAgIGFjY19pbnRwdHJfdDsKKyAgIHR5cGVkZWYgY2hhciogICAgICAgICAgICAgICAgYWNjX3VpbnRwdHJfdDsKKyMgIGRlZmluZSBhY2NfaW50cHRyX3QgICAgICAgICAgYWNjX2ludHB0cl90CisjICBkZWZpbmUgYWNjX3VpbnRwdHJfdCAgICAgICAgIGFjY191aW50cHRyX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfVk9JRF9QCisjZWxpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTMwMCkgJiYgKEFDQ19TSVpFT0ZfVk9JRF9QID09IDQpICYmIChBQ0NfU0laRU9GX0lOVCA9PSA0KSkKKyAgIHR5cGVkZWYgX193NjQgaW50ICAgICAgICAgICAgYWNjX2ludHB0cl90OworICAgdHlwZWRlZiBfX3c2NCB1bnNpZ25lZCBpbnQgICBhY2NfdWludHB0cl90OworIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBhY2NfaW50cHRyX3QKKyMgIGRlZmluZSBhY2NfdWludHB0cl90ICAgICAgICAgYWNjX3VpbnRwdHJfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UICAgQUNDX1NJWkVPRl9JTlQKKyNlbGlmIChBQ0NfU0laRU9GX1NIT1JUID09IEFDQ19TSVpFT0ZfVk9JRF9QKSAmJiAoQUNDX1NJWkVPRl9JTlQgPiBBQ0NfU0laRU9GX1ZPSURfUCkKKyMgIGRlZmluZSBhY2NfaW50cHRyX3QgICAgICAgICAgc2hvcnQKKyMgIGRlZmluZSBhY2NfdWludHB0cl90ICAgICAgICAgdW5zaWduZWQgc2hvcnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfU0hPUlQKKyNlbGlmIChBQ0NfU0laRU9GX0lOVCA+PSBBQ0NfU0laRU9GX1ZPSURfUCkgJiYgKEFDQ19TSVpFT0ZfSU5UIDwgQUNDX1NJWkVPRl9MT05HKQorIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBpbnQKKyMgIGRlZmluZSBhY2NfdWludHB0cl90ICAgICAgICAgdW5zaWduZWQgaW50CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QgICBBQ0NfU0laRU9GX0lOVAorI2VsaWYgKEFDQ19TSVpFT0ZfTE9ORyA+PSBBQ0NfU0laRU9GX1ZPSURfUCkKKyMgIGRlZmluZSBhY2NfaW50cHRyX3QgICAgICAgICAgbG9uZworIyAgZGVmaW5lIGFjY191aW50cHRyX3QgICAgICAgICB1bnNpZ25lZCBsb25nCisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QgICBBQ0NfU0laRU9GX0xPTkcKKyNlbGlmIChBQ0NfU0laRU9GX0FDQ19JTlQ2NExfVCA+PSBBQ0NfU0laRU9GX1ZPSURfUCkKKyMgIGRlZmluZSBhY2NfaW50cHRyX3QgICAgICAgICAgYWNjX2ludDY0bF90CisjICBkZWZpbmUgYWNjX3VpbnRwdHJfdCAgICAgICAgIGFjY191aW50NjRsX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UCisjZWxzZQorIyAgZXJyb3IgImFjY19pbnRwdHJfdCIKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoYWNjX3dvcmRfdCkKKyNpZiBkZWZpbmVkKEFDQ19XT1JEU0laRSkgJiYgKEFDQ19XT1JEU0laRSA+IDApCisjaWYgKEFDQ19XT1JEU0laRSA9PSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCkgJiYgIWRlZmluZWQoX19BQ0NfSU5UUFRSX1RfSVNfUE9JTlRFUikKKyMgIGRlZmluZSBhY2Nfd29yZF90ICAgICAgICAgICAgYWNjX3VpbnRwdHJfdAorIyAgZGVmaW5lIGFjY19zd29yZF90ICAgICAgICAgICBhY2NfaW50cHRyX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19XT1JEX1QgQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QKKyNlbGlmIChBQ0NfV09SRFNJWkUgPT0gQUNDX1NJWkVPRl9MT05HKQorIyAgZGVmaW5lIGFjY193b3JkX3QgICAgICAgICAgICB1bnNpZ25lZCBsb25nCisjICBkZWZpbmUgYWNjX3N3b3JkX3QgICAgICAgICAgIGxvbmcKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19XT1JEX1QgQUNDX1NJWkVPRl9MT05HCisjZWxpZiAoQUNDX1dPUkRTSVpFID09IEFDQ19TSVpFT0ZfSU5UKQorIyAgZGVmaW5lIGFjY193b3JkX3QgICAgICAgICAgICB1bnNpZ25lZCBpbnQKKyMgIGRlZmluZSBhY2Nfc3dvcmRfdCAgICAgICAgICAgaW50CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfV09SRF9UIEFDQ19TSVpFT0ZfSU5UCisjZWxpZiAoQUNDX1dPUkRTSVpFID09IEFDQ19TSVpFT0ZfU0hPUlQpCisjICBkZWZpbmUgYWNjX3dvcmRfdCAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0CisjICBkZWZpbmUgYWNjX3N3b3JkX3QgICAgICAgICAgIHNob3J0CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfV09SRF9UIEFDQ19TSVpFT0ZfU0hPUlQKKyNlbGlmIChBQ0NfV09SRFNJWkUgPT0gMSkKKyMgIGRlZmluZSBhY2Nfd29yZF90ICAgICAgICAgICAgdW5zaWduZWQgY2hhcgorIyAgZGVmaW5lIGFjY19zd29yZF90ICAgICAgICAgICBzaWduZWQgY2hhcgorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCAxCisjZWxpZiAoQUNDX1dPUkRTSVpFID09IEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UKQorIyAgZGVmaW5lIGFjY193b3JkX3QgICAgICAgICAgICBhY2NfdWludDY0bF90CisjICBkZWZpbmUgYWNjX3N3b3JkX3QgICAgICAgICAgIGFjY19pbnQ2NGxfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCBBQ0NfU0laRU9GX0FDQ19JTlQ2NExfVAorI2VsaWYgKEFDQ19BUkNIX1NQVSkgJiYgKEFDQ19DQ19HTlVDKQorI2lmIDAKKyAgIHR5cGVkZWYgdW5zaWduZWQgYWNjX3dvcmRfdCAgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19WMTZRSV9fKSkpOworICAgdHlwZWRlZiBpbnQgICAgICBhY2Nfc3dvcmRfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1YxNlFJX18pKSk7CisjICBkZWZpbmUgYWNjX3dvcmRfdCAgICAgICAgICAgIGFjY193b3JkX3QKKyMgIGRlZmluZSBhY2Nfc3dvcmRfdCAgICAgICAgICAgYWNjX3N3b3JkX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19XT1JEX1QgMTYKKyNlbmRpZgorI2Vsc2UKKyMgIGVycm9yICJhY2Nfd29yZF90IgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19JTlQxNl9DKQorIyAgaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9JTlQgPj0gMikKKyMgICAgZGVmaW5lIEFDQ19JTlQxNl9DKGMpICAgICAgKChjKSArIDApCisjICAgIGRlZmluZSBBQ0NfVUlOVDE2X0MoYykgICAgICgoYykgKyAwVSkKKyMgIGVsaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9MT05HID49IDIpCisjICAgIGRlZmluZSBBQ0NfSU5UMTZfQyhjKSAgICAgICgoYykgKyAwTCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UMTZfQyhjKSAgICAgKChjKSArIDBVTCkKKyMgIGVsaWYgKEFDQ19TSVpFT0ZfSU5UID49IDIpCisjICAgIGRlZmluZSBBQ0NfSU5UMTZfQyhjKSAgICAgIGMKKyMgICAgZGVmaW5lIEFDQ19VSU5UMTZfQyhjKSAgICAgYyMjVQorIyAgZWxpZiAoQUNDX1NJWkVPRl9MT05HID49IDIpCisjICAgIGRlZmluZSBBQ0NfSU5UMTZfQyhjKSAgICAgIGMjI0wKKyMgICAgZGVmaW5lIEFDQ19VSU5UMTZfQyhjKSAgICAgYyMjVUwKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkFDQ19JTlQxNl9DIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19JTlQzMl9DKQorIyAgaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9JTlQgPj0gNCkKKyMgICAgZGVmaW5lIEFDQ19JTlQzMl9DKGMpICAgICAgKChjKSArIDApCisjICAgIGRlZmluZSBBQ0NfVUlOVDMyX0MoYykgICAgICgoYykgKyAwVSkKKyMgIGVsaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9MT05HID49IDQpCisjICAgIGRlZmluZSBBQ0NfSU5UMzJfQyhjKSAgICAgICgoYykgKyAwTCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UMzJfQyhjKSAgICAgKChjKSArIDBVTCkKKyMgIGVsaWYgKEFDQ19TSVpFT0ZfSU5UID49IDQpCisjICAgIGRlZmluZSBBQ0NfSU5UMzJfQyhjKSAgICAgIGMKKyMgICAgZGVmaW5lIEFDQ19VSU5UMzJfQyhjKSAgICAgYyMjVQorIyAgZWxpZiAoQUNDX1NJWkVPRl9MT05HID49IDQpCisjICAgIGRlZmluZSBBQ0NfSU5UMzJfQyhjKSAgICAgIGMjI0wKKyMgICAgZGVmaW5lIEFDQ19VSU5UMzJfQyhjKSAgICAgYyMjVUwKKyMgIGVsaWYgKEFDQ19TSVpFT0ZfTE9OR19MT05HID49IDQpCisjICAgIGRlZmluZSBBQ0NfSU5UMzJfQyhjKSAgICAgIGMjI0xMCisjICAgIGRlZmluZSBBQ0NfVUlOVDMyX0MoYykgICAgIGMjI1VMTAorIyAgZWxzZQorIyAgICBlcnJvciAiQUNDX0lOVDMyX0MiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0lOVDY0X0MpICYmIGRlZmluZWQoYWNjX2ludDY0bF90KQorIyAgaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9JTlQgPj0gOCkKKyMgICAgZGVmaW5lIEFDQ19JTlQ2NF9DKGMpICAgICAgKChjKSArIDApCisjICAgIGRlZmluZSBBQ0NfVUlOVDY0X0MoYykgICAgICgoYykgKyAwVSkKKyMgIGVsaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfQ09OU1RBTlRTKSAmJiAoQUNDX1NJWkVPRl9MT05HID49IDgpCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgICgoYykgKyAwTCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgKChjKSArIDBVTCkKKyMgIGVsaWYgKEFDQ19TSVpFT0ZfSU5UID49IDgpCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgIGMKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgYyMjVQorIyAgZWxpZiAoQUNDX1NJWkVPRl9MT05HID49IDgpCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgIGMjI0wKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgYyMjVUwKKyMgIGVsc2UKKyMgICAgZXJyb3IgIkFDQ19JTlQ2NF9DIgorIyAgZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfSU5UMTZFX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9BQ0NfSU5UMTZFX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19JTlQxNkVfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDE2RV9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfQUNDX0lOVDMyRV9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfQUNDX0lOVDMyRV9UKQorIyAgZGVmaW5lIFNJWkVPRl9BQ0NfSU5UMzJFX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQzMkVfVAorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0FDQ19JTlQ2NEVfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19JTlQ2NEVfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX0lOVDY0RV9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UNjRFX1QKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfSU5UMzJMX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9BQ0NfSU5UMzJMX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19JTlQzMkxfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDMyTF9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfQUNDX0lOVDY0TF9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UKQorIyAgZGVmaW5lIFNJWkVPRl9BQ0NfSU5UNjRMX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQ2NExfVAorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0FDQ19JTlQzMkZfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19JTlQzMkZfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX0lOVDMyRl9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UMzJGX1QKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfSU5UUFRSX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfQUNDX1dPUkRfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19XT1JEX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19XT1JEX1QgICAgIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVAorI2VuZGlmCisjaWYgMSAmJiAhZGVmaW5lZChhY2Nfc2lnbm9fdCkgJiYgZGVmaW5lZChfX2xpbnV4X18pICYmIGRlZmluZWQoX19kaWV0bGliY19fKSAmJiAoQUNDX1NJWkVPRl9JTlQgIT0gNCkKKyMgIGRlZmluZSBhY2Nfc2lnbm9fdCAgICAgICAgICAgYWNjX2ludDMyZV90CisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2Nfc2lnbm9fdCkKKyMgIGRlZmluZSBhY2Nfc2lnbm9fdCAgICAgICAgICAgaW50CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorZXh0ZXJuICJDIiB7CisjZW5kaWYKKyNpZiAoQUNDX0JST0tFTl9DREVDTF9BTFRfU1lOVEFYKQordHlwZWRlZiB2b2lkIF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKCphY2Nfc2lnaGFuZGxlcl90KShhY2Nfc2lnbm9fdCk7CisjZWxpZiBkZWZpbmVkKFJFVFNJR1RZUEUpCit0eXBlZGVmIFJFVFNJR1RZUEUgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyNlbHNlCit0eXBlZGVmIHZvaWQgKF9fYWNjX2NkZWNsX3NpZ2hhbmRsZXIgKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCit9CisjZW5kaWYKKyMgIGlmIGRlZmluZWQoQUNDX0NGR19OT19BQ0NfVUFfSCkKKyMgIGVsc2UKKyNpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjA3MDB1bCkpCisjZWxpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjA4MDB1bCkpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZWxpZiAoQUNDX0NDX0lOVEVMQykgJiYgZGVmaW5lZChfV0lOMzIpCisjZWxpZiAoQUNDX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA8IDcwMCkpCisjZWxpZiAoQUNDX0NDX0xMVk0pCisjZWxpZiAoQUNDX0NDX0dOVUMgfHwgQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfUEFUSFNDQUxFKQorI2lmICFkZWZpbmVkKF9fYWNjX3VhMTZfdCkgJiYgKEFDQ19PUFRfVU5BTElHTkVEMTYpICYmIGRlZmluZWQoYWNjX2ludDE2ZV90KQorICAgdHlwZWRlZiBzdHJ1Y3QgeyBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90IHYgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOyB9IF9fYWNjX3VhMTZfdDsKKyMgIGRlZmluZSBfX2FjY191YTE2X3QgX19hY2NfdWExNl90CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY191YTMyX3QpICYmIChBQ0NfT1BUX1VOQUxJR05FRDMyKSAmJiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyAgIHR5cGVkZWYgc3RydWN0IHsgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCB2IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsgfSBfX2FjY191YTMyX3Q7CisjICBkZWZpbmUgX19hY2NfdWEzMl90IF9fYWNjX3VhMzJfdAorI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfdWE2NF90KSAmJiAoQUNDX09QVF9VTkFMSUdORUQ2NCkgJiYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICB0eXBlZGVmIHN0cnVjdCB7IF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50NjRsX3QgdiBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7IH0gX19hY2NfdWE2NF90OworIyAgZGVmaW5lIF9fYWNjX3VhNjRfdCBfX2FjY191YTY0X3QKKyNlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19PUFRfVU5BTElHTkVEMTYpICYmIGRlZmluZWQoYWNjX2ludDE2ZV90KQorI2RlZmluZSBBQ0NfVUFfR0VUMTYocCkgICAgICAgICAoKiAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIChfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKikgKHApKQorI2RlZmluZSBBQ0NfVUFfU0VUMTYocCx2KSAgICAgICAoKiAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCopIChfX2FjY191YV92b2xhdGlsZSB2b2lkKikgKHApID0gKGFjY191aW50MTZlX3QpICh2KSkKKyNpZiAoQUNDX0FCSV9CSUdfRU5ESUFOKQorIyAgZGVmaW5lIEFDQ19VQV9HRVRfQkUxNihwKSAgICBBQ0NfVUFfR0VUMTYocCkKKyMgIGRlZmluZSBBQ0NfVUFfU0VUX0JFMTYocCx2KSAgQUNDX1VBX1NFVDE2KHAsdikKKyNlbGlmIChBQ0NfQUJJX0xJVFRMRV9FTkRJQU4pCisjICBkZWZpbmUgQUNDX1VBX0dFVF9MRTE2KHApICAgIEFDQ19VQV9HRVQxNihwKQorIyAgZGVmaW5lIEFDQ19VQV9TRVRfTEUxNihwLHYpICBBQ0NfVUFfU0VUMTYocCx2KQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiBkZWZpbmVkKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqKSBwcDsKKyAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CisgICAgcmV0dXJuIHY7Cit9CisjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKK2V4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7Cit9CisjZGVmaW5lIEFDQ19VQV9TRVRfTEUxNihwLHYpICAgIF9fQUNDX1VBX1NFVF9MRTE2KHAsdikKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfVUFfQ09QWTE2KQorIyAgZGVmaW5lIEFDQ19VQV9DT1BZMTYoZCxzKSAgICBBQ0NfVUFfU0VUMTYoZCwgQUNDX1VBX0dFVDE2KHMpKQorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09QVF9VTkFMSUdORUQzMikgJiYgZGVmaW5lZChhY2NfaW50MzJlX3QpCisjZGVmaW5lIEFDQ19VQV9HRVQzMihwKSAgICAgICAgICgqIChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqKSAocCkpCisjZGVmaW5lIEFDQ19VQV9TRVQzMihwLHYpICAgICAgICgqIChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqKSAocCkgPSAoYWNjX3VpbnQzMmVfdCkgKHYpKQorI2lmIChBQ0NfQUJJX0JJR19FTkRJQU4pCisjICBkZWZpbmUgQUNDX1VBX0dFVF9CRTMyKHApICAgIEFDQ19VQV9HRVQzMihwKQorIyAgZGVmaW5lIEFDQ19VQV9TRVRfQkUzMihwLHYpICBBQ0NfVUFfU0VUMzIocCx2KQorI2VsaWYgKEFDQ19BQklfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgQUNDX1VBX0dFVDMyKHApCisjICBkZWZpbmUgQUNDX1VBX1NFVF9MRTMyKHAsdikgIEFDQ19VQV9TRVQzMihwLHYpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIGRlZmluZWQoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKKyAgICByZXR1cm4gdjsKK30KKyNkZWZpbmUgQUNDX1VBX0dFVF9MRTMyKHApICAgICAgX19BQ0NfVUFfR0VUX0xFMzIocCkKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKK2V4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCopIHBwOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKK30KKyNkZWZpbmUgQUNDX1VBX1NFVF9MRTMyKHAsdikgICAgX19BQ0NfVUFfU0VUX0xFMzIocCx2KQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9DT1BZMzIpCisjICBkZWZpbmUgQUNDX1VBX0NPUFkzMihkLHMpICAgIEFDQ19VQV9TRVQzMihkLCBBQ0NfVUFfR0VUMzIocykpCisjZW5kaWYKKyNlbmRpZgorI2lmIChBQ0NfT1BUX1VOQUxJR05FRDY0KSAmJiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyNkZWZpbmUgQUNDX1VBX0dFVDY0KHApICAgICAgICAgKCogKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50NjRsX3QqKSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCopIChwKSkKKyNkZWZpbmUgQUNDX1VBX1NFVDY0KHAsdikgICAgICAgKCogKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50NjRsX3QqKSAoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCopIChwKSA9IChhY2NfdWludDY0bF90KSAodikpCisjaWYgKEFDQ19BQklfQklHX0VORElBTikKKyMgIGRlZmluZSBBQ0NfVUFfR0VUX0JFNjQocCkgICAgQUNDX1VBX0dFVDY0KHApCisjICBkZWZpbmUgQUNDX1VBX1NFVF9CRTY0KHAsdikgIEFDQ19VQV9TRVQ2NChwLHYpCisjZWxpZiAoQUNDX0FCSV9MSVRUTEVfRU5ESUFOKQorIyAgZGVmaW5lIEFDQ19VQV9HRVRfTEU2NChwKSAgICBBQ0NfVUFfR0VUNjQocCkKKyMgIGRlZmluZSBBQ0NfVUFfU0VUX0xFNjQocCx2KSAgQUNDX1VBX1NFVDY0KHAsdikKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9DT1BZNjQpCisjICBkZWZpbmUgQUNDX1VBX0NPUFk2NChkLHMpICAgIEFDQ19VQV9TRVQ2NChkLCBBQ0NfVUFfR0VUNjQocykpCisjZW5kaWYKKyNlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NfVFlQRV9IKQorIyAgdW5kZWYgQUNDX1dBTlRfQUNDX1RZUEVfSAorIyAgaWYgZGVmaW5lZChBQ0NfQ0ZHX05PX0FDQ19UWVBFX0gpCisjICAgIGVycm9yICJBQ0NfV0FOVF9BQ0NfVFlQRV9IIHdpdGggQUNDX0NGR19OT19BQ0NfVFlQRV9IIgorIyAgZW5kaWYKKyNpZiAoQUNDX1NJWkVPRl9MT05HX0xPTkcrMCA+IDApCitfX2FjY19nbnVjX2V4dGVuc2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGFjY19sbG9uZ190OworX19hY2NfZ251Y19leHRlbnNpb25fXyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBhY2NfdWxsb25nX3Q7CisjZW5kaWYKKyNpZiAoIShBQ0NfU0laRU9GX1NIT1JUKzAgPiAwICYmIEFDQ19TSVpFT0ZfSU5UKzAgPiAwICYmIEFDQ19TSVpFT0ZfTE9ORyswID4gMCkpCisjICBlcnJvciAibWlzc2luZyBkZWZpbmVzIGZvciBzaXplcyIKKyNlbmRpZgorI2lmICghKEFDQ19TSVpFT0ZfUFRSRElGRl9UKzAgPiAwICYmIEFDQ19TSVpFT0ZfU0laRV9UKzAgPiAwICYmIEFDQ19TSVpFT0ZfVk9JRF9QKzAgPiAwKSkKKyMgIGVycm9yICJtaXNzaW5nIGRlZmluZXMgZm9yIHNpemVzIgorI2VuZGlmCisjaWYgIWRlZmluZWQoYWNjX2ludDE2ZV90KQorI2lmIChBQ0NfU0laRU9GX0xPTkcgPT0gMikKKyMgIGRlZmluZSBhY2NfaW50MTZlX3QgICAgICAgICAgbG9uZworIyAgZGVmaW5lIGFjY191aW50MTZlX3QgICAgICAgICB1bnNpZ25lZCBsb25nCisjZWxpZiAoQUNDX1NJWkVPRl9JTlQgPT0gMikKKyMgIGRlZmluZSBhY2NfaW50MTZlX3QgICAgICAgICAgaW50CisjICBkZWZpbmUgYWNjX3VpbnQxNmVfdCAgICAgICAgIHVuc2lnbmVkIGludAorI2VsaWYgKEFDQ19TSVpFT0ZfU0hPUlQgPT0gMikKKyMgIGRlZmluZSBhY2NfaW50MTZlX3QgICAgICAgICAgc2hvcnQgaW50CisjICBkZWZpbmUgYWNjX3VpbnQxNmVfdCAgICAgICAgIHVuc2lnbmVkIHNob3J0IGludAorI2VsaWYgMSAmJiAhZGVmaW5lZChBQ0NfQ0ZHX1RZUEVfTk9fTU9ERV9ISSkgJiYgKEFDQ19DQ19HTlVDID49IDB4MDI1ZjAwdWwgfHwgQUNDX0NDX0xMVk0pCisgICB0eXBlZGVmIGludCBfX2FjY19pbnQxNmVfaGlfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX0hJX18pKSk7CisgICB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2FjY191aW50MTZlX2hpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19ISV9fKSkpOworIyAgZGVmaW5lIGFjY19pbnQxNmVfdCAgICAgICAgICBfX2FjY19pbnQxNmVfaGlfdAorIyAgZGVmaW5lIGFjY191aW50MTZlX3QgICAgICAgICBfX2FjY191aW50MTZlX2hpX3QKKyNlbGlmIChBQ0NfU0laRU9GX19fSU5UMTYgPT0gMikKKyMgIGRlZmluZSBhY2NfaW50MTZlX3QgICAgICAgICAgX19pbnQxNgorIyAgZGVmaW5lIGFjY191aW50MTZlX3QgICAgICAgICB1bnNpZ25lZCBfX2ludDE2CisjZWxzZQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKGFjY19pbnQxNmVfdCkKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQxNkVfVCAgIDIKKyNlbmRpZgorI2lmICFkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyNpZiAoQUNDX1NJWkVPRl9MT05HID09IDQpCisjICBkZWZpbmUgYWNjX2ludDMyZV90ICAgICAgICAgIGxvbmcgaW50CisjICBkZWZpbmUgYWNjX3VpbnQzMmVfdCAgICAgICAgIHVuc2lnbmVkIGxvbmcgaW50CisjZWxpZiAoQUNDX1NJWkVPRl9JTlQgPT0gNCkKKyMgIGRlZmluZSBhY2NfaW50MzJlX3QgICAgICAgICAgaW50CisjICBkZWZpbmUgYWNjX3VpbnQzMmVfdCAgICAgICAgIHVuc2lnbmVkIGludAorI2VsaWYgKEFDQ19TSVpFT0ZfU0hPUlQgPT0gNCkKKyMgIGRlZmluZSBhY2NfaW50MzJlX3QgICAgICAgICAgc2hvcnQgaW50CisjICBkZWZpbmUgYWNjX3VpbnQzMmVfdCAgICAgICAgIHVuc2lnbmVkIHNob3J0IGludAorI2VsaWYgKEFDQ19TSVpFT0ZfTE9OR19MT05HID09IDQpCisjICBkZWZpbmUgYWNjX2ludDMyZV90ICAgICAgICAgIGFjY19sbG9uZ190CisjICBkZWZpbmUgYWNjX3VpbnQzMmVfdCAgICAgICAgIGFjY191bGxvbmdfdAorI2VsaWYgMSAmJiAhZGVmaW5lZChBQ0NfQ0ZHX1RZUEVfTk9fTU9ERV9TSSkgJiYgKEFDQ19DQ19HTlVDID49IDB4MDI1ZjAwdWwgfHwgQUNDX0NDX0xMVk0pICYmIChfX0lOVF9NQVhfXyswID4gMjE0NzQ4MzY0N0wpCisgICB0eXBlZGVmIGludCBfX2FjY19pbnQzMmVfc2lfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CisgICB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2FjY191aW50MzJlX3NpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOworIyAgZGVmaW5lIGFjY19pbnQzMmVfdCAgICAgICAgICBfX2FjY19pbnQzMmVfc2lfdAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICBfX2FjY191aW50MzJlX3NpX3QKKyNlbGlmIDEgJiYgIWRlZmluZWQoQUNDX0NGR19UWVBFX05PX01PREVfU0kpICYmIChBQ0NfQ0NfR05VQyA+PSAweDAyNWYwMHVsKSAmJiBkZWZpbmVkKF9fQVZSX18pICYmIChfX0xPTkdfTUFYX18rMCA9PSAzMjc2N0wpCisgICB0eXBlZGVmIGludCBfX2FjY19pbnQzMmVfc2lfdCBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1NJX18pKSk7CisgICB0eXBlZGVmIHVuc2lnbmVkIGludCBfX2FjY191aW50MzJlX3NpX3QgX19hdHRyaWJ1dGVfXygoX19tb2RlX18oX19TSV9fKSkpOworIyAgZGVmaW5lIGFjY19pbnQzMmVfdCAgICAgICAgICBfX2FjY19pbnQzMmVfc2lfdAorIyAgZGVmaW5lIGFjY191aW50MzJlX3QgICAgICAgICBfX2FjY191aW50MzJlX3NpX3QKKyMgIGRlZmluZSBBQ0NfSU5UMzJfQyhjKSAgICAgICAgYyMjTEwKKyMgIGRlZmluZSBBQ0NfVUlOVDMyX0MoYykgICAgICAgYyMjVUxMCisjZWxpZiAoQUNDX1NJWkVPRl9fX0lOVDMyID09IDQpCisjICBkZWZpbmUgYWNjX2ludDMyZV90ICAgICAgICAgIF9faW50MzIKKyMgIGRlZmluZSBhY2NfdWludDMyZV90ICAgICAgICAgdW5zaWduZWQgX19pbnQzMgorI2Vsc2UKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChhY2NfaW50MzJlX3QpCisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMzJFX1QgICA0CisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50NjRlX3QpCisjaWYgKEFDQ19TSVpFT0ZfX19JTlQ2NCA9PSA4KQorIyAgaWYgKEFDQ19DQ19CT1JMQU5EQykgJiYgIWRlZmluZWQoQUNDX0NGR19UWVBFX1BSRUZFUl9fX0lOVDY0KQorIyAgICBkZWZpbmUgQUNDX0NGR19UWVBFX1BSRUZFUl9fX0lOVDY0IDEKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoQUNDX1NJWkVPRl9JTlQgPT0gOCkgJiYgKEFDQ19TSVpFT0ZfSU5UIDwgQUNDX1NJWkVPRl9MT05HKQorIyAgZGVmaW5lIGFjY19pbnQ2NGVfdCAgICAgICAgICBpbnQKKyMgIGRlZmluZSBhY2NfdWludDY0ZV90ICAgICAgICAgdW5zaWduZWQgaW50CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UNjRFX1QgICBBQ0NfU0laRU9GX0lOVAorI2VsaWYgKEFDQ19TSVpFT0ZfTE9ORyA9PSA4KQorIyAgZGVmaW5lIGFjY19pbnQ2NGVfdCAgICAgICAgICBsb25nIGludAorIyAgZGVmaW5lIGFjY191aW50NjRlX3QgICAgICAgICB1bnNpZ25lZCBsb25nIGludAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UICAgQUNDX1NJWkVPRl9MT05HCisjZWxpZiAoQUNDX1NJWkVPRl9MT05HX0xPTkcgPT0gOCkgJiYgIWRlZmluZWQoQUNDX0NGR19UWVBFX1BSRUZFUl9fX0lOVDY0KQorIyAgZGVmaW5lIGFjY19pbnQ2NGVfdCAgICAgICAgICBhY2NfbGxvbmdfdAorIyAgZGVmaW5lIGFjY191aW50NjRlX3QgICAgICAgICBhY2NfdWxsb25nX3QKKyMgIGlmIChBQ0NfQ0NfQk9STEFOREMpCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgICgoYykgKyAwbGwpCisjICAgIGRlZmluZSBBQ0NfVUlOVDY0X0MoYykgICAgICgoYykgKyAwdWxsKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX0lOVDY0X0MoYykgICAgICBjIyNMTAorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICBjIyNVTEwKKyMgIGVuZGlmCisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UNjRFX1QgICBBQ0NfU0laRU9GX0xPTkdfTE9ORworI2VsaWYgKEFDQ19TSVpFT0ZfX19JTlQ2NCA9PSA4KQorIyAgZGVmaW5lIGFjY19pbnQ2NGVfdCAgICAgICAgICBfX2ludDY0CisjICBkZWZpbmUgYWNjX3VpbnQ2NGVfdCAgICAgICAgIHVuc2lnbmVkIF9faW50NjQKKyMgIGlmIChBQ0NfQ0NfQk9STEFOREMpCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgICgoYykgKyAwaTY0KQorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICAoKGMpICsgMHVpNjQpCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfSU5UNjRfQyhjKSAgICAgIGMjI2k2NAorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICBjIyN1aTY0CisjICBlbmRpZgorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UICAgQUNDX1NJWkVPRl9fX0lOVDY0CisjZWxzZQorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50MzJsX3QpCisjaWYgZGVmaW5lZChhY2NfaW50MzJlX3QpCisjICBkZWZpbmUgYWNjX2ludDMybF90ICAgICAgICAgIGFjY19pbnQzMmVfdAorIyAgZGVmaW5lIGFjY191aW50MzJsX3QgICAgICAgICBhY2NfdWludDMyZV90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMzJMX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQzMkVfVAorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID49IDQpICYmIChBQ0NfU0laRU9GX0lOVCA8IEFDQ19TSVpFT0ZfTE9ORykKKyMgIGRlZmluZSBhY2NfaW50MzJsX3QgICAgICAgICAgaW50CisjICBkZWZpbmUgYWNjX3VpbnQzMmxfdCAgICAgICAgIHVuc2lnbmVkIGludAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVDMyTF9UICAgQUNDX1NJWkVPRl9JTlQKKyNlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gNCkKKyMgIGRlZmluZSBhY2NfaW50MzJsX3QgICAgICAgICAgbG9uZyBpbnQKKyMgIGRlZmluZSBhY2NfdWludDMybF90ICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQzMkxfVCAgIEFDQ19TSVpFT0ZfTE9ORworI2Vsc2UKKyMgIGVycm9yICJhY2NfaW50MzJsX3QiCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGVfdCkKKyMgIGRlZmluZSBhY2NfaW50NjRsX3QgICAgICAgICAgYWNjX2ludDY0ZV90CisjICBkZWZpbmUgYWNjX3VpbnQ2NGxfdCAgICAgICAgIGFjY191aW50NjRlX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQ2NExfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UCisjZWxzZQorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2NfaW50MzJmX3QpCisjaWYgKEFDQ19TSVpFT0ZfU0laRV9UID49IDgpCisjICBkZWZpbmUgYWNjX2ludDMyZl90ICAgICAgICAgIGFjY19pbnQ2NGxfdAorIyAgZGVmaW5lIGFjY191aW50MzJmX3QgICAgICAgICBhY2NfdWludDY0bF90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UMzJGX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQ2NExfVAorI2Vsc2UKKyMgIGRlZmluZSBhY2NfaW50MzJmX3QgICAgICAgICAgYWNjX2ludDMybF90CisjICBkZWZpbmUgYWNjX3VpbnQzMmZfdCAgICAgICAgIGFjY191aW50MzJsX3QKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlQzMkZfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDMyTF9UCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKGFjY19pbnRwdHJfdCkKKyNpZiAxICYmIChBQ0NfT1NfT1M0MDAgJiYgKEFDQ19TSVpFT0ZfVk9JRF9QID09IDE2KSkKKyMgIGRlZmluZSBfX0FDQ19JTlRQVFJfVF9JU19QT0lOVEVSIDEKKyAgIHR5cGVkZWYgY2hhciogICAgICAgICAgICAgICAgYWNjX2ludHB0cl90OworICAgdHlwZWRlZiBjaGFyKiAgICAgICAgICAgICAgICBhY2NfdWludHB0cl90OworIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBhY2NfaW50cHRyX3QKKyMgIGRlZmluZSBhY2NfdWludHB0cl90ICAgICAgICAgYWNjX3VpbnRwdHJfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UICAgQUNDX1NJWkVPRl9WT0lEX1AKKyNlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMzAwKSAmJiAoQUNDX1NJWkVPRl9WT0lEX1AgPT0gNCkgJiYgKEFDQ19TSVpFT0ZfSU5UID09IDQpKQorICAgdHlwZWRlZiBfX3c2NCBpbnQgICAgICAgICAgICBhY2NfaW50cHRyX3Q7CisgICB0eXBlZGVmIF9fdzY0IHVuc2lnbmVkIGludCAgIGFjY191aW50cHRyX3Q7CisjICBkZWZpbmUgYWNjX2ludHB0cl90ICAgICAgICAgIGFjY19pbnRwdHJfdAorIyAgZGVmaW5lIGFjY191aW50cHRyX3QgICAgICAgICBhY2NfdWludHB0cl90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QgICBBQ0NfU0laRU9GX0lOVAorI2VsaWYgKEFDQ19TSVpFT0ZfU0hPUlQgPT0gQUNDX1NJWkVPRl9WT0lEX1ApICYmIChBQ0NfU0laRU9GX0lOVCA+IEFDQ19TSVpFT0ZfVk9JRF9QKQorIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBzaG9ydAorIyAgZGVmaW5lIGFjY191aW50cHRyX3QgICAgICAgICB1bnNpZ25lZCBzaG9ydAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UICAgQUNDX1NJWkVPRl9TSE9SVAorI2VsaWYgKEFDQ19TSVpFT0ZfSU5UID49IEFDQ19TSVpFT0ZfVk9JRF9QKSAmJiAoQUNDX1NJWkVPRl9JTlQgPCBBQ0NfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgYWNjX2ludHB0cl90ICAgICAgICAgIGludAorIyAgZGVmaW5lIGFjY191aW50cHRyX3QgICAgICAgICB1bnNpZ25lZCBpbnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfSU5UCisjZWxpZiAoQUNDX1NJWkVPRl9MT05HID49IEFDQ19TSVpFT0ZfVk9JRF9QKQorIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBsb25nCisjICBkZWZpbmUgYWNjX3VpbnRwdHJfdCAgICAgICAgIHVuc2lnbmVkIGxvbmcKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCAgIEFDQ19TSVpFT0ZfTE9ORworI2VsaWYgKEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UID49IEFDQ19TSVpFT0ZfVk9JRF9QKQorIyAgZGVmaW5lIGFjY19pbnRwdHJfdCAgICAgICAgICBhY2NfaW50NjRsX3QKKyMgIGRlZmluZSBhY2NfdWludHB0cl90ICAgICAgICAgYWNjX3VpbnQ2NGxfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QKKyNlbHNlCisjICBlcnJvciAiYWNjX2ludHB0cl90IgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChhY2Nfd29yZF90KQorI2lmIGRlZmluZWQoQUNDX1dPUkRTSVpFKSAmJiAoQUNDX1dPUkRTSVpFID4gMCkKKyNpZiAoQUNDX1dPUkRTSVpFID09IEFDQ19TSVpFT0ZfQUNDX0lOVFBUUl9UKSAmJiAhZGVmaW5lZChfX0FDQ19JTlRQVFJfVF9JU19QT0lOVEVSKQorIyAgZGVmaW5lIGFjY193b3JkX3QgICAgICAgICAgICBhY2NfdWludHB0cl90CisjICBkZWZpbmUgYWNjX3N3b3JkX3QgICAgICAgICAgIGFjY19pbnRwdHJfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCBBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVAorI2VsaWYgKEFDQ19XT1JEU0laRSA9PSBBQ0NfU0laRU9GX0xPTkcpCisjICBkZWZpbmUgYWNjX3dvcmRfdCAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcKKyMgIGRlZmluZSBhY2Nfc3dvcmRfdCAgICAgICAgICAgbG9uZworIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCBBQ0NfU0laRU9GX0xPTkcKKyNlbGlmIChBQ0NfV09SRFNJWkUgPT0gQUNDX1NJWkVPRl9JTlQpCisjICBkZWZpbmUgYWNjX3dvcmRfdCAgICAgICAgICAgIHVuc2lnbmVkIGludAorIyAgZGVmaW5lIGFjY19zd29yZF90ICAgICAgICAgICBpbnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19XT1JEX1QgQUNDX1NJWkVPRl9JTlQKKyNlbGlmIChBQ0NfV09SRFNJWkUgPT0gQUNDX1NJWkVPRl9TSE9SVCkKKyMgIGRlZmluZSBhY2Nfd29yZF90ICAgICAgICAgICAgdW5zaWduZWQgc2hvcnQKKyMgIGRlZmluZSBhY2Nfc3dvcmRfdCAgICAgICAgICAgc2hvcnQKKyMgIGRlZmluZSBBQ0NfU0laRU9GX0FDQ19XT1JEX1QgQUNDX1NJWkVPRl9TSE9SVAorI2VsaWYgKEFDQ19XT1JEU0laRSA9PSAxKQorIyAgZGVmaW5lIGFjY193b3JkX3QgICAgICAgICAgICB1bnNpZ25lZCBjaGFyCisjICBkZWZpbmUgYWNjX3N3b3JkX3QgICAgICAgICAgIHNpZ25lZCBjaGFyCisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfV09SRF9UIDEKKyNlbGlmIChBQ0NfV09SRFNJWkUgPT0gQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QpCisjICBkZWZpbmUgYWNjX3dvcmRfdCAgICAgICAgICAgIGFjY191aW50NjRsX3QKKyMgIGRlZmluZSBhY2Nfc3dvcmRfdCAgICAgICAgICAgYWNjX2ludDY0bF90CisjICBkZWZpbmUgQUNDX1NJWkVPRl9BQ0NfV09SRF9UIEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UCisjZWxpZiAoQUNDX0FSQ0hfU1BVKSAmJiAoQUNDX0NDX0dOVUMpCisjaWYgMAorICAgdHlwZWRlZiB1bnNpZ25lZCBhY2Nfd29yZF90ICBfX2F0dHJpYnV0ZV9fKChfX21vZGVfXyhfX1YxNlFJX18pKSk7CisgICB0eXBlZGVmIGludCAgICAgIGFjY19zd29yZF90IF9fYXR0cmlidXRlX18oKF9fbW9kZV9fKF9fVjE2UUlfXykpKTsKKyMgIGRlZmluZSBhY2Nfd29yZF90ICAgICAgICAgICAgYWNjX3dvcmRfdAorIyAgZGVmaW5lIGFjY19zd29yZF90ICAgICAgICAgICBhY2Nfc3dvcmRfdAorIyAgZGVmaW5lIEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCAxNgorI2VuZGlmCisjZWxzZQorIyAgZXJyb3IgImFjY193b3JkX3QiCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0lOVDE2X0MpCisjICBpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0lOVCA+PSAyKQorIyAgICBkZWZpbmUgQUNDX0lOVDE2X0MoYykgICAgICAoKGMpICsgMCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UMTZfQyhjKSAgICAgKChjKSArIDBVKQorIyAgZWxpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0xPTkcgPj0gMikKKyMgICAgZGVmaW5lIEFDQ19JTlQxNl9DKGMpICAgICAgKChjKSArIDBMKQorIyAgICBkZWZpbmUgQUNDX1VJTlQxNl9DKGMpICAgICAoKGMpICsgMFVMKQorIyAgZWxpZiAoQUNDX1NJWkVPRl9JTlQgPj0gMikKKyMgICAgZGVmaW5lIEFDQ19JTlQxNl9DKGMpICAgICAgYworIyAgICBkZWZpbmUgQUNDX1VJTlQxNl9DKGMpICAgICBjIyNVCisjICBlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gMikKKyMgICAgZGVmaW5lIEFDQ19JTlQxNl9DKGMpICAgICAgYyMjTAorIyAgICBkZWZpbmUgQUNDX1VJTlQxNl9DKGMpICAgICBjIyNVTAorIyAgZWxzZQorIyAgICBlcnJvciAiQUNDX0lOVDE2X0MiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0lOVDMyX0MpCisjICBpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0lOVCA+PSA0KQorIyAgICBkZWZpbmUgQUNDX0lOVDMyX0MoYykgICAgICAoKGMpICsgMCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UMzJfQyhjKSAgICAgKChjKSArIDBVKQorIyAgZWxpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0xPTkcgPj0gNCkKKyMgICAgZGVmaW5lIEFDQ19JTlQzMl9DKGMpICAgICAgKChjKSArIDBMKQorIyAgICBkZWZpbmUgQUNDX1VJTlQzMl9DKGMpICAgICAoKGMpICsgMFVMKQorIyAgZWxpZiAoQUNDX1NJWkVPRl9JTlQgPj0gNCkKKyMgICAgZGVmaW5lIEFDQ19JTlQzMl9DKGMpICAgICAgYworIyAgICBkZWZpbmUgQUNDX1VJTlQzMl9DKGMpICAgICBjIyNVCisjICBlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gNCkKKyMgICAgZGVmaW5lIEFDQ19JTlQzMl9DKGMpICAgICAgYyMjTAorIyAgICBkZWZpbmUgQUNDX1VJTlQzMl9DKGMpICAgICBjIyNVTAorIyAgZWxpZiAoQUNDX1NJWkVPRl9MT05HX0xPTkcgPj0gNCkKKyMgICAgZGVmaW5lIEFDQ19JTlQzMl9DKGMpICAgICAgYyMjTEwKKyMgICAgZGVmaW5lIEFDQ19VSU5UMzJfQyhjKSAgICAgYyMjVUxMCisjICBlbHNlCisjICAgIGVycm9yICJBQ0NfSU5UMzJfQyIKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfSU5UNjRfQykgJiYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisjICBpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0lOVCA+PSA4KQorIyAgICBkZWZpbmUgQUNDX0lOVDY0X0MoYykgICAgICAoKGMpICsgMCkKKyMgICAgZGVmaW5lIEFDQ19VSU5UNjRfQyhjKSAgICAgKChjKSArIDBVKQorIyAgZWxpZiAoQUNDX0JST0tFTl9JTlRFR1JBTF9DT05TVEFOVFMpICYmIChBQ0NfU0laRU9GX0xPTkcgPj0gOCkKKyMgICAgZGVmaW5lIEFDQ19JTlQ2NF9DKGMpICAgICAgKChjKSArIDBMKQorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICAoKGMpICsgMFVMKQorIyAgZWxpZiAoQUNDX1NJWkVPRl9JTlQgPj0gOCkKKyMgICAgZGVmaW5lIEFDQ19JTlQ2NF9DKGMpICAgICAgYworIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICBjIyNVCisjICBlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gOCkKKyMgICAgZGVmaW5lIEFDQ19JTlQ2NF9DKGMpICAgICAgYyMjTAorIyAgICBkZWZpbmUgQUNDX1VJTlQ2NF9DKGMpICAgICBjIyNVTAorIyAgZWxzZQorIyAgICBlcnJvciAiQUNDX0lOVDY0X0MiCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0FDQ19JTlQxNkVfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19JTlQxNkVfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX0lOVDE2RV9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UMTZFX1QKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfSU5UMzJFX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9BQ0NfSU5UMzJFX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19JTlQzMkVfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDMyRV9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfQUNDX0lOVDY0RV9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfQUNDX0lOVDY0RV9UKQorIyAgZGVmaW5lIFNJWkVPRl9BQ0NfSU5UNjRFX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQ2NEVfVAorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0FDQ19JTlQzMkxfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19JTlQzMkxfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX0lOVDMyTF9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UMzJMX1QKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfSU5UNjRMX1QpICYmIGRlZmluZWQoQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QpCisjICBkZWZpbmUgU0laRU9GX0FDQ19JTlQ2NExfVCAgIEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UCisjZW5kaWYKKyNpZiAhZGVmaW5lZChTSVpFT0ZfQUNDX0lOVDMyRl9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfQUNDX0lOVDMyRl9UKQorIyAgZGVmaW5lIFNJWkVPRl9BQ0NfSU5UMzJGX1QgICBBQ0NfU0laRU9GX0FDQ19JTlQzMkZfVAorI2VuZGlmCisjaWYgIWRlZmluZWQoU0laRU9GX0FDQ19JTlRQVFJfVCkgJiYgZGVmaW5lZChBQ0NfU0laRU9GX0FDQ19JTlRQVFJfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX0lOVFBUUl9UICAgQUNDX1NJWkVPRl9BQ0NfSU5UUFRSX1QKKyNlbmRpZgorI2lmICFkZWZpbmVkKFNJWkVPRl9BQ0NfV09SRF9UKSAmJiBkZWZpbmVkKEFDQ19TSVpFT0ZfQUNDX1dPUkRfVCkKKyMgIGRlZmluZSBTSVpFT0ZfQUNDX1dPUkRfVCAgICAgQUNDX1NJWkVPRl9BQ0NfV09SRF9UCisjZW5kaWYKKyNpZiAxICYmICFkZWZpbmVkKGFjY19zaWdub190KSAmJiBkZWZpbmVkKF9fbGludXhfXykgJiYgZGVmaW5lZChfX2RpZXRsaWJjX18pICYmIChBQ0NfU0laRU9GX0lOVCAhPSA0KQorIyAgZGVmaW5lIGFjY19zaWdub190ICAgICAgICAgICBhY2NfaW50MzJlX3QKKyNlbmRpZgorI2lmICFkZWZpbmVkKGFjY19zaWdub190KQorIyAgZGVmaW5lIGFjY19zaWdub190ICAgICAgICAgICBpbnQKKyNlbmRpZgorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCitleHRlcm4gIkMiIHsKKyNlbmRpZgorI2lmIChBQ0NfQlJPS0VOX0NERUNMX0FMVF9TWU5UQVgpCit0eXBlZGVmIHZvaWQgX19hY2NfY2RlY2xfc2lnaGFuZGxlciAoKmFjY19zaWdoYW5kbGVyX3QpKGFjY19zaWdub190KTsKKyNlbGlmIGRlZmluZWQoUkVUU0lHVFlQRSkKK3R5cGVkZWYgUkVUU0lHVFlQRSAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworI2Vsc2UKK3R5cGVkZWYgdm9pZCAoX19hY2NfY2RlY2xfc2lnaGFuZGxlciAqYWNjX3NpZ2hhbmRsZXJfdCkoYWNjX3NpZ25vX3QpOworI2VuZGlmCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKK30KKyNlbmRpZgorIyAgaWYgIWRlZmluZWQoQUNDX0NGR19OT19BQ0NfVUFfSCkKKyNpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjA3MDB1bCkpCisjZWxpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjA4MDB1bCkpICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZWxpZiAoQUNDX0NDX0lOVEVMQykgJiYgZGVmaW5lZChfV0lOMzIpCisjZWxpZiAoQUNDX0NDX0lOVEVMQyAmJiAoX19JTlRFTF9DT01QSUxFUiA8IDcwMCkpCisjZWxpZiAoQUNDX0NDX0xMVk0pCisjZWxpZiAoQUNDX0NDX0dOVUMgfHwgQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfUEFUSFNDQUxFKQorI2lmICFkZWZpbmVkKF9fYWNjX3VhMTZfdCkgJiYgKEFDQ19PUFRfVU5BTElHTkVEMTYpICYmIGRlZmluZWQoYWNjX2ludDE2ZV90KQorICAgdHlwZWRlZiBzdHJ1Y3QgeyBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90IHYgX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOyB9IF9fYWNjX3VhMTZfdDsKKyMgIGRlZmluZSBfX2FjY191YTE2X3QgX19hY2NfdWExNl90CisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX2FjY191YTMyX3QpICYmIChBQ0NfT1BUX1VOQUxJR05FRDMyKSAmJiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyAgIHR5cGVkZWYgc3RydWN0IHsgX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCB2IF9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKTsgfSBfX2FjY191YTMyX3Q7CisjICBkZWZpbmUgX19hY2NfdWEzMl90IF9fYWNjX3VhMzJfdAorI2VuZGlmCisjaWYgIWRlZmluZWQoX19hY2NfdWE2NF90KSAmJiAoQUNDX09QVF9VTkFMSUdORUQ2NCkgJiYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICB0eXBlZGVmIHN0cnVjdCB7IF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50NjRsX3QgdiBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7IH0gX19hY2NfdWE2NF90OworIyAgZGVmaW5lIF9fYWNjX3VhNjRfdCBfX2FjY191YTY0X3QKKyNlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19PUFRfVU5BTElHTkVEMTYpICYmIGRlZmluZWQoYWNjX2ludDE2ZV90KQorI2RlZmluZSBBQ0NfVUFfR0VUMTYocCkgICAgICAgICAoKiAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQxNmVfdCopIChfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKikgKHApKQorI2RlZmluZSBBQ0NfVUFfU0VUMTYocCx2KSAgICAgICAoKiAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQxNmVfdCopIChfX2FjY191YV92b2xhdGlsZSB2b2lkKikgKHApID0gKGFjY191aW50MTZlX3QpICh2KSkKKyNpZiAoQUNDX0FCSV9CSUdfRU5ESUFOKQorIyAgZGVmaW5lIEFDQ19VQV9HRVRfQkUxNihwKSAgICBBQ0NfVUFfR0VUMTYocCkKKyMgIGRlZmluZSBBQ0NfVUFfU0VUX0JFMTYocCx2KSAgQUNDX1VBX1NFVDE2KHAsdikKKyNlbGlmIChBQ0NfQUJJX0xJVFRMRV9FTkRJQU4pCisjICBkZWZpbmUgQUNDX1VBX0dFVF9MRTE2KHApICAgIEFDQ19VQV9HRVQxNihwKQorIyAgZGVmaW5lIEFDQ19VQV9TRVRfTEUxNihwLHYpICBBQ0NfVUFfU0VUMTYocCx2KQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19JTkxJTkVfQVNNKSAmJiBkZWZpbmVkKF9fYWNjX0hBVkVfZm9yY2VpbmxpbmUpCisjaWYgKEFDQ19BUkNIX1BPV0VSUEMgJiYgQUNDX0FCSV9CSUdfRU5ESUFOKSAmJiAoQUNDX0NDX0dOVUMpCisjaWYgIWRlZmluZWQoQUNDX1VBX0dFVF9MRTE2KQorZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApOworZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHVuc2lnbmVkIGxvbmcgX19BQ0NfVUFfR0VUX0xFMTYoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCogcHApIHsKKyAgICBfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MTZlX3QqKSBwcDsKKyAgICB1bnNpZ25lZCBsb25nIHY7CisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oImxoYnJ4ICUwLDAsJTEiIDogIj1yIiAodikgOiAiciIgKHApLCAibSIgKCpwKSk7CisgICAgcmV0dXJuIHY7Cit9CisjZGVmaW5lIEFDQ19VQV9HRVRfTEUxNihwKSAgICAgIF9fQUNDX1VBX0dFVF9MRTE2KHApCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfVUFfU0VUX0xFMTYpCitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdm9pZCBfX0FDQ19VQV9TRVRfTEUxNihfX2FjY191YV92b2xhdGlsZSB2b2lkKiBwcCwgdW5zaWduZWQgbG9uZyB2KTsKK2V4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTE2KF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpIHsKKyAgICBfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDE2ZV90KiBwID0gKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MTZlX3QqKSBwcDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygic3RoYnJ4ICUyLDAsJTEiIDogIj1tIiAoKnApIDogInIiIChwKSwgInIiICh2KSk7Cit9CisjZGVmaW5lIEFDQ19VQV9TRVRfTEUxNihwLHYpICAgIF9fQUNDX1VBX1NFVF9MRTE2KHAsdikKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfVUFfQ09QWTE2KQorIyAgZGVmaW5lIEFDQ19VQV9DT1BZMTYoZCxzKSAgICBBQ0NfVUFfU0VUMTYoZCwgQUNDX1VBX0dFVDE2KHMpKQorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09QVF9VTkFMSUdORUQzMikgJiYgZGVmaW5lZChhY2NfaW50MzJlX3QpCisjZGVmaW5lIEFDQ19VQV9HRVQzMihwKSAgICAgICAgICgqIChfX2FjY191YV92b2xhdGlsZSBjb25zdCBhY2NfdWludDMyZV90KikgKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IHZvaWQqKSAocCkpCisjZGVmaW5lIEFDQ19VQV9TRVQzMihwLHYpICAgICAgICgqIChfX2FjY191YV92b2xhdGlsZSBhY2NfdWludDMyZV90KikgKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqKSAocCkgPSAoYWNjX3VpbnQzMmVfdCkgKHYpKQorI2lmIChBQ0NfQUJJX0JJR19FTkRJQU4pCisjICBkZWZpbmUgQUNDX1VBX0dFVF9CRTMyKHApICAgIEFDQ19VQV9HRVQzMihwKQorIyAgZGVmaW5lIEFDQ19VQV9TRVRfQkUzMihwLHYpICBBQ0NfVUFfU0VUMzIocCx2KQorI2VsaWYgKEFDQ19BQklfTElUVExFX0VORElBTikKKyMgIGRlZmluZSBBQ0NfVUFfR0VUX0xFMzIocCkgICAgQUNDX1VBX0dFVDMyKHApCisjICBkZWZpbmUgQUNDX1VBX1NFVF9MRTMyKHAsdikgIEFDQ19VQV9TRVQzMihwLHYpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIGRlZmluZWQoX19hY2NfSEFWRV9mb3JjZWlubGluZSkKKyNpZiAoQUNDX0FSQ0hfUE9XRVJQQyAmJiBBQ0NfQUJJX0JJR19FTkRJQU4pICYmIChBQ0NfQ0NfR05VQykKKyNpZiAhZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCk7CitleHRlcm4gX19hY2NfZm9yY2VpbmxpbmUgdW5zaWduZWQgbG9uZyBfX0FDQ19VQV9HRVRfTEUzMihfX2FjY191YV92b2xhdGlsZSBjb25zdCB2b2lkKiBwcCkgeworICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3QgYWNjX3VpbnQzMmVfdCopIHBwOworICAgIHVuc2lnbmVkIGxvbmcgdjsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygibHdicnggJTAsMCwlMSIgOiAiPXIiICh2KSA6ICJyIiAocCksICJtIiAoKnApKTsKKyAgICByZXR1cm4gdjsKK30KKyNkZWZpbmUgQUNDX1VBX0dFVF9MRTMyKHApICAgICAgX19BQ0NfVUFfR0VUX0xFMzIocCkKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKK2V4dGVybiBfX2FjY19mb3JjZWlubGluZSB2b2lkIF9fQUNDX1VBX1NFVF9MRTMyKF9fYWNjX3VhX3ZvbGF0aWxlIHZvaWQqIHBwLCB1bnNpZ25lZCBsb25nIHYpOworZXh0ZXJuIF9fYWNjX2ZvcmNlaW5saW5lIHZvaWQgX19BQ0NfVUFfU0VUX0xFMzIoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCogcHAsIHVuc2lnbmVkIGxvbmcgdikgeworICAgIF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50MzJlX3QqIHAgPSAoX19hY2NfdWFfdm9sYXRpbGUgYWNjX3VpbnQzMmVfdCopIHBwOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJzdHdicnggJTIsMCwlMSIgOiAiPW0iICgqcCkgOiAiciIgKHApLCAiciIgKHYpKTsKK30KKyNkZWZpbmUgQUNDX1VBX1NFVF9MRTMyKHAsdikgICAgX19BQ0NfVUFfU0VUX0xFMzIocCx2KQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9DT1BZMzIpCisjICBkZWZpbmUgQUNDX1VBX0NPUFkzMihkLHMpICAgIEFDQ19VQV9TRVQzMihkLCBBQ0NfVUFfR0VUMzIocykpCisjZW5kaWYKKyNlbmRpZgorI2lmIChBQ0NfT1BUX1VOQUxJR05FRDY0KSAmJiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyNkZWZpbmUgQUNDX1VBX0dFVDY0KHApICAgICAgICAgKCogKF9fYWNjX3VhX3ZvbGF0aWxlIGNvbnN0IGFjY191aW50NjRsX3QqKSAoX19hY2NfdWFfdm9sYXRpbGUgY29uc3Qgdm9pZCopIChwKSkKKyNkZWZpbmUgQUNDX1VBX1NFVDY0KHAsdikgICAgICAgKCogKF9fYWNjX3VhX3ZvbGF0aWxlIGFjY191aW50NjRsX3QqKSAoX19hY2NfdWFfdm9sYXRpbGUgdm9pZCopIChwKSA9IChhY2NfdWludDY0bF90KSAodikpCisjaWYgKEFDQ19BQklfQklHX0VORElBTikKKyMgIGRlZmluZSBBQ0NfVUFfR0VUX0JFNjQocCkgICAgQUNDX1VBX0dFVDY0KHApCisjICBkZWZpbmUgQUNDX1VBX1NFVF9CRTY0KHAsdikgIEFDQ19VQV9TRVQ2NChwLHYpCisjZWxpZiAoQUNDX0FCSV9MSVRUTEVfRU5ESUFOKQorIyAgZGVmaW5lIEFDQ19VQV9HRVRfTEU2NChwKSAgICBBQ0NfVUFfR0VUNjQocCkKKyMgIGRlZmluZSBBQ0NfVUFfU0VUX0xFNjQocCx2KSAgQUNDX1VBX1NFVDY0KHAsdikKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19VQV9DT1BZNjQpCisjICBkZWZpbmUgQUNDX1VBX0NPUFk2NChkLHMpICAgIEFDQ19VQV9TRVQ2NChkLCBBQ0NfVUFfR0VUNjQocykpCisjZW5kaWYKKyNlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDX0lOQ0RfSCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ19JTkNEX0gKKyNpZm5kZWYgX19BQ0NfSU5DRF9IX0lOQ0xVREVECisjZGVmaW5lIF9fQUNDX0lOQ0RfSF9JTkNMVURFRCAxCisjaWYgZGVmaW5lZChBQ0NfTElCQ19OQUtFRCkKKyNpZm5kZWYgX19BQ0NfRkFMTEJBQ0tfU1REREVGX0hfSU5DTFVERUQKKyNkZWZpbmUgX19BQ0NfRkFMTEJBQ0tfU1REREVGX0hfSU5DTFVERUQKKyNpZiBkZWZpbmVkKF9fUFRSRElGRl9UWVBFX18pCit0eXBlZGVmIF9fUFRSRElGRl9UWVBFX18gYWNjX2ZhbGxiYWNrX3B0cmRpZmZfdDsKKyNlbGlmIGRlZmluZWQoX19NSVBTX1BTWDJfXykKK3R5cGVkZWYgaW50IGFjY19mYWxsYmFja19wdHJkaWZmX3Q7CisjZWxzZQordHlwZWRlZiBsb25nIGFjY19mYWxsYmFja19wdHJkaWZmX3Q7CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fU0laRV9UWVBFX18pCit0eXBlZGVmIF9fU0laRV9UWVBFX18gYWNjX2ZhbGxiYWNrX3NpemVfdDsKKyNlbGlmIGRlZmluZWQoX19NSVBTX1BTWDJfXykKK3R5cGVkZWYgdW5zaWduZWQgaW50IGFjY19mYWxsYmFja19zaXplX3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGFjY19mYWxsYmFja19zaXplX3Q7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChwdHJkaWZmX3QpCit0eXBlZGVmIGFjY19mYWxsYmFja19wdHJkaWZmX3QgcHRyZGlmZl90OworI2lmbmRlZiBfUFRSRElGRl9UX0RFRklORUQKKyNkZWZpbmUgX1BUUkRJRkZfVF9ERUZJTkVEIDEKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoc2l6ZV90KQordHlwZWRlZiBhY2NfZmFsbGJhY2tfc2l6ZV90IHNpemVfdDsKKyNpZm5kZWYgX1NJWkVfVF9ERUZJTkVECisjZGVmaW5lIF9TSVpFX1RfREVGSU5FRCAxCisjZW5kaWYKKyNlbmRpZgorI2lmICFkZWZpbmVkKF9fY3BsdXNwbHVzKSAmJiAhZGVmaW5lZCh3Y2hhcl90KQordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB3Y2hhcl90OworI2lmbmRlZiBfV0NIQVJfVF9ERUZJTkVECisjZGVmaW5lIF9XQ0hBUl9UX0RFRklORUQgMQorI2VuZGlmCisjZW5kaWYKKyNpZm5kZWYgTlVMTAorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpICYmIGRlZmluZWQoX19HTlVDX18pICYmIChfX0dOVUNfXyA+PSA0KQorI2RlZmluZSBOVUxMICAgIF9fbnVsbAorI2VsaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyNkZWZpbmUgTlVMTCAgICAwCisjZWxzZQorI2RlZmluZSBOVUxMICAgICgodm9pZCopMCkKKyNlbmRpZgorI2VuZGlmCisjaWZuZGVmIG9mZnNldG9mCisjZGVmaW5lIG9mZnNldG9mKHMsbSkgICAoKHNpemVfdCkoKHB0cmRpZmZfdCkmKCgocyopMCktPm0pKSkKKyNlbmRpZgorI2VuZGlmCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX0ZSRUVTVEFORElORykKKyMgaWYgSEFWRV9TVERERUZfSAorIyAgaW5jbHVkZSA8c3RkZGVmLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChBQ0NfTElCQ19NT1NUTFlfRlJFRVNUQU5ESU5HKQorIyBpZiBIQVZFX1NURElPX0gKKyMgIGluY2x1ZGUgPHN0ZGlvLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1REREVGX0gKKyMgIGluY2x1ZGUgPHN0ZGRlZi5oPgorIyBlbmRpZgorIyBpZiBIQVZFX1NURElOVF9ICisjICBpbmNsdWRlIDxzdGRpbnQuaD4KKyMgZW5kaWYKKyNlbHNlCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBkZWZpbmVkKEhBVkVfVElNRV9IKSAmJiBkZWZpbmVkKF9fTVNMX18pICYmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyMgaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2lmIFNURENfSEVBREVSUworIyBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgaW5jbHVkZSA8c3RkZGVmLmg+CisjZWxzZQorIyBpZiBIQVZFX1NURExJQl9ICisjICBpbmNsdWRlIDxzdGRsaWIuaD4KKyMgZW5kaWYKKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjICBpbmNsdWRlIDxtZW1vcnkuaD4KKyMgZW5kaWYKKyMgaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR1NfSAorIyBpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lOVFRZUEVTX0gKKyMgaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1RESU5UX0gKKyMgIGluY2x1ZGUgPHN0ZGludC5oPgorIyBlbmRpZgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDX0lOQ0VfSCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ19JTkNFX0gKKyNpZm5kZWYgX19BQ0NfSU5DRV9IX0lOQ0xVREVECisjZGVmaW5lIF9fQUNDX0lOQ0VfSF9JTkNMVURFRCAxCisjaWYgZGVmaW5lZChBQ0NfTElCQ19OQUtFRCkKKyNlbGlmIGRlZmluZWQoQUNDX0xJQkNfRlJFRVNUQU5ESU5HKQorI2VsaWYgZGVmaW5lZChBQ0NfTElCQ19NT1NUTFlfRlJFRVNUQU5ESU5HKQorIyAgaWYgZGVmaW5lZChIQVZFX1NFVEpNUF9IKQorIyAgICBpbmNsdWRlIDxzZXRqbXAuaD4KKyMgIGVuZGlmCisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9TVERBUkdfSCkKKyMgIGluY2x1ZGUgPHN0ZGFyZy5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0NUWVBFX0gpCisjICBpbmNsdWRlIDxjdHlwZS5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0VSUk5PX0gpCisjICBpbmNsdWRlIDxlcnJuby5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX01BTExPQ19IKQorIyAgaW5jbHVkZSA8bWFsbG9jLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfQUxMT0NBX0gpCisjICBpbmNsdWRlIDxhbGxvY2EuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9GQ05UTF9IKQorIyAgaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9ESVJFTlRfSCkKKyMgIGluY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX1NFVEpNUF9IKQorIyAgaW5jbHVkZSA8c2V0am1wLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU0lHTkFMX0gpCisjICBpbmNsdWRlIDxzaWduYWwuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoVElNRV9XSVRIX1NZU19USU1FKQorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9USU1FX0gpCisjICBpbmNsdWRlIDx0aW1lLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfVVRJTUVfSCkKKyMgIGluY2x1ZGUgPHV0aW1lLmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfU1lTX1VUSU1FX0gpCisjICBpbmNsdWRlIDxzeXMvdXRpbWUuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9JT19IKQorIyAgaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9ET1NfSCkKKyMgIGluY2x1ZGUgPGRvcy5oPgorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0RJUkVDVF9IKQorIyAgaW5jbHVkZSA8ZGlyZWN0Lmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfU0hBUkVfSCkKKyMgIGluY2x1ZGUgPHNoYXJlLmg+CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19DQ19ORFBDKQorIyAgaW5jbHVkZSA8b3MuaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoX19UT1NfXykgJiYgKGRlZmluZWQoX19QVVJFQ19fKSB8fCBkZWZpbmVkKF9fVFVSQk9DX18pKQorIyAgaW5jbHVkZSA8ZXh0Lmg+CisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ19JTkNJX0gpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NfSU5DSV9ICisjaWZuZGVmIF9fQUNDX0lOQ0lfSF9JTkNMVURFRAorI2RlZmluZSBfX0FDQ19JTkNJX0hfSU5DTFVERUQgMQorI2lmIGRlZmluZWQoQUNDX0xJQkNfTkFLRUQpCisjZWxpZiBkZWZpbmVkKEFDQ19MSUJDX0ZSRUVTVEFORElORykKKyNlbGlmIGRlZmluZWQoQUNDX0xJQkNfTU9TVExZX0ZSRUVTVEFORElORykKKyNlbHNlCisjaWYgKEFDQ19PU19UT1MgJiYgKEFDQ19DQ19QVVJFQyB8fCBBQ0NfQ0NfVFVSQk9DKSkKKyMgIGluY2x1ZGUgPHRvcy5oPgorI2VsaWYgKEFDQ19IQVZFX1dJTkRPV1NfSCkKKyMgIGlmIDEgJiYgIWRlZmluZWQoV0lOMzJfTEVBTl9BTkRfTUVBTikKKyMgICAgZGVmaW5lIFdJTjMyX0xFQU5fQU5EX01FQU4gMQorIyAgZW5kaWYKKyMgIGlmIDEgJiYgIWRlZmluZWQoX1dJTjMyX1dJTk5UKQorIyAgICBkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDQwMAorIyAgZW5kaWYKKyMgIGluY2x1ZGUgPHdpbmRvd3MuaD4KKyMgIGlmIChBQ0NfQ0NfQk9STEFOREMgfHwgQUNDX0NDX1RVUkJPQykKKyMgICAgaW5jbHVkZSA8ZGlyLmg+CisjICBlbmRpZgorI2VsaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX1dJTjE2KQorIyAgaWYgKEFDQ19DQ19BWlRFQ0MpCisjICAgIGluY2x1ZGUgPG1vZGVsLmg+CisjICAgIGluY2x1ZGUgPHN0YXQuaD4KKyMgIGVsaWYgKEFDQ19DQ19CT1JMQU5EQyB8fCBBQ0NfQ0NfVFVSQk9DKQorIyAgICBpbmNsdWRlIDxhbGxvYy5oPgorIyAgICBpbmNsdWRlIDxkaXIuaD4KKyMgIGVsaWYgKEFDQ19PU19ET1MzMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX0RKR1BQX18pCisjICAgIGluY2x1ZGUgPHN5cy9leGNlcHRuLmg+CisjICBlbGlmIChBQ0NfQ0NfUEFDSUZJQ0MpCisjICAgIGluY2x1ZGUgPHVuaXhpby5oPgorIyAgICBpbmNsdWRlIDxzdGF0Lmg+CisjICAgIGluY2x1ZGUgPHN5cy5oPgorIyAgZWxpZiAoQUNDX0NDX1dBVENPTUMpCisjICAgIGluY2x1ZGUgPGk4Ni5oPgorIyAgZW5kaWYKKyNlbGlmIChBQ0NfT1NfT1MyMTYpCisjICBpZiAoQUNDX0NDX1dBVENPTUMpCisjICAgIGluY2x1ZGUgPGk4Ni5oPgorIyAgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9TWVNfTU1BTl9IKQorIyAgaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9TWVNfUkVTT1VSQ0VfSCkKKyMgIGluY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2KQorIyAgaWYgZGVmaW5lZChGUF9PRkYpCisjICAgIGRlZmluZSBBQ0NfUFRSX0ZQX09GRih4KSAgIEZQX09GRih4KQorIyAgZWxpZiBkZWZpbmVkKF9GUF9PRkYpCisjICAgIGRlZmluZSBBQ0NfUFRSX0ZQX09GRih4KSAgIF9GUF9PRkYoeCkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIEFDQ19QVFJfRlBfT0ZGKHgpICAgKCgoY29uc3QgdW5zaWduZWQgX19mYXIqKSYoeCkpWzBdKQorIyAgZW5kaWYKKyMgIGlmIGRlZmluZWQoRlBfU0VHKQorIyAgICBkZWZpbmUgQUNDX1BUUl9GUF9TRUcoeCkgICBGUF9TRUcoeCkKKyMgIGVsaWYgZGVmaW5lZChfRlBfU0VHKQorIyAgICBkZWZpbmUgQUNDX1BUUl9GUF9TRUcoeCkgICBfRlBfU0VHKHgpCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NfUFRSX0ZQX1NFRyh4KSAgICgoKGNvbnN0IHVuc2lnbmVkIF9fZmFyKikmKHgpKVsxXSkKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKE1LX0ZQKQorIyAgICBkZWZpbmUgQUNDX1BUUl9NS19GUChzLG8pICBNS19GUChzLG8pCisjICBlbGlmIGRlZmluZWQoX01LX0ZQKQorIyAgICBkZWZpbmUgQUNDX1BUUl9NS19GUChzLG8pICBfTUtfRlAocyxvKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDX1BUUl9NS19GUChzLG8pICAoKHZvaWQgX19mYXIqKSgoKHVuc2lnbmVkIGxvbmcpKHMpPDwxNikrKHVuc2lnbmVkKShvKSkpCisjICBlbmRpZgorIyAgaWYgMAorIyAgICB1bmRlZiBBQ0NfUFRSX0ZQX09GRgorIyAgICB1bmRlZiBBQ0NfUFRSX0ZQX1NFRworIyAgICB1bmRlZiBBQ0NfUFRSX01LX0ZQCisjICAgIGRlZmluZSBBQ0NfUFRSX0ZQX09GRih4KSAgICgoKGNvbnN0IHVuc2lnbmVkIF9fZmFyKikmKHgpKVswXSkKKyMgICAgZGVmaW5lIEFDQ19QVFJfRlBfU0VHKHgpICAgKCgoY29uc3QgdW5zaWduZWQgX19mYXIqKSYoeCkpWzFdKQorIyAgICBkZWZpbmUgQUNDX1BUUl9NS19GUChzLG8pICAoKHZvaWQgX19mYXIqKSgoKHVuc2lnbmVkIGxvbmcpKHMpPDwxNikrKHVuc2lnbmVkKShvKSkpCisjICBlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NfTElCX0gpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NfTElCX0gKKyNpZm5kZWYgX19BQ0NfTElCX0hfSU5DTFVERUQKKyNkZWZpbmUgX19BQ0NfTElCX0hfSU5DTFVERUQgMQorI2lmICFkZWZpbmVkKF9fQUNDTElCX0ZVTkNOQU1FKQorIyAgZGVmaW5lIF9fQUNDTElCX0ZVTkNOQU1FKGYpICBmCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NMSUJfRVhURVJOKQorIyAgZGVmaW5lIEFDQ0xJQl9FWFRFUk4ocixmKSAgICAgICAgICAgICAgICBleHRlcm4gciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDTElCX0VYVEVSTl9OT0lOTElORSkKKyMgIGlmIGRlZmluZWQoX19hY2Nfbm9pbmxpbmUpCisjICAgIGRlZmluZSBBQ0NMSUJfRVhURVJOX05PSU5MSU5FKHIsZikgICAgIGV4dGVybiBfX2FjY19ub2lubGluZSByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NMSUJfRVhURVJOX05PSU5MSU5FKHIsZikgICAgIGV4dGVybiByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjICBlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoX19BQ0NMSUJfQ09OU1RfQ0FTVF9SRVRVUk4pCisjaWYgMSAmJiAoQUNDX0NDX0dOVUMgfHwgQUNDX0NDX0xMVk0gfHwgQUNDX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX0FDQ0xJQl9DT05TVF9DQVNUX1JFVFVSTih0eXBlLHZhcikgcmV0dXJuICh0eXBlKSAoYWNjX3VpbnRwdHJfdCkgKHZhcik7CisjZWxpZiAoQUNDX0NDX0dOVUMgfHwgQUNDX0NDX0xMVk0gfHwgQUNDX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX0FDQ0xJQl9DT05TVF9DQVNUX1JFVFVSTih0eXBlLHZhcikgXAorICAgICAgICB7IHVuaW9uIHsgdHlwZSBhOyBjb25zdCB0eXBlIGI7IH0gdTsgdS5iID0gKHZhcik7IHJldHVybiB1LmE7IH0KKyNlbHNlCisjICBkZWZpbmUgX19BQ0NMSUJfQ09OU1RfQ0FTVF9SRVRVUk4odHlwZSx2YXIpIHJldHVybiAodHlwZSkgKHZhcik7CisjZW5kaWYKKyNlbmRpZgorI2lmIChBQ0NfT1NfV0lONjQpCisjICBkZWZpbmUgYWNjbGliX2hhbmRsZV90ICAgICAgIGFjY19pbnQ2NGxfdAorIyAgZGVmaW5lIGFjY2xpYl91aGFuZGxlX3QgICAgICBhY2NfdWludDY0bF90CisjZWxpZiAoQUNDX0FSQ0hfSTM4NiAmJiBBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMzAwKSkKKyAgIHR5cGVkZWYgX193NjQgbG9uZyAgICAgICAgICAgYWNjbGliX2hhbmRsZV90OworICAgdHlwZWRlZiBfX3c2NCB1bnNpZ25lZCBsb25nICBhY2NsaWJfdWhhbmRsZV90OworIyAgZGVmaW5lIGFjY2xpYl9oYW5kbGVfdCAgICAgICBhY2NsaWJfaGFuZGxlX3QKKyMgIGRlZmluZSBhY2NsaWJfdWhhbmRsZV90ICAgICAgYWNjbGliX3VoYW5kbGVfdAorI2Vsc2UKKyMgIGRlZmluZSBhY2NsaWJfaGFuZGxlX3QgICAgICAgbG9uZworIyAgZGVmaW5lIGFjY2xpYl91aGFuZGxlX3QgICAgICB1bnNpZ25lZCBsb25nCisjZW5kaWYKKyNpZiAwCitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2FzY2lpX2RpZ2l0KSAgIChpbnQpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19hc2NpaV9pc2xvd2VyKSAoaW50KTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfYXNjaWlfaXN1cHBlcikgKGludCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2FzY2lpX3RvbG93ZXIpIChpbnQpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19hc2NpaV90b3VwcGVyKSAoaW50KTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfYXNjaWlfdXRvbG93ZXIpIChpbnQpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19hc2NpaV91dG91cHBlcikgKGludCk7CisjZW5kaWYKKyNkZWZpbmUgYWNjX2FzY2lpX2lzZGlnaXQoYykgICAgKCgodW5zaWduZWQpKGMpIC0gNDgpIDwgMTApCisjZGVmaW5lIGFjY19hc2NpaV9pc2xvd2VyKGMpICAgICgoKHVuc2lnbmVkKShjKSAtIDk3KSA8IDI2KQorI2RlZmluZSBhY2NfYXNjaWlfaXN1cHBlcihjKSAgICAoKCh1bnNpZ25lZCkoYykgLSA2NSkgPCAyNikKKyNkZWZpbmUgYWNjX2FzY2lpX3RvbG93ZXIoYykgICAgKChpbnQpKGMpICsgKGFjY19hc2NpaV9pc3VwcGVyKGMpIDw8IDUpKQorI2RlZmluZSBhY2NfYXNjaWlfdG91cHBlcihjKSAgICAoKGludCkoYykgLSAoYWNjX2FzY2lpX2lzbG93ZXIoYykgPDwgNSkpCisjZGVmaW5lIGFjY19hc2NpaV91dG9sb3dlcihjKSAgIGFjY19hc2NpaV90b2xvd2VyKCh1bnNpZ25lZCBjaGFyKShjKSkKKyNkZWZpbmUgYWNjX2FzY2lpX3V0b3VwcGVyKGMpICAgYWNjX2FzY2lpX3RvdXBwZXIoKHVuc2lnbmVkIGNoYXIpKGMpKQorI2lmbmRlZiBhY2NfaHNpemVfdAorI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyMgIGRlZmluZSBhY2NfaHNpemVfdCAgIHVuc2lnbmVkIGxvbmcKKyMgIGRlZmluZSBhY2NfaHZvaWRfcCAgIHZvaWQgX19odWdlICoKKyMgIGRlZmluZSBhY2NfaGNoYXJfcCAgIGNoYXIgX19odWdlICoKKyMgIGRlZmluZSBhY2NfaGNoYXJfcHAgIGNoYXIgX19odWdlICogX19odWdlICoKKyMgIGRlZmluZSBhY2NfaGJ5dGVfcCAgIHVuc2lnbmVkIGNoYXIgX19odWdlICoKKyNlbHNlCisjICBkZWZpbmUgYWNjX2hzaXplX3QgICBzaXplX3QKKyMgIGRlZmluZSBhY2NfaHZvaWRfcCAgIHZvaWQgKgorIyAgZGVmaW5lIGFjY19oY2hhcl9wICAgY2hhciAqCisjICBkZWZpbmUgYWNjX2hjaGFyX3BwICBjaGFyICoqCisjICBkZWZpbmUgYWNjX2hieXRlX3AgICB1bnNpZ25lZCBjaGFyICoKKyNlbmRpZgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKGFjY19odm9pZF9wLCBhY2NfaGFsbG9jKSAoYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTih2b2lkLCBhY2NfaGZyZWUpIChhY2NfaHZvaWRfcCk7CisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfT1MyMTYpCitBQ0NMSUJfRVhURVJOKHZvaWQgX19mYXIqLCBhY2NfZG9zX2FsbG9jKSAodW5zaWduZWQgbG9uZyk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2Rvc19mcmVlKSAodm9pZCBfX2ZhciopOworI2VuZGlmCitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2htZW1jbXApIChjb25zdCBhY2NfaHZvaWRfcCwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2h2b2lkX3AsIGFjY19obWVtY3B5KSAoYWNjX2h2b2lkX3AsIGNvbnN0IGFjY19odm9pZF9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGFjY19odm9pZF9wLCBhY2NfaG1lbW1vdmUpIChhY2NfaHZvaWRfcCwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2h2b2lkX3AsIGFjY19obWVtc2V0KSAoYWNjX2h2b2lkX3AsIGludCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaHNpemVfdCwgYWNjX2hzdHJsZW4pIChjb25zdCBhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2hzdHJjbXApIChjb25zdCBhY2NfaGNoYXJfcCwgY29uc3QgYWNjX2hjaGFyX3ApOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19oc3RybmNtcCkoY29uc3QgYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2FzY2lpX2hzdHJpY21wKSAoY29uc3QgYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfYXNjaWlfaHN0cm5pY21wKShjb25zdCBhY2NfaGNoYXJfcCwgY29uc3QgYWNjX2hjaGFyX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfYXNjaWlfaG1lbWljbXApIChjb25zdCBhY2NfaHZvaWRfcCwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19oc3Ryc3RyKSAoY29uc3QgYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19hc2NpaV9oc3RyaXN0cikgKGNvbnN0IGFjY19oY2hhcl9wLCBjb25zdCBhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGFjY19odm9pZF9wLCBhY2NfaG1lbW1lbSkgKGNvbnN0IGFjY19odm9pZF9wLCBhY2NfaHNpemVfdCwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2h2b2lkX3AsIGFjY19hc2NpaV9obWVtaW1lbSkgKGNvbnN0IGFjY19odm9pZF9wLCBhY2NfaHNpemVfdCwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19oc3RyY3B5KSAoYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19oc3RyY2F0KSAoYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hzaXplX3QsIGFjY19oc3RybGNweSkgKGFjY19oY2hhcl9wLCBjb25zdCBhY2NfaGNoYXJfcCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaHNpemVfdCwgYWNjX2hzdHJsY2F0KSAoYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2hzdHJzY3B5KSAoYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX2hzdHJzY2F0KSAoYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGFjY19oY2hhcl9wLCBhY2NfaHN0cmNjcHkpIChhY2NfaGNoYXJfcCwgY29uc3QgYWNjX2hjaGFyX3AsIGludCk7CitBQ0NMSUJfRVhURVJOKGFjY19odm9pZF9wLCBhY2NfaG1lbWNjcHkpIChhY2NfaHZvaWRfcCwgY29uc3QgYWNjX2h2b2lkX3AsIGludCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaGNoYXJfcCwgYWNjX2hzdHJjaHIpICAoY29uc3QgYWNjX2hjaGFyX3AsIGludCk7CitBQ0NMSUJfRVhURVJOKGFjY19oY2hhcl9wLCBhY2NfaHN0cnJjaHIpIChjb25zdCBhY2NfaGNoYXJfcCwgaW50KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19hc2NpaV9oc3RyaWNocikgKGNvbnN0IGFjY19oY2hhcl9wLCBpbnQpOworQUNDTElCX0VYVEVSTihhY2NfaGNoYXJfcCwgYWNjX2FzY2lpX2hzdHJyaWNocikgKGNvbnN0IGFjY19oY2hhcl9wLCBpbnQpOworQUNDTElCX0VYVEVSTihhY2NfaHZvaWRfcCwgYWNjX2htZW1jaHIpICAoY29uc3QgYWNjX2h2b2lkX3AsIGludCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaHZvaWRfcCwgYWNjX2htZW1yY2hyKSAoY29uc3QgYWNjX2h2b2lkX3AsIGludCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaHZvaWRfcCwgYWNjX2FzY2lpX2htZW1pY2hyKSAoY29uc3QgYWNjX2h2b2lkX3AsIGludCwgYWNjX2hzaXplX3QpOworQUNDTElCX0VYVEVSTihhY2NfaHZvaWRfcCwgYWNjX2FzY2lpX2htZW1yaWNocikgKGNvbnN0IGFjY19odm9pZF9wLCBpbnQsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hzaXplX3QsIGFjY19oc3Ryc3BuKSAgKGNvbnN0IGFjY19oY2hhcl9wLCBjb25zdCBhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGFjY19oc2l6ZV90LCBhY2NfaHN0cnJzcG4pIChjb25zdCBhY2NfaGNoYXJfcCwgY29uc3QgYWNjX2hjaGFyX3ApOworQUNDTElCX0VYVEVSTihhY2NfaHNpemVfdCwgYWNjX2hzdHJjc3BuKSAgKGNvbnN0IGFjY19oY2hhcl9wLCBjb25zdCBhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGFjY19oc2l6ZV90LCBhY2NfaHN0cnJjc3BuKSAoY29uc3QgYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19oc3RycGJyaykgIChjb25zdCBhY2NfaGNoYXJfcCwgY29uc3QgYWNjX2hjaGFyX3ApOworQUNDTElCX0VYVEVSTihhY2NfaGNoYXJfcCwgYWNjX2hzdHJycGJyaykgKGNvbnN0IGFjY19oY2hhcl9wLCBjb25zdCBhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGFjY19oY2hhcl9wLCBhY2NfaHN0cnNlcCkgIChhY2NfaGNoYXJfcHAsIGNvbnN0IGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hjaGFyX3AsIGFjY19oc3RycnNlcCkgKGFjY19oY2hhcl9wcCwgY29uc3QgYWNjX2hjaGFyX3ApOworQUNDTElCX0VYVEVSTihhY2NfaGNoYXJfcCwgYWNjX2FzY2lpX2hzdHJsd3IpIChhY2NfaGNoYXJfcCk7CitBQ0NMSUJfRVhURVJOKGFjY19oY2hhcl9wLCBhY2NfYXNjaWlfaHN0cnVwcikgKGFjY19oY2hhcl9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2h2b2lkX3AsIGFjY19hc2NpaV9obWVtbHdyKSAoYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2h2b2lkX3AsIGFjY19hc2NpaV9obWVtdXByKSAoYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX2hzaXplX3QsIGFjY19oZnJlYWQpICh2b2lkICosIGFjY19odm9pZF9wLCBhY2NfaHNpemVfdCk7CitBQ0NMSUJfRVhURVJOKGFjY19oc2l6ZV90LCBhY2NfaGZ3cml0ZSkgKHZvaWQgKiwgY29uc3QgYWNjX2h2b2lkX3AsIGFjY19oc2l6ZV90KTsKKyNpZiAoQUNDX0hBVkVfTU1fSFVHRV9QVFIpCitBQ0NMSUJfRVhURVJOKGxvbmcsIGFjY19ocmVhZCkgKGludCwgYWNjX2h2b2lkX3AsIGxvbmcpOworQUNDTElCX0VYVEVSTihsb25nLCBhY2NfaHdyaXRlKSAoaW50LCBjb25zdCBhY2NfaHZvaWRfcCwgbG9uZyk7CisjZW5kaWYKK0FDQ0xJQl9FWFRFUk4obG9uZywgYWNjX3NhZmVfaHJlYWQpIChpbnQsIGFjY19odm9pZF9wLCBsb25nKTsKK0FDQ0xJQl9FWFRFUk4obG9uZywgYWNjX3NhZmVfaHdyaXRlKSAoaW50LCBjb25zdCBhY2NfaHZvaWRfcCwgbG9uZyk7CitBQ0NMSUJfRVhURVJOKHVuc2lnbmVkLCBhY2NfdWFfZ2V0X2JlMTYpIChjb25zdCBhY2NfaHZvaWRfcCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50MzJsX3QsIGFjY191YV9nZXRfYmUyNCkgKGNvbnN0IGFjY19odm9pZF9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQzMmxfdCwgYWNjX3VhX2dldF9iZTMyKSAoY29uc3QgYWNjX2h2b2lkX3ApOworQUNDTElCX0VYVEVSTih2b2lkLCBhY2NfdWFfc2V0X2JlMTYpIChhY2NfaHZvaWRfcCwgdW5zaWduZWQpOworQUNDTElCX0VYVEVSTih2b2lkLCBhY2NfdWFfc2V0X2JlMjQpIChhY2NfaHZvaWRfcCwgYWNjX3VpbnQzMmxfdCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY191YV9zZXRfYmUzMikgKGFjY19odm9pZF9wLCBhY2NfdWludDMybF90KTsKK0FDQ0xJQl9FWFRFUk4odW5zaWduZWQsIGFjY191YV9nZXRfbGUxNikgKGNvbnN0IGFjY19odm9pZF9wKTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQzMmxfdCwgYWNjX3VhX2dldF9sZTI0KSAoY29uc3QgYWNjX2h2b2lkX3ApOworQUNDTElCX0VYVEVSTihhY2NfdWludDMybF90LCBhY2NfdWFfZ2V0X2xlMzIpIChjb25zdCBhY2NfaHZvaWRfcCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY191YV9zZXRfbGUxNikgKGFjY19odm9pZF9wLCB1bnNpZ25lZCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY191YV9zZXRfbGUyNCkgKGFjY19odm9pZF9wLCBhY2NfdWludDMybF90KTsKK0FDQ0xJQl9FWFRFUk4odm9pZCwgYWNjX3VhX3NldF9sZTMyKSAoYWNjX2h2b2lkX3AsIGFjY191aW50MzJsX3QpOworI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX0VYVEVSTihhY2NfdWludDY0bF90LCBhY2NfdWFfZ2V0X2JlNjQpIChjb25zdCBhY2NfaHZvaWRfcCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY191YV9zZXRfYmU2NCkgKGFjY19odm9pZF9wLCBhY2NfdWludDY0bF90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQ2NGxfdCwgYWNjX3VhX2dldF9sZTY0KSAoY29uc3QgYWNjX2h2b2lkX3ApOworQUNDTElCX0VYVEVSTih2b2lkLCBhY2NfdWFfc2V0X2xlNjQpIChhY2NfaHZvaWRfcCwgYWNjX3VpbnQ2NGxfdCk7CisjZW5kaWYKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoc2hvcnQsIGFjY192Z2V0X3Nob3J0KSAoc2hvcnQsIGludCk7CitBQ0NMSUJfRVhURVJOX05PSU5MSU5FKGludCwgYWNjX3ZnZXRfaW50KSAoaW50LCBpbnQpOworQUNDTElCX0VYVEVSTl9OT0lOTElORShsb25nLCBhY2NfdmdldF9sb25nKSAobG9uZywgaW50KTsKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoYWNjX2ludDY0bF90LCBhY2NfdmdldF9hY2NfaW50NjRsX3QpIChhY2NfaW50NjRsX3QsIGludCk7CisjZW5kaWYKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoYWNjX2hzaXplX3QsIGFjY192Z2V0X2FjY19oc2l6ZV90KSAoYWNjX2hzaXplX3QsIGludCk7CisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19GTE9BVCkKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoZmxvYXQsIGFjY192Z2V0X2Zsb2F0KSAoZmxvYXQsIGludCk7CisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0RPVUJMRSkKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoZG91YmxlLCBhY2NfdmdldF9kb3VibGUpIChkb3VibGUsIGludCk7CisjZW5kaWYKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoYWNjX2h2b2lkX3AsIGFjY192Z2V0X2FjY19odm9pZF9wKSAoYWNjX2h2b2lkX3AsIGludCk7CitBQ0NMSUJfRVhURVJOX05PSU5MSU5FKGNvbnN0IGFjY19odm9pZF9wLCBhY2NfdmdldF9hY2NfaHZvaWRfY3ApIChjb25zdCBhY2NfaHZvaWRfcCwgaW50KTsKKyNpZiAhZGVmaW5lZChBQ0NfRk5fUEFUSF9NQVgpCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfV0lOMTYpCisjICBkZWZpbmUgQUNDX0ZOX1BBVEhfTUFYICAgMTQzCisjZWxpZiAoQUNDX09TX0RPUzMyIHx8IEFDQ19PU19PUzIgfHwgQUNDX09TX09TMjE2IHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjICBkZWZpbmUgQUNDX0ZOX1BBVEhfTUFYICAgMjU5CisjZWxpZiAoQUNDX09TX1RPUykKKyMgIGRlZmluZSBBQ0NfRk5fUEFUSF9NQVggICAyNTkKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0ZOX1BBVEhfTUFYKQorIyAgZGVmaW5lIEFDQ19GTl9QQVRIX01BWCAgIDEwMjMKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19GTl9OQU1FX01BWCkKKyNpZiAoQUNDX09TX0RPUzE2IHx8IEFDQ19PU19XSU4xNikKKyMgIGRlZmluZSBBQ0NfRk5fTkFNRV9NQVggICAxMgorI2VsaWYgKEFDQ19BUkNIX002OEsgJiYgQUNDX09TX1RPUyAmJiAoQUNDX0NDX1BVUkVDIHx8IEFDQ19DQ19UVVJCT0MpKQorIyAgZGVmaW5lIEFDQ19GTl9OQU1FX01BWCAgIDEyCisjZWxpZiAoQUNDX09TX0RPUzMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fREpHUFBfXykKKyNlbGlmIChBQ0NfT1NfRE9TMzIpCisjICBkZWZpbmUgQUNDX0ZOX05BTUVfTUFYICAgMTIKKyNlbmRpZgorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDX0ZOX05BTUVfTUFYKQorIyAgZGVmaW5lIEFDQ19GTl9OQU1FX01BWCAgIEFDQ19GTl9QQVRIX01BWAorI2VuZGlmCisjZGVmaW5lIEFDQ19GTk1BVENIX05PRVNDQVBFICAgICAgICAxCisjZGVmaW5lIEFDQ19GTk1BVENIX1BBVEhOQU1FICAgICAgICAyCisjZGVmaW5lIEFDQ19GTk1BVENIX1BBVEhTVEFSICAgICAgICA0CisjZGVmaW5lIEFDQ19GTk1BVENIX1BFUklPRCAgICAgICAgICA4CisjZGVmaW5lIEFDQ19GTk1BVENIX0FTQ0lJX0NBU0VGT0xEICAxNgorQUNDTElCX0VYVEVSTihpbnQsIGFjY19mbm1hdGNoKSAoY29uc3QgYWNjX2hjaGFyX3AsIGNvbnN0IGFjY19oY2hhcl9wLCBpbnQpOworI3VuZGVmIF9fQUNDTElCX1VTRV9PUEVORElSCisjaWYgKEhBVkVfRElSRU5UX0ggfHwgQUNDX0NDX1dBVENPTUMpCisjICBkZWZpbmUgX19BQ0NMSUJfVVNFX09QRU5ESVIgMQorIyAgaWYgKEFDQ19PU19ET1MzMiAmJiBkZWZpbmVkKF9fQk9STEFORENfXykpCisjICBlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19ESkdQUF9fKQorIyAgZWxpZiAoQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYpCisjICBlbGlmIChBQ0NfQVJDSF9NNjhLICYmIEFDQ19PU19UT1MgJiYgQUNDX0NDX0dOVUMpCisjICBlbGlmIChBQ0NfT1NfV0lOMzIgJiYgIWRlZmluZWQoQUNDX0hBVkVfV0lORE9XU19IKSkKKyMgIGVsaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1RPUyB8fCBBQ0NfT1NfV0lOMTYgfHwgQUNDX09TX1dJTjMyIHx8IEFDQ19PU19XSU42NCkKKyMgICAgdW5kZWYgX19BQ0NMSUJfVVNFX09QRU5ESVIKKyMgIGVuZGlmCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0Cit7CisjaWYgZGVmaW5lZChfX0FDQ0xJQl9VU0VfT1BFTkRJUikKKyAgICB2b2lkKiB1X2RpcnA7CisjIGlmIChBQ0NfQ0NfV0FUQ09NQykKKyAgICB1bnNpZ25lZCBzaG9ydCBmX3RpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgZl9kYXRlOworICAgIHVuc2lnbmVkIGxvbmcgZl9zaXplOworIyBlbmRpZgorICAgIGNoYXIgZl9uYW1lW0FDQ19GTl9OQU1FX01BWCsxXTsKKyNlbGlmIChBQ0NfT1NfV0lOMzIgfHwgQUNDX09TX1dJTjY0KQorICAgIGFjY2xpYl9oYW5kbGVfdCB1X2hhbmRsZTsKKyAgICB1bnNpZ25lZCBmX2F0dHI7CisgICAgdW5zaWduZWQgZl9zaXplX2xvdzsKKyAgICB1bnNpZ25lZCBmX3NpemVfaGlnaDsKKyAgICBjaGFyIGZfbmFtZVtBQ0NfRk5fTkFNRV9NQVgrMV07CisjZWxpZiAoQUNDX09TX0RPUzE2IHx8IEFDQ19PU19ET1MzMiB8fCBBQ0NfT1NfVE9TIHx8IEFDQ19PU19XSU4xNikKKyAgICBjaGFyIHVfZHRhWzIxXTsKKyAgICB1bnNpZ25lZCBjaGFyIGZfYXR0cjsKKyAgICB1bnNpZ25lZCBzaG9ydCBmX3RpbWU7CisgICAgdW5zaWduZWQgc2hvcnQgZl9kYXRlOworICAgIHVuc2lnbmVkIHNob3J0IGZfc2l6ZV9sb3c7CisgICAgdW5zaWduZWQgc2hvcnQgZl9zaXplX2hpZ2g7CisgICAgY2hhciBmX25hbWVbQUNDX0ZOX05BTUVfTUFYKzFdOworICAgIGNoYXIgdV9kaXJwOworI2Vsc2UKKyAgICB2b2lkKiB1X2RpcnA7CisgICAgY2hhciBmX25hbWVbQUNDX0ZOX05BTUVfTUFYKzFdOworI2VuZGlmCit9IGFjY19kaXJfdDsKKyNpZm5kZWYgYWNjX2Rpcl9wCisjZGVmaW5lIGFjY19kaXJfcCBhY2NfZGlyX3QgKgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKGludCwgYWNjX29wZW5kaXIpICAoYWNjX2Rpcl9wLCBjb25zdCBjaGFyKik7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX3JlYWRkaXIpICAoYWNjX2Rpcl9wKTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfY2xvc2VkaXIpIChhY2NfZGlyX3ApOworI2lmIChBQ0NfQ0NfR05VQykgJiYgKGRlZmluZWQoX19DWUdXSU5fXykgfHwgZGVmaW5lZChfX01JTkdXMzJfXykpCisjICBkZWZpbmUgYWNjX2FsbG9jYSh4KSAgICAgX19idWlsdGluX2FsbG9jYSgoeCkpCisjZWxpZiAoQUNDX0NDX0dOVUMpICYmIChBQ0NfT1NfQ09OU09MRV9QUzIpCisjICBkZWZpbmUgYWNjX2FsbG9jYSh4KSAgICAgX19idWlsdGluX2FsbG9jYSgoeCkpCisjZWxpZiAoQUNDX0NDX0JPUkxBTkRDIHx8IEFDQ19DQ19MQ0MpICYmIGRlZmluZWQoX19saW51eF9fKQorI2VsaWYgKEhBVkVfQUxMT0NBKQorIyAgZGVmaW5lIGFjY19hbGxvY2EoeCkgICAgICgodm9pZCAqKSAoYWxsb2NhKCh4KSkpKQorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MzMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX0RKR1BQX18pCisjICBkZWZpbmUgYWNjX3N0YWNrYXZhaWwoKSAgc3RhY2thdmFpbCgpCisjZWxpZiAoQUNDX0FSQ0hfSTA4NiAmJiBBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA+PSAweDA0MTApKQorIyAgZGVmaW5lIGFjY19zdGFja2F2YWlsKCkgIHN0YWNrYXZhaWwoKQorI2VsaWYgKEFDQ19BUkNIX0kwODYgJiYgQUNDX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPj0gMHgwNDAwKSkKKyMgIGlmIChBQ0NfT1NfV0lOMTYpICYmIChBQ0NfTU1fVElOWSB8fCBBQ0NfTU1fU01BTEwgfHwgQUNDX01NX01FRElVTSkKKyMgIGVsc2UKKyMgICAgZGVmaW5lIGFjY19zdGFja2F2YWlsKCkgIHN0YWNrYXZhaWwoKQorIyAgZW5kaWYKKyNlbGlmICgoQUNDX0FSQ0hfSTA4NiB8fCBBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfU1lNQU5URUNDKSkKKyMgIGRlZmluZSBhY2Nfc3RhY2thdmFpbCgpICBzdGFja2F2YWlsKCkKKyNlbGlmICgoQUNDX0FSQ0hfSTA4NikgJiYgQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gNzAwKSkKKyMgIGRlZmluZSBhY2Nfc3RhY2thdmFpbCgpICBfc3RhY2thdmFpbCgpCisjZWxpZiAoKEFDQ19BUkNIX0kwODYpICYmIEFDQ19DQ19NU0MpCisjICBkZWZpbmUgYWNjX3N0YWNrYXZhaWwoKSAgc3RhY2thdmFpbCgpCisjZWxpZiAoKEFDQ19BUkNIX0kwODYgfHwgQUNDX0FSQ0hfSTM4NikgJiYgQUNDX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA+PSAweDA0NTApKQorIyAgZGVmaW5lIGFjY19zdGFja2F2YWlsKCkgIHN0YWNrYXZhaWwoKQorI2VsaWYgKEFDQ19BUkNIX0kwODYgJiYgQUNDX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA+PSAweDA0MDApKQorICAgQUNDX0VYVEVSTl9DIHNpemVfdCBfX2NkZWNsIHN0YWNrYXZhaWwodm9pZCk7CisjICBkZWZpbmUgYWNjX3N0YWNrYXZhaWwoKSAgc3RhY2thdmFpbCgpCisjZWxpZiAoKEFDQ19BUkNIX0kwODYgfHwgQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19DQ19XQVRDT01DKSkKKyMgIGRlZmluZSBhY2Nfc3RhY2thdmFpbCgpICBzdGFja2F2YWlsKCkKKyNlbGlmIChBQ0NfQVJDSF9JMDg2ICYmIEFDQ19DQ19aT1JURUNIQykKKyMgIGRlZmluZSBhY2Nfc3RhY2thdmFpbCgpICBfY2hrc3RhY2soKQorI2VuZGlmCitBQ0NMSUJfRVhURVJOKGFjY2xpYl9oYW5kbGVfdCwgYWNjX2dldF9vc2ZoYW5kbGUpIChpbnQpOworQUNDTElCX0VYVEVSTihjb25zdCBjaGFyICosIGFjY19nZXRlbnYpIChjb25zdCBjaGFyICopOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19pc2F0dHkpIChpbnQpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19ta2RpcikgKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX3JtZGlyKSAoY29uc3QgY2hhciopOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19yZXNwb25zZSkgKGludCosIGNoYXIqKiopOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19zZXRfYmlubW9kZSkgKGludCwgaW50KTsKKyNpZiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKK0FDQ0xJQl9FWFRFUk4oYWNjX2ludDMyZV90LCBhY2NfbXVsZGl2MzJzKSAoYWNjX2ludDMyZV90LCBhY2NfaW50MzJlX3QsIGFjY19pbnQzMmVfdCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50MzJlX3QsIGFjY19tdWxkaXYzMnUpIChhY2NfdWludDMyZV90LCBhY2NfdWludDMyZV90LCBhY2NfdWludDMyZV90KTsKKyNlbmRpZgorQUNDTElCX0VYVEVSTih2b2lkLCBhY2Nfd2lsZGFyZ3YpIChpbnQqLCBjaGFyKioqKTsKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUodm9pZCwgYWNjX2RlYnVnX2JyZWFrKSAodm9pZCk7CitBQ0NMSUJfRVhURVJOX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19ub3ApICh2b2lkKTsKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoaW50LCBhY2NfZGVidWdfYWxpZ25fY2hlY2tfcXVlcnkpICh2b2lkKTsKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUoaW50LCBhY2NfZGVidWdfYWxpZ25fY2hlY2tfZW5hYmxlKSAoaW50KTsKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUodW5zaWduZWQsIGFjY19kZWJ1Z19ydW5uaW5nX29uX3FlbXUpICh2b2lkKTsKK0FDQ0xJQl9FWFRFUk5fTk9JTkxJTkUodW5zaWduZWQsIGFjY19kZWJ1Z19ydW5uaW5nX29uX3ZhbGdyaW5kKSAodm9pZCk7CisjaWYgIWRlZmluZWQoYWNjX2ludDY0bF90KSB8fCBkZWZpbmVkKEFDQ19DRkdfTk9fRE9VQkxFKQorIyAgdW5kZWYgX19BQ0NMSUJfUENMT0NLX1VTRV9SRFRTQworIyAgdW5kZWYgX19BQ0NMSUJfUENMT0NLX1VTRV9QRVJGQ1RSCisjICB1bmRlZiBfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1JEVFNDCisjICB1bmRlZiBfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1BFUkZDVFIKKyNlbHNlCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9pZCogaDsKKyAgICBpbnQgbW9kZTsKKyAgICBkb3VibGUgdHNjX3RvX3NlY29uZHM7CisgICAgdW5zaWduZWQgY3B1X3R5cGUsIGNwdV9mZWF0dXJlcywgY3B1X2toeiwgY3B1X25yY3RyczsKKyAgICBjb25zdCBjaGFyKiBjcHVfbmFtZTsKK30gYWNjX3BlcmZjdHJfaGFuZGxlX3Q7Cit0eXBlZGVmIHN0cnVjdCB7CisgICAgYWNjX3VpbnQ2NGxfdCB0c2M7CisjaWYgKEFDQ19PU19QT1NJWF9MSU5VWCkKKyAgICBhY2NfdWludDY0bF90IHBtY1sxOF07CisjZWxzZQorICAgIGFjY191aW50NjRsX3QgcG1jWzFdOworI2VuZGlmCit9IGFjY19wZXJmY3RyX2Nsb2NrX3Q7CisjaWZuZGVmIGFjY19wZXJmY3RyX2hhbmRsZV9wCisjZGVmaW5lIGFjY19wZXJmY3RyX2hhbmRsZV9wIGFjY19wZXJmY3RyX2hhbmRsZV90ICoKKyNlbmRpZgorI2lmbmRlZiBhY2NfcGVyZmN0cl9jbG9ja19wCisjZGVmaW5lIGFjY19wZXJmY3RyX2Nsb2NrX3AgYWNjX3BlcmZjdHJfY2xvY2tfdCAqCisjZW5kaWYKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfcGVyZmN0cl9vcGVuKSAgKGFjY19wZXJmY3RyX2hhbmRsZV9wKTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfcGVyZmN0cl9jbG9zZSkgKGFjY19wZXJmY3RyX2hhbmRsZV9wKTsKK0FDQ0xJQl9FWFRFUk4odm9pZCwgYWNjX3BlcmZjdHJfcmVhZCkgKGFjY19wZXJmY3RyX2hhbmRsZV9wLCBhY2NfcGVyZmN0cl9jbG9ja19wKTsKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0RPVUJMRSkKK0FDQ0xJQl9FWFRFUk4oZG91YmxlLCBhY2NfcGVyZmN0cl9nZXRfZWxhcHNlZCkgKGFjY19wZXJmY3RyX2hhbmRsZV9wLCBjb25zdCBhY2NfcGVyZmN0cl9jbG9ja19wLCBjb25zdCBhY2NfcGVyZmN0cl9jbG9ja19wKTsKK0FDQ0xJQl9FWFRFUk4oZG91YmxlLCBhY2NfcGVyZmN0cl9nZXRfZWxhcHNlZF90c2MpIChhY2NfcGVyZmN0cl9oYW5kbGVfcCwgYWNjX3VpbnQ2NGxfdCk7CisjZW5kaWYKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfcGVyZmN0cl9mbHVzaF9jcHVfY2FjaGUpIChhY2NfcGVyZmN0cl9oYW5kbGVfcCwgdW5zaWduZWQpOworI2VuZGlmCisjaWYgZGVmaW5lZChhY2NfaW50MzJlX3QpCitBQ0NMSUJfRVhURVJOKGludCwgYWNjX3RzY19yZWFkKSAoYWNjX3VpbnQzMmVfdCopOworI2Vsc2UKKyMgIHVuZGVmIF9fQUNDTElCX1BDTE9DS19VU0VfUkRUU0MKKyMgIHVuZGVmIF9fQUNDTElCX1VDTE9DS19VU0VfUkRUU0MKKyNlbmRpZgorc3RydWN0IGFjY19wY2xvY2tfaGFuZGxlX3Q7CitzdHJ1Y3QgYWNjX3BjbG9ja190OwordHlwZWRlZiBzdHJ1Y3QgYWNjX3BjbG9ja19oYW5kbGVfdCBhY2NfcGNsb2NrX2hhbmRsZV90OwordHlwZWRlZiBzdHJ1Y3QgYWNjX3BjbG9ja190IGFjY19wY2xvY2tfdDsKKyNpZm5kZWYgYWNjX3BjbG9ja19oYW5kbGVfcAorI2RlZmluZSBhY2NfcGNsb2NrX2hhbmRsZV9wIGFjY19wY2xvY2tfaGFuZGxlX3QgKgorI2VuZGlmCisjaWZuZGVmIGFjY19wY2xvY2tfcAorI2RlZmluZSBhY2NfcGNsb2NrX3AgYWNjX3BjbG9ja190ICoKKyNlbmRpZgorI2RlZmluZSBBQ0NfUENMT0NLX1JFQUxUSU1FICAgICAgICAgICAgIDAKKyNkZWZpbmUgQUNDX1BDTE9DS19NT05PVE9OSUMgICAgICAgICAgICAxCisjZGVmaW5lIEFDQ19QQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEICAgMgorI2RlZmluZSBBQ0NfUENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEICAgIDMKKyNkZWZpbmUgQUNDX1BDTE9DS19SRUFMVElNRV9IUiAgICAgICAgICA0CisjZGVmaW5lIEFDQ19QQ0xPQ0tfTU9OT1RPTklDX0hSICAgICAgICAgNQorc3RydWN0IGFjY19wY2xvY2tfaGFuZGxlX3QgeworICAgIGFjY2xpYl9oYW5kbGVfdCBoOworICAgIGludCBtb2RlOworICAgIGNvbnN0IGNoYXIqIG5hbWU7CisgICAgaW50ICgqZ2V0dGltZSkgKGFjY19wY2xvY2tfaGFuZGxlX3AsIGFjY19wY2xvY2tfcCk7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgYWNjX3VpbnQ2NGxfdCB0aWNrc19iYXNlOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FDQ0xJQl9QQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgYWNjX3BlcmZjdHJfaGFuZGxlX3QgcGNoOworI2VuZGlmCit9Oworc3RydWN0IGFjY19wY2xvY2tfdCB7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgYWNjX2ludDY0bF90IHR2X3NlYzsKKyNlbHNlCisgICAgYWNjX2ludDMybF90IHR2X3NlY19oaWdoOworICAgIGFjY191aW50MzJsX3QgdHZfc2VjX2xvdzsKKyNlbmRpZgorICAgIGFjY191aW50MzJsX3QgdHZfbnNlYzsKK307CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX3BjbG9ja19vcGVuKSAgKGFjY19wY2xvY2tfaGFuZGxlX3AsIGludCk7CitBQ0NMSUJfRVhURVJOKGludCwgYWNjX3BjbG9ja19vcGVuX2RlZmF1bHQpIChhY2NfcGNsb2NrX2hhbmRsZV9wKTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfcGNsb2NrX2Nsb3NlKSAoYWNjX3BjbG9ja19oYW5kbGVfcCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY19wY2xvY2tfcmVhZCkgKGFjY19wY2xvY2tfaGFuZGxlX3AsIGFjY19wY2xvY2tfcCk7CisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19ET1VCTEUpCitBQ0NMSUJfRVhURVJOKGRvdWJsZSwgYWNjX3BjbG9ja19nZXRfZWxhcHNlZCkgKGFjY19wY2xvY2tfaGFuZGxlX3AsIGNvbnN0IGFjY19wY2xvY2tfcCwgY29uc3QgYWNjX3BjbG9ja19wKTsKKyNlbmRpZgorQUNDTElCX0VYVEVSTihpbnQsIGFjY19wY2xvY2tfZmx1c2hfY3B1X2NhY2hlKSAoYWNjX3BjbG9ja19oYW5kbGVfcCwgdW5zaWduZWQpOworI2lmICFkZWZpbmVkKGFjY19pbnQ2NGxfdCkgfHwgZGVmaW5lZChBQ0NfQ0ZHX05PX0RPVUJMRSkKKyMgIHVuZGVmIF9fQUNDTElCX1VDTE9DS19VU0VfUVBDCisjZWxpZiAoQUNDX09TX0NZR1dJTiB8fCBBQ0NfT1NfRU1YIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpCisjICBkZWZpbmUgX19BQ0NMSUJfVUNMT0NLX1VTRV9RUEMgMQorI2Vsc2UKKyMgIHVuZGVmIF9fQUNDTElCX1VDTE9DS19VU0VfUVBDCisjZW5kaWYKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBhY2NsaWJfaGFuZGxlX3QgaDsKKyAgICBpbnQgbW9kZTsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworI2lmIGRlZmluZWQoX19BQ0NMSUJfVUNMT0NLX1VTRV9QRVJGQ1RSKQorICAgIGFjY19wZXJmY3RyX2hhbmRsZV90IHBjaDsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BQ0NMSUJfVUNMT0NLX1VTRV9RUEMpCisgICAgZG91YmxlIHFwZjsKKyNlbmRpZgorfSBhY2NfdWNsb2NrX2hhbmRsZV90OwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuaW9uIHsKKyAgICAgICAgYWNjX3VpbnQzMmxfdCB0MzI7CisjaWYgIShBQ0NfT1NfRE9TMTYgfHwgQUNDX09TX1dJTjE2KQorIyAgaWYgIWRlZmluZWQoQUNDX0NGR19OT19ET1VCTEUpCisgICAgICAgIGRvdWJsZSB0ZDsKKyMgIGVuZGlmCisjICBpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyAgICAgICAgYWNjX2ludDY0bF90IHQ2NDsKKyMgIGVuZGlmCisjZW5kaWYKKyAgICB9IHRpY2tzOworI2lmIGRlZmluZWQoX19BQ0NMSUJfVUNMT0NLX1VTRV9SRFRTQykKKyAgICBhY2NfdWludDY0bF90IHRzYzsKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BQ0NMSUJfVUNMT0NLX1VTRV9QRVJGQ1RSKQorICAgIGFjY19wZXJmY3RyX2Nsb2NrX3QgcGNjOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1FQQykKKyAgICBhY2NfaW50NjRsX3QgcXBjOworI2VuZGlmCit9IGFjY191Y2xvY2tfdDsKKyNpZm5kZWYgYWNjX3VjbG9ja19oYW5kbGVfcAorI2RlZmluZSBhY2NfdWNsb2NrX2hhbmRsZV9wIGFjY191Y2xvY2tfaGFuZGxlX3QgKgorI2VuZGlmCisjaWZuZGVmIGFjY191Y2xvY2tfcAorI2RlZmluZSBhY2NfdWNsb2NrX3AgYWNjX3VjbG9ja190ICoKKyNlbmRpZgorQUNDTElCX0VYVEVSTihpbnQsIGFjY191Y2xvY2tfb3BlbikgIChhY2NfdWNsb2NrX2hhbmRsZV9wKTsKK0FDQ0xJQl9FWFRFUk4oaW50LCBhY2NfdWNsb2NrX2Nsb3NlKSAoYWNjX3VjbG9ja19oYW5kbGVfcCk7CitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY191Y2xvY2tfcmVhZCkgKGFjY191Y2xvY2tfaGFuZGxlX3AsIGFjY191Y2xvY2tfcCk7CisjaWYgIWRlZmluZWQoQUNDX0NGR19OT19ET1VCTEUpCitBQ0NMSUJfRVhURVJOKGRvdWJsZSwgYWNjX3VjbG9ja19nZXRfZWxhcHNlZCkgKGFjY191Y2xvY2tfaGFuZGxlX3AsIGNvbnN0IGFjY191Y2xvY2tfcCwgY29uc3QgYWNjX3VjbG9ja19wKTsKKyNlbmRpZgorQUNDTElCX0VYVEVSTihpbnQsIGFjY191Y2xvY2tfZmx1c2hfY3B1X2NhY2hlKSAoYWNjX3VjbG9ja19oYW5kbGVfcCwgdW5zaWduZWQpOworc3RydWN0IGFjY19nZXRvcHRfdDsKK3R5cGVkZWYgc3RydWN0IGFjY19nZXRvcHRfdCBhY2NfZ2V0b3B0X3Q7CisjaWZuZGVmIGFjY19nZXRvcHRfcAorI2RlZmluZSBhY2NfZ2V0b3B0X3AgYWNjX2dldG9wdF90ICoKKyNlbmRpZgorc3RydWN0IGFjY19nZXRvcHRfbG9uZ29wdF90OwordHlwZWRlZiBzdHJ1Y3QgYWNjX2dldG9wdF9sb25nb3B0X3QgYWNjX2dldG9wdF9sb25nb3B0X3Q7CisjaWZuZGVmIGFjY19nZXRvcHRfbG9uZ29wdF9wCisjZGVmaW5lIGFjY19nZXRvcHRfbG9uZ29wdF9wIGFjY19nZXRvcHRfbG9uZ29wdF90ICoKKyNlbmRpZgorc3RydWN0IGFjY19nZXRvcHRfbG9uZ29wdF90IHsKKyAgICBjb25zdCBjaGFyKiBuYW1lOworICAgIGludCBoYXNfYXJnOworICAgIGludCogZmxhZzsKKyAgICBpbnQgdmFsOworfTsKK3N0cnVjdCBhY2NfZ2V0b3B0X3QgeworICAgIHZvaWQgKnVzZXI7CisgICAgY2hhciAqb3B0YXJnOworICAgIHZvaWQgKCpvcHRlcnIpKGFjY19nZXRvcHRfcCwgY29uc3QgY2hhciosIHZvaWQgKik7CisgICAgaW50IG9wdGluZDsKKyAgICBpbnQgb3B0b3B0OworICAgIGludCBlcnJjb3VudDsKKyAgICBjb25zdCBjaGFyKiBwcm9nbmFtZTsKKyAgICBpbnQgYXJnYzsgY2hhcioqIGFyZ3Y7CisgICAgaW50IGVvZjsgaW50IHNob3J0cG9zOworICAgIGludCBwZW5kaW5nX3JvdGF0ZV9maXJzdCwgcGVuZGluZ19yb3RhdGVfbWlkZGxlOworfTsKK2VudW0geyBBQ0NfR0VUT1BUX05PX0FSRywgQUNDX0dFVE9QVF9SRVFVSVJFRF9BUkcsIEFDQ19HRVRPUFRfT1BUSU9OQUxfQVJHLCBBQ0NfR0VUT1BUX0VYQUNUX0FSRyA9IDB4MTAgfTsKK2VudW0geyBBQ0NfR0VUT1BUX1BFUk1VVEUsIEFDQ19HRVRPUFRfUkVUVVJOX0lOX09SREVSLCBBQ0NfR0VUT1BUX1JFUVVJUkVfT1JERVIgfTsKK0FDQ0xJQl9FWFRFUk4odm9pZCwgYWNjX2dldG9wdF9pbml0KSAoYWNjX2dldG9wdF9wIGcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGFydF9hcmdjLCBpbnQgYXJnYywgY2hhcioqIGFyZ3YpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19nZXRvcHQpIChhY2NfZ2V0b3B0X3AgZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogc2hvcnRvcHRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhY2NfZ2V0b3B0X2xvbmdvcHRfcCBsb25nb3B0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KiBsb25naW5kKTsKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBhY2NfdWludDMybF90IHNlZWQ7Cit9IGFjY19yYW5kMzFfdDsKKyNpZm5kZWYgYWNjX3JhbmQzMV9wCisjZGVmaW5lIGFjY19yYW5kMzFfcCBhY2NfcmFuZDMxX3QgKgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY19zcmFuZDMxKSAoYWNjX3JhbmQzMV9wLCBhY2NfdWludDMybF90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQzMmxfdCwgYWNjX3JhbmQzMSkgKGFjY19yYW5kMzFfcCk7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCit0eXBlZGVmIHN0cnVjdCB7CisgICAgYWNjX3VpbnQ2NGxfdCBzZWVkOworfSBhY2NfcmFuZDQ4X3Q7CisjaWZuZGVmIGFjY19yYW5kNDhfcAorI2RlZmluZSBhY2NfcmFuZDQ4X3AgYWNjX3JhbmQ0OF90ICoKKyNlbmRpZgorQUNDTElCX0VYVEVSTih2b2lkLCBhY2Nfc3JhbmQ0OCkgKGFjY19yYW5kNDhfcCwgYWNjX3VpbnQzMmxfdCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50MzJsX3QsIGFjY19yYW5kNDgpIChhY2NfcmFuZDQ4X3ApOworQUNDTElCX0VYVEVSTihhY2NfdWludDMybF90LCBhY2NfcmFuZDQ4X3IzMikgKGFjY19yYW5kNDhfcCk7CisjZW5kaWYKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBhY2NfdWludDY0bF90IHNlZWQ7Cit9IGFjY19yYW5kNjRfdDsKKyNpZm5kZWYgYWNjX3JhbmQ2NF9wCisjZGVmaW5lIGFjY19yYW5kNjRfcCBhY2NfcmFuZDY0X3QgKgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY19zcmFuZDY0KSAoYWNjX3JhbmQ2NF9wLCBhY2NfdWludDY0bF90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQzMmxfdCwgYWNjX3JhbmQ2NCkgKGFjY19yYW5kNjRfcCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50MzJsX3QsIGFjY19yYW5kNjRfcjMyKSAoYWNjX3JhbmQ2NF9wKTsKKyNlbmRpZgordHlwZWRlZiBzdHJ1Y3QgeworICAgIHVuc2lnbmVkIG47CisgICAgYWNjX3VpbnQzMmxfdCBzWzYyNF07Cit9IGFjY19yYW5kbXRfdDsKKyNpZm5kZWYgYWNjX3JhbmRtdF9wCisjZGVmaW5lIGFjY19yYW5kbXRfcCBhY2NfcmFuZG10X3QgKgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY19zcmFuZG10KSAoYWNjX3JhbmRtdF9wLCBhY2NfdWludDMybF90KTsKK0FDQ0xJQl9FWFRFUk4oYWNjX3VpbnQzMmxfdCwgYWNjX3JhbmRtdCkgKGFjY19yYW5kbXRfcCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50MzJsX3QsIGFjY19yYW5kbXRfcjMyKSAoYWNjX3JhbmRtdF9wKTsKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1bnNpZ25lZCBuOworICAgIGFjY191aW50NjRsX3Qgc1szMTJdOworfSBhY2NfcmFuZG10NjRfdDsKKyNpZm5kZWYgYWNjX3JhbmRtdDY0X3AKKyNkZWZpbmUgYWNjX3JhbmRtdDY0X3AgYWNjX3JhbmRtdDY0X3QgKgorI2VuZGlmCitBQ0NMSUJfRVhURVJOKHZvaWQsIGFjY19zcmFuZG10NjQpIChhY2NfcmFuZG10NjRfcCwgYWNjX3VpbnQ2NGxfdCk7CitBQ0NMSUJfRVhURVJOKGFjY191aW50NjRsX3QsIGFjY19yYW5kbXQ2NF9yNjQpIChhY2NfcmFuZG10NjRfcCk7CisjZW5kaWYKKyNkZWZpbmUgQUNDX1NQQVdOX1BfV0FJVCAgICAwCisjZGVmaW5lIEFDQ19TUEFXTl9QX05PV0FJVCAgMQorQUNDTElCX0VYVEVSTihpbnQsIGFjY19zcGF3bnYpICAoaW50IG1vZGUsIGNvbnN0IGNoYXIqIGZuLCBjb25zdCBjaGFyKiBjb25zdCAqIGFyZ3YpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19zcGF3bnZwKSAoaW50IG1vZGUsIGNvbnN0IGNoYXIqIGZuLCBjb25zdCBjaGFyKiBjb25zdCAqIGFyZ3YpOworQUNDTElCX0VYVEVSTihpbnQsIGFjY19zcGF3bnZlKSAoaW50IG1vZGUsIGNvbnN0IGNoYXIqIGZuLCBjb25zdCBjaGFyKiBjb25zdCAqIGFyZ3YsIGNvbnN0IGNoYXIgKiBjb25zdCBlbnZwKTsKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NfQ1hYX0gpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NfQ1hYX0gKKyNpZm5kZWYgX19BQ0NfQ1hYX0hfSU5DTFVERUQKKyNkZWZpbmUgX19BQ0NfQ1hYX0hfSU5DTFVERUQgMQorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjaWYgZGVmaW5lZChBQ0NfQ1hYX05PVEhST1cpCisjZWxpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjA4MDB1bCkpCisjZWxpZiAoQUNDX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPCAweDA0NTApKQorI2VsaWYgKEFDQ19DQ19ISUdIQykKKyNlbGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA8IDExMDApKQorI2VsaWYgKEFDQ19DQ19ORFBDKQorI2VsaWYgKEFDQ19DQ19UVVJCT0MpCisjZWxpZiAoQUNDX0NDX1dBVENPTUMgJiYgIWRlZmluZWQoX0NQUFVOV0lORCkpCisjZWxpZiAoQUNDX0NDX1pPUlRFQ0hDKQorI2Vsc2UKKyMgIGRlZmluZSBBQ0NfQ1hYX05PVEhST1cgICB0aHJvdygpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ1hYX05PVEhST1cpCisjICBkZWZpbmUgQUNDX0NYWF9OT1RIUk9XCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQUNDX0NYWF9ET19ORVcpCisjZWxpZiAoQUNDX0NDX05EUEMgfHwgQUNDX0NDX1BHSSkKKyMgIGRlZmluZSBfX0FDQ19DWFhfRE9fTkVXICAgICAgICAgIHsgcmV0dXJuIDA7IH0KKyNlbGlmICgoQUNDX0NDX0JPUkxBTkRDIHx8IEFDQ19DQ19UVVJCT0MpICYmIEFDQ19BUkNIX0kwODYpCisjICBkZWZpbmUgX19BQ0NfQ1hYX0RPX05FVyAgICAgICAgICB7IHJldHVybiAwOyB9CisjZWxzZQorIyAgZGVmaW5lIF9fQUNDX0NYWF9ET19ORVcgICAgICAgICAgOworI2VuZGlmCisjaWYgZGVmaW5lZChfX0FDQ19DWFhfRE9fREVMRVRFKQorI2VsaWYgKEFDQ19DQ19CT1JMQU5EQyB8fCBBQ0NfQ0NfVFVSQk9DKQorIyAgZGVmaW5lIF9fQUNDX0NYWF9ET19ERUxFVEUgICAgICAgeyB9CisjZWxzZQorIyAgZGVmaW5lIF9fQUNDX0NYWF9ET19ERUxFVEUgICAgICAgQUNDX0NYWF9OT1RIUk9XIHsgfQorI2VuZGlmCisjaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fIDwgMHgwNDUwKSkKKyNlbGlmIChBQ0NfQ0NfTVNDICYmIEFDQ19NTV9IVUdFKQorIyAgZGVmaW5lIEFDQ19DWFhfRElTQUJMRV9ORVdfREVMRVRFIHByaXZhdGU6CisjZWxpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPCAxMTAwKSkKKyNlbGlmIChBQ0NfQ0NfTkRQQykKKyNlbGlmIChBQ0NfQ0NfU1lNQU5URUNDIHx8IEFDQ19DQ19aT1JURUNIQykKKyNlbGlmIChBQ0NfQ0NfVFVSQk9DKQorI2VsaWYgKEFDQ19DQ19XQVRDT01DICYmIChfX1dBVENPTUNfXyA8IDExMDApKQorI2Vsc2UKKyMgIGRlZmluZSBfX0FDQ19DWFhfSEFWRV9BUlJBWV9ORVcgMQorI2VuZGlmCisjaWYgKF9fQUNDX0NYWF9IQVZFX0FSUkFZX05FVykKKyMgIGRlZmluZSBfX0FDQ19DWFhfSEFWRV9QTEFDRU1FTlRfTkVXIDEKKyNlbmRpZgorI2lmIChfX0FDQ19DWFhfSEFWRV9QTEFDRU1FTlRfTkVXKQorIyAgaWYgKEFDQ19DQ19HTlVDID49IDB4MDMwMDAwdWwpCisjICAgIGRlZmluZSBfX0FDQ19DWFhfSEFWRV9QTEFDRU1FTlRfREVMRVRFIDEKKyMgIGVsaWYgKEFDQ19DQ19JTlRFTEMpCisjICAgIGRlZmluZSBfX0FDQ19DWFhfSEFWRV9QTEFDRU1FTlRfREVMRVRFIDEKKyMgIGVsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKQorIyAgICBkZWZpbmUgX19BQ0NfQ1hYX0hBVkVfUExBQ0VNRU5UX0RFTEVURSAxCisjICBlbGlmIChBQ0NfQ0NfTExWTSB8fCBBQ0NfQ0NfUEFUSFNDQUxFKQorIyAgICBkZWZpbmUgX19BQ0NfQ1hYX0hBVkVfUExBQ0VNRU5UX0RFTEVURSAxCisjICBlbGlmIChBQ0NfQ0NfUEdJKQorIyAgICBkZWZpbmUgX19BQ0NfQ1hYX0hBVkVfUExBQ0VNRU5UX0RFTEVURSAxCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQ1hYX0RJU0FCTEVfTkVXX0RFTEVURSkKKyNlbGlmIGRlZmluZWQobmV3KSB8fCBkZWZpbmVkKGRlbGV0ZSkKKyMgIGRlZmluZSBBQ0NfQ1hYX0RJU0FCTEVfTkVXX0RFTEVURSBwcml2YXRlOgorI2VsaWYgKEFDQ19DQ19HTlVDICYmIChBQ0NfQ0NfR05VQyA8IDB4MDI1YjAwdWwpKQorIyAgZGVmaW5lIEFDQ19DWFhfRElTQUJMRV9ORVdfREVMRVRFIHByaXZhdGU6CisjZWxpZiAgKEFDQ19DQ19ISUdIQykKKyMgIGRlZmluZSBBQ0NfQ1hYX0RJU0FCTEVfTkVXX0RFTEVURSBwcml2YXRlOgorI2VsaWYgIWRlZmluZWQoX19BQ0NfQ1hYX0hBVkVfQVJSQVlfTkVXKQorIyAgZGVmaW5lIEFDQ19DWFhfRElTQUJMRV9ORVdfREVMRVRFIFwKKyAgICAgICAgcHJvdGVjdGVkOiBzdGF0aWMgdm9pZCBvcGVyYXRvciBkZWxldGUodm9pZCopIF9fQUNDX0NYWF9ET19ERUxFVEUgXAorICAgICAgICBwcm90ZWN0ZWQ6IHN0YXRpYyB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KSBfX0FDQ19DWFhfRE9fTkVXIFwKKyAgICAgICAgcHJpdmF0ZToKKyNlbHNlCisjICBkZWZpbmUgQUNDX0NYWF9ESVNBQkxFX05FV19ERUxFVEUgXAorICAgICAgICBwcm90ZWN0ZWQ6IHN0YXRpYyB2b2lkIG9wZXJhdG9yIGRlbGV0ZSh2b2lkKikgX19BQ0NfQ1hYX0RPX0RFTEVURSBcCisgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQgb3BlcmF0b3IgZGVsZXRlW10odm9pZCopIF9fQUNDX0NYWF9ET19ERUxFVEUgXAorICAgICAgICBwcml2YXRlOiAgIHN0YXRpYyB2b2lkKiBvcGVyYXRvciBuZXcoc2l6ZV90KSAgX19BQ0NfQ1hYX0RPX05FVyBcCisgICAgICAgICAgICAgICAgICAgc3RhdGljIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHNpemVfdCkgX19BQ0NfQ1hYX0RPX05FVworI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQ1hYX1RSSUdHRVJfRlVOQ1RJT04pCisjZWxzZQorIyAgZGVmaW5lIEFDQ19DWFhfVFJJR0dFUl9GVU5DVElPTiBcCisgICAgICAgIHByb3RlY3RlZDogdmlydHVhbCBjb25zdCB2b2lkKiBhY2NfY3h4X3RyaWdnZXJfZnVuY3Rpb24oKSBjb25zdDsgXAorICAgICAgICBwcml2YXRlOgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQ1hYX1RSSUdHRVJfRlVOQ1RJT05fSU1QTCkKKyNlbHNlCisjICBkZWZpbmUgQUNDX0NYWF9UUklHR0VSX0ZVTkNUSU9OX0lNUEwoa2xhc3MpIFwKKyAgICAgICAgY29uc3Qgdm9pZCoga2xhc3M6OmFjY19jeHhfdHJpZ2dlcl9mdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIDA7IH0KKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDX0NIS19DSCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ19DSEtfQ0gKKyNpZiAhZGVmaW5lZChBQ0NDSEtfQVNTRVJUKQorIyAgZGVmaW5lIEFDQ0NIS19BU1NFUlQoZXhwcikgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVF9IRUFERVIoZXhwcikKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ0NIS19BU1NFUlRfU0lHTl9UKQorIyAgZGVmaW5lIEFDQ0NIS19BU1NFUlRfU0lHTl9UKHR5cGUscmVsb3ApIFwKKyAgICAgICAgQUNDQ0hLX0FTU0VSVCggKHR5cGUpICgtMSkgICAgICAgcmVsb3AgICh0eXBlKSAwICkgXAorICAgICAgICBBQ0NDSEtfQVNTRVJUKCAodHlwZSkgKH4odHlwZSkwKSByZWxvcCAgKHR5cGUpIDAgKSBcCisgICAgICAgIEFDQ0NIS19BU1NFUlQoICh0eXBlKSAofih0eXBlKTApID09ICAgICAodHlwZSkgKC0xKSApCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NDSEtfQVNTRVJUX0lTX1NJR05FRF9UKQorIyAgZGVmaW5lIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QodHlwZSkgICAgICAgQUNDQ0hLX0FTU0VSVF9TSUdOX1QodHlwZSw8KQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKQorIyAgaWYgKEFDQ19CUk9LRU5fSU5URUdSQUxfUFJPTU9USU9OKQorIyAgICBkZWZpbmUgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKHR5cGUpIFwKKyAgICAgICAgQUNDQ0hLX0FTU0VSVCggKHR5cGUpICgtMSkgPiAodHlwZSkgMCApCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QodHlwZSkgICBBQ0NDSEtfQVNTRVJUX1NJR05fVCh0eXBlLD4pCisjICBlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDU1MCkgJiYgKF9fQk9STEFORENfXyA8IDB4MDU2MCkpCisjICBwcmFnbWEgb3B0aW9uIHB1c2ggLXctODA1NQorI2VsaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDUzMCkgJiYgKF9fQk9STEFORENfXyA8IDB4MDU1MCkpCisjICBwcmFnbWEgb3B0aW9uIHB1c2ggLXctb3NoCisjZW5kaWYKKyNpZiAoQUNDXzB4ZmZmZmZmZmZMIC0gQUNDX1VJTlQzMl9DKDQyOTQ5NjcyOTQpICE9IDEpCisjICBlcnJvciAicHJlcHJvY2Vzc29yIGVycm9yIDEiCisjZW5kaWYKKyNpZiAoQUNDXzB4ZmZmZmZmZmZMIC0gQUNDX1VJTlQzMl9DKDB4ZmZmZmZmZmQpICE9IDIpCisjICBlcnJvciAicHJlcHJvY2Vzc29yIGVycm9yIDIiCisjZW5kaWYKKyNkZWZpbmUgQUNDQ0hLX1ZBTCAgMQorI2RlZmluZSBBQ0NDSEtfVE1QMSBBQ0NDSEtfVkFMCisjdW5kZWYgQUNDQ0hLX1ZBTAorI2RlZmluZSBBQ0NDSEtfVkFMICAyCisjZGVmaW5lIEFDQ0NIS19UTVAyIEFDQ0NIS19WQUwKKyNpZiAoQUNDQ0hLX1RNUDEgIT0gMikKKyMgIGVycm9yICJwcmVwcm9jZXNzb3IgZXJyb3IgM2EiCisjZW5kaWYKKyNpZiAoQUNDQ0hLX1RNUDIgIT0gMikKKyMgIGVycm9yICJwcmVwcm9jZXNzb3IgZXJyb3IgM2IiCisjZW5kaWYKKyN1bmRlZiBBQ0NDSEtfVkFMCisjaWYgKEFDQ0NIS19UTVAyKQorIyAgZXJyb3IgInByZXByb2Nlc3NvciBlcnJvciAzYyIKKyNlbmRpZgorI2lmIChBQ0NDSEtfVE1QMiArIDAgIT0gMCkKKyMgIGVycm9yICJwcmVwcm9jZXNzb3IgZXJyb3IgM2QiCisjZW5kaWYKKyN1bmRlZiBBQ0NDSEtfVE1QMQorI3VuZGVmIEFDQ0NIS19UTVAyCisjaWYgMCB8fCBkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisjICBpZiAoQUNDX0FSQ0hfTUlQUykgJiYgZGVmaW5lZChfTUlQU19TWklOVCkKKyAgICBBQ0NDSEtfQVNTRVJUKChfTUlQU19TWklOVCkgPT0gOCAqIHNpemVvZihpbnQpKQorIyAgZW5kaWYKKyMgIGlmIChBQ0NfQVJDSF9NSVBTKSAmJiBkZWZpbmVkKF9NSVBTX1NaTE9ORykKKyAgICBBQ0NDSEtfQVNTRVJUKChfTUlQU19TWkxPTkcpID09IDggKiBzaXplb2YobG9uZykpCisjICBlbmRpZgorIyAgaWYgKEFDQ19BUkNIX01JUFMpICYmIGRlZmluZWQoX01JUFNfU1pQVFIpCisgICAgQUNDQ0hLX0FTU0VSVCgoX01JUFNfU1pQVFIpID09IDggKiBzaXplb2Yodm9pZCAqKSkKKyMgIGVuZGlmCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKDEgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKF9fQUNDX01BU0tfR0VOKDF1LDIpID09IDMpCisgICAgQUNDQ0hLX0FTU0VSVChfX0FDQ19NQVNLX0dFTigxdSw4KSA9PSAyNTUpCisjaWYgKFNJWkVPRl9JTlQgPj0gMikKKyAgICBBQ0NDSEtfQVNTRVJUKF9fQUNDX01BU0tfR0VOKDEsMTUpID09IDMyNzY3KQorICAgIEFDQ0NIS19BU1NFUlQoX19BQ0NfTUFTS19HRU4oMXUsMTYpID09IDB4ZmZmZlUpCisjZWxzZQorICAgIEFDQ0NIS19BU1NFUlQoX19BQ0NfTUFTS19HRU4oMXVsLDE2KSA9PSAweGZmZmZVTCkKKyNlbmRpZgorI2lmIChTSVpFT0ZfSU5UID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVChfX0FDQ19NQVNLX0dFTigxLDMxKSA9PSAyMTQ3NDgzNjQ3KQorICAgIEFDQ0NIS19BU1NFUlQoX19BQ0NfTUFTS19HRU4oMXUsMzIpID09IDB4ZmZmZmZmZmZVKQorI2VuZGlmCisjaWYgKFNJWkVPRl9MT05HID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVChfX0FDQ19NQVNLX0dFTigxdWwsMzIpID09IDB4ZmZmZmZmZmZVTCkKKyNlbmRpZgorI2lmIChTSVpFT0ZfTE9ORyA+PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoX19BQ0NfTUFTS19HRU4oMXVsLDY0KSA9PSAweGZmZmZmZmZmZmZmZmZmZmZVTCkKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19CUk9LRU5fSU5URUdSQUxfUFJPTU9USU9OKQorICAgIEFDQ0NIS19BU1NFUlQoX19BQ0NfTUFTS19HRU4oMXUsU0laRU9GX0lOVCo4KSA9PSB+MHUpCisgICAgQUNDQ0hLX0FTU0VSVChfX0FDQ19NQVNLX0dFTigxdWwsU0laRU9GX0xPTkcqOCkgPT0gfjB1bCkKKyNlbmRpZgorI2lmICFkZWZpbmVkKEFDQ19CUk9LRU5fU0lHTkVEX1JJR0hUX1NISUZUKQorICAgIEFDQ0NIS19BU1NFUlQoKCgtMSkgPj4gNykgPT0gLTEpCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKCgoMSkgID4+IDcpID09IDApCisgICAgQUNDQ0hLX0FTU0VSVCgofjBsICAmIH4wKSAgPT0gfjBsKQorICAgIEFDQ0NIS19BU1NFUlQoKH4wbCAgJiB+MHUpID09IH4wdSkKKyAgICBBQ0NDSEtfQVNTRVJUKCh+MHVsICYgfjApICA9PSB+MHVsKQorICAgIEFDQ0NIS19BU1NFUlQoKH4wdWwgJiB+MHUpID09IH4wdSkKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgZGVmaW5lZChfX1RVUkJPQ19fKSAmJiAoX19UVVJCT0NfXyA8IDB4MDE1MCkKKyNlbGlmIChTSVpFT0ZfSU5UID09IDIpCisgICAgQUNDQ0hLX0FTU0VSVCgofjBsICAmIH4wdSkgPT0gMHhmZmZmVSkKKyAgICBBQ0NDSEtfQVNTRVJUKCh+MHVsICYgfjB1KSA9PSAweGZmZmZVKQorI2VsaWYgKFNJWkVPRl9JTlQgPT0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKCh+MGwgICYgfjB1KSA9PSAweGZmZmZmZmZmVSkKKyAgICBBQ0NDSEtfQVNTRVJUKCh+MHVsICYgfjB1KSA9PSAweGZmZmZmZmZmVSkKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1Qoc2lnbmVkIGNoYXIpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKHVuc2lnbmVkIGNoYXIpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2lnbmVkIGNoYXIpID09IHNpemVvZihjaGFyKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZih1bnNpZ25lZCBjaGFyKSA9PSBzaXplb2YoY2hhcikpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoY2hhcikgPT0gMSkKKyNpZiAoQUNDX0NDX0NJTExZKSAmJiAoIWRlZmluZWQoX19DSUxMWV9fKSB8fCAoX19DSUxMWV9fIDwgMHgwMTAzMDJMKSkKKyNlbHNlCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoY2hhcikgPT0gc2l6ZW9mKChjaGFyKTApKQorI2VuZGlmCisjaWYgZGVmaW5lZChfX2NwbHVzcGx1cykKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZignXDAnKSA9PSBzaXplb2YoY2hhcikpCisjZWxzZQorIyAgaWYgKEFDQ19DQ19ETUMpCisjICBlbHNlCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoJ1wwJykgPT0gc2l6ZW9mKGludCkpCisjICBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2FjY19hbGlnbm9mKQorICAgIEFDQ0NIS19BU1NFUlQoX19hY2NfYWxpZ25vZihjaGFyKSA9PSAxKQorICAgIEFDQ0NIS19BU1NFUlQoX19hY2NfYWxpZ25vZihzaWduZWQgY2hhcikgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKF9fYWNjX2FsaWdub2YodW5zaWduZWQgY2hhcikgPT0gMSkKKyNpZiBkZWZpbmVkKGFjY19pbnQxNmVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKF9fYWNjX2FsaWdub2YoYWNjX2ludDE2ZV90KSA+PSAxKQorICAgIEFDQ0NIS19BU1NFUlQoX19hY2NfYWxpZ25vZihhY2NfaW50MTZlX3QpIDw9IDIpCisjZW5kaWYKKyNpZiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKF9fYWNjX2FsaWdub2YoYWNjX2ludDMyZV90KSA+PSAxKQorICAgIEFDQ0NIS19BU1NFUlQoX19hY2NfYWxpZ25vZihhY2NfaW50MzJlX3QpIDw9IDQpCisjZW5kaWYKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1Qoc2hvcnQpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKHVuc2lnbmVkIHNob3J0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNob3J0KSA9PSBzaXplb2YodW5zaWduZWQgc2hvcnQpKQorI2lmICFkZWZpbmVkKEFDQ19BQklfSThMUDE2KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNob3J0KSA+PSAyKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2hvcnQpID49IHNpemVvZihjaGFyKSkKKyNpZiAoQUNDX0NDX0NJTExZKSAmJiAoIWRlZmluZWQoX19DSUxMWV9fKSB8fCAoX19DSUxMWV9fIDwgMHgwMTAzMDJMKSkKKyNlbHNlCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2hvcnQpID09IHNpemVvZigoc2hvcnQpMCkpCisjZW5kaWYKKyNpZiAoU0laRU9GX1NIT1JUID4gMCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihzaG9ydCkgPT0gU0laRU9GX1NIT1JUKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChpbnQpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKHVuc2lnbmVkIGludCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IHNpemVvZih1bnNpZ25lZCBpbnQpKQorI2lmICFkZWZpbmVkKEFDQ19BQklfSThMUDE2KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGludCkgPj0gMikKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGludCkgPj0gc2l6ZW9mKHNob3J0KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IHNpemVvZigwKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IHNpemVvZigoaW50KTApKQorI2lmIChTSVpFT0ZfSU5UID4gMCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IFNJWkVPRl9JTlQpCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZigwKSA9PSBzaXplb2YoaW50KSkKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1NJR05FRF9UKGxvbmcpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKHVuc2lnbmVkIGxvbmcpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobG9uZykgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKQorI2lmICFkZWZpbmVkKEFDQ19BQklfSThMUDE2KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGxvbmcpID49IDQpCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsb25nKSA+PSBzaXplb2YoaW50KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsb25nKSA9PSBzaXplb2YoMEwpKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGxvbmcpID09IHNpemVvZigobG9uZykwKSkKKyNpZiAoU0laRU9GX0xPTkcgPiAwKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGxvbmcpID09IFNJWkVPRl9MT05HKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoMEwpID09IHNpemVvZihsb25nKSkKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1Qoc2l6ZV90KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPj0gc2l6ZW9mKGludCkpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2l6ZV90KSA9PSBzaXplb2Yoc2l6ZW9mKDApKSkKKyNpZiAoU0laRU9GX1NJWkVfVCA+IDApCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2l6ZV90KSA9PSBTSVpFT0ZfU0laRV9UKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChwdHJkaWZmX3QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YocHRyZGlmZl90KSA+PSBzaXplb2YoaW50KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihwdHJkaWZmX3QpID49IHNpemVvZihzaXplX3QpKQorI2lmICFkZWZpbmVkKEFDQ19CUk9LRU5fU0laRU9GKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHB0cmRpZmZfdCkgPT0gc2l6ZW9mKChjaGFyKikwIC0gKGNoYXIqKTApKQorIyBpZiAoQUNDX0hBVkVfTU1fSFVHRV9QVFIpCisgICAgQUNDQ0hLX0FTU0VSVCg0ID09IHNpemVvZigoY2hhciBfX2h1Z2UqKTAgLSAoY2hhciBfX2h1Z2UqKTApKQorIyBlbmRpZgorI2VuZGlmCisjaWYgKFNJWkVPRl9QVFJESUZGX1QgPiAwKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHB0cmRpZmZfdCkgPT0gU0laRU9GX1BUUkRJRkZfVCkKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQqKSA+PSBzaXplb2YoY2hhciopKQorI2lmIChTSVpFT0ZfVk9JRF9QID4gMCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZih2b2lkKikgPT0gU0laRU9GX1ZPSURfUCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihjaGFyKikgPT0gU0laRU9GX1ZPSURfUCkKKyNlbmRpZgorI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyAgICBBQ0NDSEtfQVNTRVJUKDQgPT0gc2l6ZW9mKHZvaWQgX19odWdlKikpCisgICAgQUNDQ0hLX0FTU0VSVCg0ID09IHNpemVvZihjaGFyIF9faHVnZSopKQorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfQUJJX0k4TFAxNikKKyAgICBBQ0NDSEtfQVNTRVJUKCgoKDF1ICA8PCAgNykgKyAxKSA+PiAgNykgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKCgoKDF1bCA8PCAxNSkgKyAxKSA+PiAxNSkgPT0gMSkKKyNlbHNlCisgICAgQUNDQ0hLX0FTU0VSVCgoKCgxdSAgPDwgMTUpICsgMSkgPj4gMTUpID09IDEpCisgICAgQUNDQ0hLX0FTU0VSVCgoKCgxdWwgPDwgMzEpICsgMSkgPj4gMzEpID09IDEpCisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fTVNET1NfXykgJiYgZGVmaW5lZChfX1RVUkJPQ19fKSAmJiAoX19UVVJCT0NfXyA8IDB4MDE1MCkKKyNlbGlmIDEgJiYgKEFDQ19DQ19TVU5QUk9DKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorI2Vsc2UKKyAgICBBQ0NDSEtfQVNTRVJUKCgxICAgPDwgKDgqU0laRU9GX0lOVC0xKSkgPCAwKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVCgoMXUgIDw8ICg4KlNJWkVPRl9JTlQtMSkpID4gMCkKKyNpZiAxICYmIChBQ0NfQ0NfU1VOUFJPQykgJiYgIWRlZmluZWQoQUNDQ0hLX0NGR19QRURBTlRJQykKKyNlbHNlCisgICAgQUNDQ0hLX0FTU0VSVCgoMWwgIDw8ICg4KlNJWkVPRl9MT05HLTEpKSA8IDApCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKCgxdWwgPDwgKDgqU0laRU9GX0xPTkctMSkpID4gMCkKKyNpZiBkZWZpbmVkKGFjY19pbnQxNmVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50MTZlX3QpID09IDIpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDE2ZV90KSA9PSBTSVpFT0ZfQUNDX0lOVDE2RV9UKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY191aW50MTZlX3QpID09IDIpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDE2ZV90KSA9PSBzaXplb2YoYWNjX3VpbnQxNmVfdCkpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChhY2NfaW50MTZlX3QpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19VTlNJR05FRF9UKGFjY191aW50MTZlX3QpCisjaWYgZGVmaW5lZChfX01TRE9TX18pICYmIGRlZmluZWQoX19UVVJCT0NfXykgJiYgKF9fVFVSQk9DX18gPCAweDAxNTApCisjZWxzZQorICAgIEFDQ0NIS19BU1NFUlQoKChhY2NfdWludDE2ZV90KSh+KGFjY191aW50MTZlX3QpMHVsKSA+PiAxNSkgPT0gMSkKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlQoIChhY2NfaW50MTZlX3QpICgxICsgfihhY2NfaW50MTZlX3QpMCkgPT0gMCkKKyNpZiBkZWZpbmVkKEFDQ0NIS19DRkdfUEVEQU5USUMpCisgICAgQUNDQ0hLX0FTU0VSVCggKGFjY191aW50MTZlX3QpKDEgKyB+KGFjY191aW50MTZlX3QpMCkgPT0gMCkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChhY2NfaW50MzJlX3QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMyZV90KSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQzMmVfdCkgPT0gU0laRU9GX0FDQ19JTlQzMkVfVCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfdWludDMyZV90KSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQzMmVfdCkgPT0gc2l6ZW9mKGFjY191aW50MzJlX3QpKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QoYWNjX2ludDMyZV90KQorICAgIEFDQ0NIS19BU1NFUlQoKCgoIChhY2NfaW50MzJlX3QpMSA8PCAzMCkgKyAxKSA+PiAzMCkgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QoYWNjX3VpbnQzMmVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKCgoKCAoYWNjX3VpbnQzMmVfdCkxIDw8IDMxKSArIDEpID4+IDMxKSA9PSAxKQorICAgIEFDQ0NIS19BU1NFUlQoKChhY2NfdWludDMyZV90KSh+KGFjY191aW50MzJlX3QpMHVsKSA+PiAzMSkgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKCAoYWNjX2ludDMyZV90KSAoMSArIH4oYWNjX2ludDMyZV90KTApID09IDApCisjaWYgZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorICAgIEFDQ0NIS19BU1NFUlQoIChhY2NfdWludDMyZV90KSgxICsgfihhY2NfdWludDMyZV90KTApID09IDApCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoYWNjX2ludDMyZV90KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQzMmxfdCkgPj0gc2l6ZW9mKGFjY19pbnQzMmVfdCkpCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50MzJsX3QpID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMybF90KSA9PSBTSVpFT0ZfQUNDX0lOVDMyTF9UKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY191aW50MzJsX3QpID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMybF90KSA9PSBzaXplb2YoYWNjX3VpbnQzMmxfdCkpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChhY2NfaW50MzJsX3QpCisgICAgQUNDQ0hLX0FTU0VSVCgoKCggKGFjY19pbnQzMmxfdCkxIDw8IDMwKSArIDEpID4+IDMwKSA9PSAxKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChhY2NfdWludDMybF90KQorICAgIEFDQ0NIS19BU1NFUlQoKCgoIChhY2NfdWludDMybF90KTEgPDwgMzEpICsgMSkgPj4gMzEpID09IDEpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMyZl90KSA+PSBzaXplb2YoaW50KSkKKyNpZiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50MzJmX3QpID49IHNpemVvZihhY2NfaW50MzJlX3QpKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMyZl90KSA+PSBzaXplb2YoYWNjX2ludDMybF90KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50MzJmX3QpID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMyZl90KSA+PSBzaXplb2YoYWNjX2ludDMybF90KSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50MzJmX3QpID09IFNJWkVPRl9BQ0NfSU5UMzJGX1QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX3VpbnQzMmZfdCkgPj0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfdWludDMyZl90KSA+PSBzaXplb2YoYWNjX3VpbnQzMmxfdCkpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDMyZl90KSA9PSBzaXplb2YoYWNjX3VpbnQzMmZfdCkpCisgICAgQUNDQ0hLX0FTU0VSVF9JU19TSUdORURfVChhY2NfaW50MzJmX3QpCisgICAgQUNDQ0hLX0FTU0VSVCgoKCggKGFjY19pbnQzMmZfdCkxIDw8IDMwKSArIDEpID4+IDMwKSA9PSAxKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChhY2NfdWludDMyZl90KQorICAgIEFDQ0NIS19BU1NFUlQoKCgoIChhY2NfdWludDMyZl90KTEgPDwgMzEpICsgMSkgPj4gMzEpID09IDEpCisjaWYgZGVmaW5lZChhY2NfaW50NjRlX3QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDY0ZV90KSA9PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQ2NGVfdCkgPT0gU0laRU9GX0FDQ19JTlQ2NEVfVCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfdWludDY0ZV90KSA9PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQ2NGVfdCkgPT0gc2l6ZW9mKGFjY191aW50NjRlX3QpKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QoYWNjX2ludDY0ZV90KQorI2lmIChBQ0NfQ0NfQk9STEFOREMgJiYgKF9fQk9STEFORENfXyA8IDB4MDUzMCkpCisjZWxzZQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChhY2NfdWludDY0ZV90KQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGVfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50NjRsX3QpID49IHNpemVvZihhY2NfaW50NjRlX3QpKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludDY0bF90KSA+PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQ2NGxfdCkgPT0gU0laRU9GX0FDQ19JTlQ2NExfVCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfdWludDY0bF90KSA+PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnQ2NGxfdCkgPT0gc2l6ZW9mKGFjY191aW50NjRsX3QpKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QoYWNjX2ludDY0bF90KQorICAgIEFDQ0NIS19BU1NFUlQoKCgoIChhY2NfaW50NjRsX3QpMSA8PCA2MikgKyAxKSA+PiA2MikgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKCgoKCBBQ0NfSU5UNjRfQygxKSA8PCA2MikgKyAxKSA+PiA2MikgPT0gMSkKKyNpZiAoQUNDX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPCAweDA1MzApKQorI2Vsc2UKKyAgICBBQ0NDSEtfQVNTRVJUX0lTX1VOU0lHTkVEX1QoYWNjX3VpbnQ2NGxfdCkKKyAgICBBQ0NDSEtfQVNTRVJUKEFDQ19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkgICAgID4gMCkKKyNlbmRpZgorICAgIEFDQ0NIS19BU1NFUlQoKCgoIChhY2NfdWludDY0bF90KTEgPDwgNjMpICsgMSkgPj4gNjMpID09IDEpCisgICAgQUNDQ0hLX0FTU0VSVCgoKCggQUNDX1VJTlQ2NF9DKDEpIDw8IDYzKSArIDEpID4+IDYzKSA9PSAxKQorI2lmIChBQ0NfQ0NfR05VQyAmJiAoQUNDX0NDX0dOVUMgPCAweDAyMDYwMHVsKSkKKyAgICBBQ0NDSEtfQVNTRVJUKEFDQ19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpICAgICAgID4gQUNDX0lOVDY0X0MoMCkpCisjZWxzZQorICAgIEFDQ0NIS19BU1NFUlQoQUNDX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykgICAgICAgPiAwKQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChBQ0NfSU5UNjRfQygtOTIyMzM3MjAzNjg1NDc3NTgwNykgLSAxICA8IDApCisgICAgQUNDQ0hLX0FTU0VSVCggQUNDX0lOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykgJSBBQ0NfSU5UMzJfQygyMTQ3NDgzNjI5KSAgPT0gNzIxKQorICAgIEFDQ0NIS19BU1NFUlQoIEFDQ19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpICUgQUNDX0lOVDMyX0MoMjE0NzQ4MzY0NykgID09IDEpCisgICAgQUNDQ0hLX0FTU0VSVChBQ0NfVUlOVDY0X0MoOTIyMzM3MjAzNjg1NDc3NTgwNykgJSBBQ0NfVUlOVDMyX0MoMjE0NzQ4MzYyOSkgPT0gNzIxKQorICAgIEFDQ0NIS19BU1NFUlQoQUNDX1VJTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpICUgQUNDX1VJTlQzMl9DKDIxNDc0ODM2NDcpID09IDEpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChfX0FDQ19JTlRQVFJfVF9JU19QT0lOVEVSKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QoYWNjX2ludHB0cl90KQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChhY2NfdWludHB0cl90KQorI2VuZGlmCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludHB0cl90KSA+PSBzaXplb2Yodm9pZCAqKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50cHRyX3QpID09IFNJWkVPRl9BQ0NfSU5UUFRSX1QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludHB0cl90KSA9PSBzaXplb2YoYWNjX3VpbnRwdHJfdCkpCisjaWYgZGVmaW5lZChhY2Nfd29yZF90KQorICAgIEFDQ0NIS19BU1NFUlQoQUNDX1dPUkRTSVpFID09IFNJWkVPRl9BQ0NfV09SRF9UKQorICAgIEFDQ0NIS19BU1NFUlRfSVNfVU5TSUdORURfVChhY2Nfd29yZF90KQorICAgIEFDQ0NIS19BU1NFUlRfSVNfU0lHTkVEX1QoYWNjX3N3b3JkX3QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX3dvcmRfdCkgPT0gU0laRU9GX0FDQ19XT1JEX1QpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX3dvcmRfdCkgPT0gc2l6ZW9mKGFjY19zd29yZF90KSkKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX0lOVDE2X0MpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoQUNDX0lOVDE2X0MoMCkpID49IDIpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoQUNDX1VJTlQxNl9DKDApKSA+PSAyKQorICAgIEFDQ0NIS19BU1NFUlQoKEFDQ19VSU5UMTZfQygweGZmZmYpID4+IDE1KSA9PSAxKQorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfSU5UMzJfQykKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihBQ0NfSU5UMzJfQygwKSkgPj0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihBQ0NfVUlOVDMyX0MoMCkpID49IDQpCisgICAgQUNDQ0hLX0FTU0VSVCgoQUNDX1VJTlQzMl9DKDB4ZmZmZmZmZmYpID4+IDMxKSA9PSAxKQorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfSU5UNjRfQykKKyNpZiAoQUNDX0NDX0JPUkxBTkRDICYmIChfX0JPUkxBTkRDX18gPCAweDA1NjApKQorI2Vsc2UKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihBQ0NfSU5UNjRfQygwKSkgPj0gOCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihBQ0NfVUlOVDY0X0MoMCkpID49IDgpCisjZW5kaWYKKyAgICBBQ0NDSEtfQVNTRVJUKChBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSA+PiA2MykgPT0gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKChBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSAmIH4wKSAgPT0gQUNDX1VJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikpCisgICAgQUNDQ0hLX0FTU0VSVCgoQUNDX1VJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikgJiB+MGwpID09IEFDQ19VSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpKQorI2lmIChTSVpFT0ZfSU5UID09IDQpCisjIGlmIChBQ0NfQ0NfR05VQyAmJiAoQUNDX0NDX0dOVUMgPCAweDAyMDAwMHVsKSkKKyMgZWxzZQorICAgIEFDQ0NIS19BU1NFUlQoKEFDQ19VSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpICYgfjB1KSA9PSAweGZmZmZmZmZmdSkKKyMgZW5kaWYKKyNlbmRpZgorI2lmIChTSVpFT0ZfTE9ORyA9PSA0KQorIyBpZiAoQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjAwMDB1bCkpCisjIGVsc2UKKyAgICBBQ0NDSEtfQVNTRVJUKChBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKSAmIH4wdWwpID09IDB4ZmZmZmZmZmZ1bCkKKyMgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19NTV9USU5ZIHx8IEFDQ19NTV9TTUFMTCB8fCBBQ0NfTU1fTUVESVVNKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQqKSA9PSAyKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHB0cmRpZmZfdCkgPT0gMikKKyNlbGlmIChBQ0NfTU1fQ09NUEFDVCB8fCBBQ0NfTU1fTEFSR0UgfHwgQUNDX01NX0hVR0UpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yodm9pZCopID09IDQpCisjZW5kaWYKKyNpZiAoQUNDX01NX1RJTlkgfHwgQUNDX01NX1NNQUxMIHx8IEFDQ19NTV9DT01QQUNUKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQgKCopKHZvaWQpKSA9PSAyKQorI2VsaWYgKEFDQ19NTV9NRURJVU0gfHwgQUNDX01NX0xBUkdFIHx8IEFDQ19NTV9IVUdFKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQgKCopKHZvaWQpKSA9PSA0KQorI2VuZGlmCisjaWYgKEFDQ19BQklfSUxQMzIpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoaW50KSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGxvbmcpID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yodm9pZCopID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YocHRyZGlmZl90KSA9PSBzaXplb2Yodm9pZCopKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPT0gc2l6ZW9mKHZvaWQqKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50cHRyX3QpID09IHNpemVvZih2b2lkICopKQorI2VuZGlmCisjaWYgKEFDQ19BQklfSUxQNjQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoaW50KSA9PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGxvbmcpID09IDgpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yodm9pZCopID09IDgpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YocHRyZGlmZl90KSA9PSBzaXplb2Yodm9pZCopKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPT0gc2l6ZW9mKHZvaWQqKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50cHRyX3QpID09IHNpemVvZih2b2lkICopKQorI2VuZGlmCisjaWYgKEFDQ19BQklfSVAzMkw2NCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobG9uZykgPT0gOCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZih2b2lkKikgPT0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihwdHJkaWZmX3QpID09IHNpemVvZih2b2lkKikpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2l6ZV90KSA9PSBzaXplb2Yodm9pZCopKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKyNpZiAoQUNDX0FCSV9MTFA2NCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihpbnQpID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YobG9uZykgPT0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZih2b2lkKikgPT0gOCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihwdHJkaWZmX3QpID09IHNpemVvZih2b2lkKikpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yoc2l6ZV90KSA9PSBzaXplb2Yodm9pZCopKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKyNpZiAoQUNDX0FCSV9MUDMyKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGludCkgPT0gMikKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsb25nKSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQqKSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKyNpZiAoQUNDX0FCSV9MUDY0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGludCkgPT0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihsb25nKSA9PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHZvaWQqKSA9PSA4KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHB0cmRpZmZfdCkgPT0gc2l6ZW9mKHZvaWQqKSkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihzaXplX3QpID09IHNpemVvZih2b2lkKikpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YoYWNjX2ludHB0cl90KSA9PSBzaXplb2Yodm9pZCAqKSkKKyNlbmRpZgorI2lmIChBQ0NfQVJDSF9JMDg2KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPT0gMikKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihhY2NfaW50cHRyX3QpID09IHNpemVvZih2b2lkICopKQorI2VsaWYgKEFDQ19BUkNIX0kzODYgfHwgQUNDX0FSQ0hfTTY4SykKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihzaXplX3QpID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2YocHRyZGlmZl90KSA9PSA0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKGFjY19pbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQgKikpCisjZW5kaWYKKyNpZiAoQUNDX09TX0RPUzMyIHx8IEFDQ19PU19PUzIgfHwgQUNDX09TX1dJTjMyKQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPT0gNCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihwdHJkaWZmX3QpID09IDQpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yodm9pZCAoKikodm9pZCkpID09IDQpCisjZWxpZiAoQUNDX09TX1dJTjY0KQorICAgIEFDQ0NIS19BU1NFUlQoc2l6ZW9mKHNpemVfdCkgPT0gOCkKKyAgICBBQ0NDSEtfQVNTRVJUKHNpemVvZihwdHJkaWZmX3QpID09IDgpCisgICAgQUNDQ0hLX0FTU0VSVChzaXplb2Yodm9pZCAoKikodm9pZCkpID09IDgpCisjZW5kaWYKKyNpZiAoQUNDX0NDX05EUEMpCisjZWxpZiAoU0laRU9GX0lOVCA+IDEpCisgICAgQUNDQ0hLX0FTU0VSVCggKGludCkgKCh1bnNpZ25lZCBjaGFyKSAoKHNpZ25lZCBjaGFyKSAtMSkpID09IDI1NSkKKyNlbmRpZgorI2lmIChBQ0NfQ0NfS0VJTEMpCisjZWxpZiAoQUNDX0NDX05EUEMpCisjZWxpZiAxICYmIChBQ0NfQ0NfTENDIHx8IEFDQ19DQ19MQ0NXSU4zMikgJiYgIWRlZmluZWQoQUNDQ0hLX0NGR19QRURBTlRJQykKKyNlbGlmIDEgJiYgKEFDQ19DQ19TVU5QUk9DKSAmJiAhZGVmaW5lZChBQ0NDSEtfQ0ZHX1BFREFOVElDKQorI2VsaWYgIWRlZmluZWQoQUNDX0JST0tFTl9JTlRFR1JBTF9QUk9NT1RJT04pICYmIChTSVpFT0ZfSU5UID4gMSkKKyAgICBBQ0NDSEtfQVNTRVJUKCAoKCh1bnNpZ25lZCBjaGFyKTEyOCkgPDwgKGludCkoOCpzaXplb2YoaW50KS04KSkgPCAwKQorI2VuZGlmCisjaWYgKEFDQ19DQ19CT1JMQU5EQyAmJiAoX19CT1JMQU5EQ19fID49IDB4MDUzMCkgJiYgKF9fQk9STEFORENfXyA8IDB4MDU2MCkpCisjICBwcmFnbWEgb3B0aW9uIHBvcAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ0xJQl9VQSkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ0xJQl9VQQorI2RlZmluZSBfX0FDQ0xJQl9VQV9DSF9JTkNMVURFRCAxCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQykKKyMgIGRlZmluZSBBQ0NMSUJfUFVCTElDKHIsZikgICAgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCitBQ0NMSUJfUFVCTElDKHVuc2lnbmVkLCBhY2NfdWFfZ2V0X2JlMTYpIChjb25zdCBhY2NfaHZvaWRfcCBwKQoreworI2lmIGRlZmluZWQoQUNDX1VBX0dFVF9CRTE2KQorICAgIHJldHVybiBBQ0NfVUFfR0VUX0JFMTYocCk7CisjZWxzZQorICAgIGNvbnN0IGFjY19oYnl0ZV9wIGIgPSAoY29uc3QgYWNjX2hieXRlX3ApIHA7CisgICAgcmV0dXJuICgodW5zaWduZWQpYlsxXSkgfCAoKHVuc2lnbmVkKWJbMF0gPDwgOCk7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoYWNjX3VpbnQzMmxfdCwgYWNjX3VhX2dldF9iZTI0KSAoY29uc3QgYWNjX2h2b2lkX3AgcCkKK3sKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBwOworICAgIHJldHVybiAoKGFjY191aW50MzJsX3QpYlsyXSkgfCAoKGFjY191aW50MzJsX3QpYlsxXSA8PCA4KSB8ICgoYWNjX3VpbnQzMmxfdCliWzBdIDw8IDE2KTsKK30KK0FDQ0xJQl9QVUJMSUMoYWNjX3VpbnQzMmxfdCwgYWNjX3VhX2dldF9iZTMyKSAoY29uc3QgYWNjX2h2b2lkX3AgcCkKK3sKKyNpZiBkZWZpbmVkKEFDQ19VQV9HRVRfQkUzMikKKyAgICByZXR1cm4gQUNDX1VBX0dFVF9CRTMyKHApOworI2Vsc2UKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBwOworICAgIHJldHVybiAoKGFjY191aW50MzJsX3QpYlszXSkgfCAoKGFjY191aW50MzJsX3QpYlsyXSA8PCA4KSB8ICgoYWNjX3VpbnQzMmxfdCliWzFdIDw8IDE2KSB8ICgoYWNjX3VpbnQzMmxfdCliWzBdIDw8IDI0KTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2NfdWFfc2V0X2JlMTYpIChhY2NfaHZvaWRfcCBwLCB1bnNpZ25lZCB2KQoreworI2lmIGRlZmluZWQoQUNDX1VBX1NFVF9CRTE2KQorICAgIEFDQ19VQV9TRVRfQkUxNihwLCB2KTsKKyNlbHNlCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgOCkgJiAweGZmKTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2NfdWFfc2V0X2JlMjQpIChhY2NfaHZvaWRfcCBwLCBhY2NfdWludDMybF90IHYpCit7CisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBiWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAxNikgJiAweGZmKTsKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3VhX3NldF9iZTMyKSAoYWNjX2h2b2lkX3AgcCwgYWNjX3VpbnQzMmxfdCB2KQoreworI2lmIGRlZmluZWQoQUNDX1VBX1NFVF9CRTMyKQorICAgIEFDQ19VQV9TRVRfQkUzMihwLCB2KTsKKyNlbHNlCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBiWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAxNikgJiAweGZmKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAyNCkgJiAweGZmKTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQyh1bnNpZ25lZCwgYWNjX3VhX2dldF9sZTE2KSAoY29uc3QgYWNjX2h2b2lkX3AgcCkKK3sKKyNpZiBkZWZpbmVkKEFDQ19VQV9HRVRfTEUxNikKKyAgICByZXR1cm4gQUNDX1VBX0dFVF9MRTE2KHApOworI2Vsc2UKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBwOworICAgIHJldHVybiAoKHVuc2lnbmVkKWJbMF0pIHwgKCh1bnNpZ25lZCliWzFdIDw8IDgpOworI2VuZGlmCit9CitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJsX3QsIGFjY191YV9nZXRfbGUyNCkgKGNvbnN0IGFjY19odm9pZF9wIHApCit7CisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgcDsKKyAgICByZXR1cm4gKChhY2NfdWludDMybF90KWJbMF0pIHwgKChhY2NfdWludDMybF90KWJbMV0gPDwgOCkgfCAoKGFjY191aW50MzJsX3QpYlsyXSA8PCAxNik7Cit9CitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJsX3QsIGFjY191YV9nZXRfbGUzMikgKGNvbnN0IGFjY19odm9pZF9wIHApCit7CisjaWYgZGVmaW5lZChBQ0NfVUFfR0VUX0xFMzIpCisgICAgcmV0dXJuIEFDQ19VQV9HRVRfTEUzMihwKTsKKyNlbHNlCisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgcDsKKyAgICByZXR1cm4gKChhY2NfdWludDMybF90KWJbMF0pIHwgKChhY2NfdWludDMybF90KWJbMV0gPDwgOCkgfCAoKGFjY191aW50MzJsX3QpYlsyXSA8PCAxNikgfCAoKGFjY191aW50MzJsX3QpYlszXSA8PCAyNCk7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3VhX3NldF9sZTE2KSAoYWNjX2h2b2lkX3AgcCwgdW5zaWduZWQgdikKK3sKKyNpZiBkZWZpbmVkKEFDQ19VQV9TRVRfTEUxNikKKyAgICBBQ0NfVUFfU0VUX0xFMTYocCwgdik7CisjZWxzZQorICAgIGFjY19oYnl0ZV9wIGIgPSAoYWNjX2hieXRlX3ApIHA7CisgICAgYlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDApICYgMHhmZik7CisgICAgYlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDgpICYgMHhmZik7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3VhX3NldF9sZTI0KSAoYWNjX2h2b2lkX3AgcCwgYWNjX3VpbnQzMmxfdCB2KQoreworICAgIGFjY19oYnl0ZV9wIGIgPSAoYWNjX2hieXRlX3ApIHA7CisgICAgYlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDApICYgMHhmZik7CisgICAgYlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDgpICYgMHhmZik7CisgICAgYlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gMTYpICYgMHhmZik7Cit9CitBQ0NMSUJfUFVCTElDKHZvaWQsIGFjY191YV9zZXRfbGUzMikgKGFjY19odm9pZF9wIHAsIGFjY191aW50MzJsX3QgdikKK3sKKyNpZiBkZWZpbmVkKEFDQ19VQV9TRVRfTEUzMikKKyAgICBBQ0NfVUFfU0VUX0xFMzIocCwgdik7CisjZWxzZQorICAgIGFjY19oYnl0ZV9wIGIgPSAoYWNjX2hieXRlX3ApIHA7CisgICAgYlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDApICYgMHhmZik7CisgICAgYlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gIDgpICYgMHhmZik7CisgICAgYlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gMTYpICYgMHhmZik7CisgICAgYlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHYgPj4gMjQpICYgMHhmZik7CisjZW5kaWYKK30KKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKK0FDQ0xJQl9QVUJMSUMoYWNjX3VpbnQ2NGxfdCwgYWNjX3VhX2dldF9iZTY0KSAoY29uc3QgYWNjX2h2b2lkX3AgcCkKK3sKKyNpZiBkZWZpbmVkKEFDQ19VQV9HRVRfQkU2NCkKKyAgICByZXR1cm4gQUNDX1VBX0dFVF9CRTY0KHApOworI2VsaWYgZGVmaW5lZChBQ0NfVUFfR0VUX0JFMzIpCisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgcDsKKyAgICBhY2NfdWludDMyZV90IHYwLCB2MTsKKyAgICB2MSA9IEFDQ19VQV9HRVRfQkUzMihiICsgMCk7CisgICAgdjAgPSBBQ0NfVUFfR0VUX0JFMzIoYiArIDQpOworICAgIHJldHVybiAoKGFjY191aW50NjRsX3QpdjApIHwgKChhY2NfdWludDY0bF90KXYxIDw8IDMyKTsKKyNlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gOCkgfHwgKEFDQ19TSVpFT0ZfU0laRV9UID49IDgpCisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgcDsKKyAgICByZXR1cm4gKChhY2NfdWludDY0bF90KWJbN10pIHwgKChhY2NfdWludDY0bF90KWJbNl0gPDwgOCkgfCAoKGFjY191aW50NjRsX3QpYls1XSA8PCAxNikgfCAoKGFjY191aW50NjRsX3QpYls0XSA8PCAyNCkgfCAoKGFjY191aW50NjRsX3QpYlszXSA8PCAzMikgfCAoKGFjY191aW50NjRsX3QpYlsyXSA8PCA0MCkgfCAoKGFjY191aW50NjRsX3QpYlsxXSA8PCA0OCkgfCAoKGFjY191aW50NjRsX3QpYlswXSA8PCA1Nik7CisjZWxzZQorICAgIGNvbnN0IGFjY19oYnl0ZV9wIGIgPSAoY29uc3QgYWNjX2hieXRlX3ApIHA7CisgICAgYWNjX3VpbnQzMmxfdCB2MCwgdjE7CisgICAgdjEgPSAoKGFjY191aW50MzJsX3QpYlszXSkgfCAoKGFjY191aW50MzJsX3QpYlsyXSA8PCA4KSB8ICgoYWNjX3VpbnQzMmxfdCliWzFdIDw8IDE2KSB8ICgoYWNjX3VpbnQzMmxfdCliWzBdIDw8IDI0KTsKKyAgICBiICs9IDQ7CisgICAgdjAgPSAoKGFjY191aW50MzJsX3QpYlszXSkgfCAoKGFjY191aW50MzJsX3QpYlsyXSA8PCA4KSB8ICgoYWNjX3VpbnQzMmxfdCliWzFdIDw8IDE2KSB8ICgoYWNjX3VpbnQzMmxfdCliWzBdIDw8IDI0KTsKKyAgICByZXR1cm4gKChhY2NfdWludDY0bF90KXYwKSB8ICgoYWNjX3VpbnQ2NGxfdCl2MSA8PCAzMik7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3VhX3NldF9iZTY0KSAoYWNjX2h2b2lkX3AgcCwgYWNjX3VpbnQ2NGxfdCB2KQoreworI2lmIGRlZmluZWQoQUNDX1VBX1NFVF9CRTY0KQorICAgIEFDQ19VQV9TRVRfQkU2NChwLCB2KTsKKyNlbGlmIGRlZmluZWQoQUNDX1VBX1NFVF9CRTMyKQorICAgIGFjY19oYnl0ZV9wIGIgPSAoYWNjX2hieXRlX3ApIHA7CisgICAgQUNDX1VBX1NFVF9CRTMyKGIgKyA0LCAodiA+PiAgMCkpOworICAgIEFDQ19VQV9TRVRfQkUzMihiICsgMCwgKHYgPj4gMzIpKTsKKyNlbGlmIChBQ0NfU0laRU9GX0xPTkcgPj0gOCkgfHwgKEFDQ19TSVpFT0ZfU0laRV9UID49IDgpCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBiWzddID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzZdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzVdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAxNikgJiAweGZmKTsKKyAgICBiWzRdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAyNCkgJiAweGZmKTsKKyAgICBiWzNdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiAzMikgJiAweGZmKTsKKyAgICBiWzJdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiA0MCkgJiAweGZmKTsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiA0OCkgJiAweGZmKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgodiA+PiA1NikgJiAweGZmKTsKKyNlbHNlCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBhY2NfdWludDMybF90IHg7CisgICAgeCA9IChhY2NfdWludDMybF90KSAodiA+PiAgMCk7CisgICAgYls3XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gIDApICYgMHhmZik7CisgICAgYls2XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gIDgpICYgMHhmZik7CisgICAgYls1XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gMTYpICYgMHhmZik7CisgICAgYls0XSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gMjQpICYgMHhmZik7CisgICAgeCA9IChhY2NfdWludDMybF90KSAodiA+PiAzMik7CisgICAgYlszXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gIDApICYgMHhmZik7CisgICAgYlsyXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gIDgpICYgMHhmZik7CisgICAgYlsxXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gMTYpICYgMHhmZik7CisgICAgYlswXSA9ICh1bnNpZ25lZCBjaGFyKSAoKHggPj4gMjQpICYgMHhmZik7CisjZW5kaWYKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX1BVQkxJQyhhY2NfdWludDY0bF90LCBhY2NfdWFfZ2V0X2xlNjQpIChjb25zdCBhY2NfaHZvaWRfcCBwKQoreworI2lmIGRlZmluZWQoQUNDX1VBX0dFVF9MRTY0KQorICAgIHJldHVybiBBQ0NfVUFfR0VUX0xFNjQocCk7CisjZWxpZiBkZWZpbmVkKEFDQ19VQV9HRVRfTEUzMikKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBwOworICAgIGFjY191aW50MzJlX3QgdjAsIHYxOworICAgIHYwID0gQUNDX1VBX0dFVF9MRTMyKGIgKyAwKTsKKyAgICB2MSA9IEFDQ19VQV9HRVRfTEUzMihiICsgNCk7CisgICAgcmV0dXJuICgoYWNjX3VpbnQ2NGxfdCl2MCkgfCAoKGFjY191aW50NjRsX3QpdjEgPDwgMzIpOworI2VsaWYgKEFDQ19TSVpFT0ZfTE9ORyA+PSA4KSB8fCAoQUNDX1NJWkVPRl9TSVpFX1QgPj0gOCkKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBwOworICAgIHJldHVybiAoKGFjY191aW50NjRsX3QpYlswXSkgfCAoKGFjY191aW50NjRsX3QpYlsxXSA8PCA4KSB8ICgoYWNjX3VpbnQ2NGxfdCliWzJdIDw8IDE2KSB8ICgoYWNjX3VpbnQ2NGxfdCliWzNdIDw8IDI0KSB8ICgoYWNjX3VpbnQ2NGxfdCliWzRdIDw8IDMyKSB8ICgoYWNjX3VpbnQ2NGxfdCliWzVdIDw8IDQwKSB8ICgoYWNjX3VpbnQ2NGxfdCliWzZdIDw8IDQ4KSB8ICgoYWNjX3VpbnQ2NGxfdCliWzddIDw8IDU2KTsKKyNlbHNlCisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgcDsKKyAgICBhY2NfdWludDMybF90IHYwLCB2MTsKKyAgICB2MCA9ICgoYWNjX3VpbnQzMmxfdCliWzBdKSB8ICgoYWNjX3VpbnQzMmxfdCliWzFdIDw8IDgpIHwgKChhY2NfdWludDMybF90KWJbMl0gPDwgMTYpIHwgKChhY2NfdWludDMybF90KWJbM10gPDwgMjQpOworICAgIGIgKz0gNDsKKyAgICB2MSA9ICgoYWNjX3VpbnQzMmxfdCliWzBdKSB8ICgoYWNjX3VpbnQzMmxfdCliWzFdIDw8IDgpIHwgKChhY2NfdWludDMybF90KWJbMl0gPDwgMTYpIHwgKChhY2NfdWludDMybF90KWJbM10gPDwgMjQpOworICAgIHJldHVybiAoKGFjY191aW50NjRsX3QpdjApIHwgKChhY2NfdWludDY0bF90KXYxIDw8IDMyKTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2NfdWFfc2V0X2xlNjQpIChhY2NfaHZvaWRfcCBwLCBhY2NfdWludDY0bF90IHYpCit7CisjaWYgZGVmaW5lZChBQ0NfVUFfU0VUX0xFNjQpCisgICAgQUNDX1VBX1NFVF9MRTY0KHAsIHYpOworI2VsaWYgZGVmaW5lZChBQ0NfVUFfU0VUX0xFMzIpCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgcDsKKyAgICBBQ0NfVUFfU0VUX0xFMzIoYiArIDAsICh2ID4+ICAwKSk7CisgICAgQUNDX1VBX1NFVF9MRTMyKGIgKyA0LCAodiA+PiAzMikpOworI2VsaWYgKEFDQ19TSVpFT0ZfTE9ORyA+PSA4KSB8fCAoQUNDX1NJWkVPRl9TSVpFX1QgPj0gOCkKKyAgICBhY2NfaGJ5dGVfcCBiID0gKGFjY19oYnl0ZV9wKSBwOworICAgIGJbMF0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+ICAwKSAmIDB4ZmYpOworICAgIGJbMV0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+ICA4KSAmIDB4ZmYpOworICAgIGJbMl0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDE2KSAmIDB4ZmYpOworICAgIGJbM10gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDI0KSAmIDB4ZmYpOworICAgIGJbNF0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDMyKSAmIDB4ZmYpOworICAgIGJbNV0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDQwKSAmIDB4ZmYpOworICAgIGJbNl0gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDQ4KSAmIDB4ZmYpOworICAgIGJbN10gPSAodW5zaWduZWQgY2hhcikgKCh2ID4+IDU2KSAmIDB4ZmYpOworI2Vsc2UKKyAgICBhY2NfaGJ5dGVfcCBiID0gKGFjY19oYnl0ZV9wKSBwOworICAgIGFjY191aW50MzJsX3QgeDsKKyAgICB4ID0gKGFjY191aW50MzJsX3QpICh2ID4+ICAwKTsKKyAgICBiWzBdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzFdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzJdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAxNikgJiAweGZmKTsKKyAgICBiWzNdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAyNCkgJiAweGZmKTsKKyAgICB4ID0gKGFjY191aW50MzJsX3QpICh2ID4+IDMyKTsKKyAgICBiWzRdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAgMCkgJiAweGZmKTsKKyAgICBiWzVdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAgOCkgJiAweGZmKTsKKyAgICBiWzZdID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAxNikgJiAweGZmKTsKKyAgICBiWzddID0gKHVuc2lnbmVkIGNoYXIpICgoeCA+PiAyNCkgJiAweGZmKTsKKyNlbmRpZgorfQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ0xJQl9WR0VUKQorIyAgdW5kZWYgQUNDX1dBTlRfQUNDTElCX1ZHRVQKKyNkZWZpbmUgX19BQ0NMSUJfVkdFVF9DSF9JTkNMVURFRCAxCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQykKKyMgIGRlZmluZSBBQ0NMSUJfUFVCTElDKHIsZikgICAgICAgICAgICAgICAgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQ19OT0lOTElORSkKKyMgIGlmICFkZWZpbmVkKF9fYWNjX25vaW5saW5lKQorIyAgICBkZWZpbmUgQUNDTElCX1BVQkxJQ19OT0lOTElORShyLGYpICAgICByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjICBlbGlmIChBQ0NfQ0NfR05VQyA+PSAweDAzMDQwMHVsKSB8fCAoQUNDX0NDX0xMVk0pCisjICAgIGRlZmluZSBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHIsZikgICAgIF9fYWNjX25vaW5saW5lIF9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorIyAgZWxzZQorIyAgICBkZWZpbmUgQUNDTElCX1BVQkxJQ19OT0lOTElORShyLGYpICAgICBfX2FjY19ub2lubGluZSByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjICBlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19DQ19HTlVDID49IDB4MDMwNDAwdWwpIHx8IChBQ0NfQ0NfTExWTSkKK2V4dGVybiB2b2lkKiB2b2xhdGlsZSBfX2FjY192Z2V0X3B0cjsKK3ZvaWQqIHZvbGF0aWxlIF9fYXR0cmlidXRlX18oKF9fdXNlZF9fKSkgX19hY2NfdmdldF9wdHIgPSAodm9pZCAqKSAwOworI2Vsc2UKK2V4dGVybiB2b2lkKiB2b2xhdGlsZSBfX2FjY192Z2V0X3B0cjsKK3ZvaWQqIHZvbGF0aWxlIF9fYWNjX3ZnZXRfcHRyID0gKHZvaWQgKikgMDsKKyNlbmRpZgorI2lmbmRlZiBfX0FDQ0xJQl9WR0VUX0JPRFkKKyNkZWZpbmUgX19BQ0NMSUJfVkdFVF9CT0RZKFQpIFwKKyAgICBpZiBfX2FjY191bmxpa2VseShfX2FjY192Z2V0X3B0cikgeyBcCisgICAgICAgICogKFQgKikgX19hY2NfdmdldF9wdHIgPSB2OyBcCisgICAgICAgICogKGludCAqKSBfX2FjY192Z2V0X3B0ciA9IGV4cHI7IFwKKyAgICAgICAgdiA9ICogKFQgKikgX19hY2NfdmdldF9wdHI7IFwKKyAgICB9IFwKKyAgICByZXR1cm4gdjsKKyNlbmRpZgorQUNDTElCX1BVQkxJQ19OT0lOTElORShzaG9ydCwgYWNjX3ZnZXRfc2hvcnQpIChzaG9ydCB2LCBpbnQgZXhwcikKK3sKKyAgICBfX0FDQ0xJQl9WR0VUX0JPRFkoc2hvcnQpCit9CitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKGludCwgYWNjX3ZnZXRfaW50KSAoaW50IHYsIGludCBleHByKQoreworICAgIF9fQUNDTElCX1ZHRVRfQk9EWShpbnQpCit9CitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKGxvbmcsIGFjY192Z2V0X2xvbmcpIChsb25nIHYsIGludCBleHByKQoreworICAgIF9fQUNDTElCX1ZHRVRfQk9EWShsb25nKQorfQorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX1BVQkxJQ19OT0lOTElORShhY2NfaW50NjRsX3QsIGFjY192Z2V0X2FjY19pbnQ2NGxfdCkgKGFjY19pbnQ2NGxfdCB2LCBpbnQgZXhwcikKK3sKKyAgICBfX0FDQ0xJQl9WR0VUX0JPRFkoYWNjX2ludDY0bF90KQorfQorI2VuZGlmCitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKGFjY19oc2l6ZV90LCBhY2NfdmdldF9hY2NfaHNpemVfdCkgKGFjY19oc2l6ZV90IHYsIGludCBleHByKQoreworICAgIF9fQUNDTElCX1ZHRVRfQk9EWShhY2NfaHNpemVfdCkKK30KKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0ZMT0FUKQorQUNDTElCX1BVQkxJQ19OT0lOTElORShmbG9hdCwgYWNjX3ZnZXRfZmxvYXQpIChmbG9hdCB2LCBpbnQgZXhwcikKK3sKKyAgICBfX0FDQ0xJQl9WR0VUX0JPRFkoZmxvYXQpCit9CisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0RPVUJMRSkKK0FDQ0xJQl9QVUJMSUNfTk9JTkxJTkUoZG91YmxlLCBhY2NfdmdldF9kb3VibGUpIChkb3VibGUgdiwgaW50IGV4cHIpCit7CisgICAgX19BQ0NMSUJfVkdFVF9CT0RZKGRvdWJsZSkKK30KKyNlbmRpZgorQUNDTElCX1BVQkxJQ19OT0lOTElORShhY2NfaHZvaWRfcCwgYWNjX3ZnZXRfYWNjX2h2b2lkX3ApIChhY2NfaHZvaWRfcCB2LCBpbnQgZXhwcikKK3sKKyAgICBfX0FDQ0xJQl9WR0VUX0JPRFkoYWNjX2h2b2lkX3ApCit9CisjaWYgKEFDQ19BUkNIX0kwODYgJiYgQUNDX0NDX1RVUkJPQyAmJiAoX19UVVJCT0NfXyA9PSAweDAyOTUpKSAmJiAhZGVmaW5lZChfX2NwbHVzcGx1cykKK0FDQ0xJQl9QVUJMSUNfTk9JTkxJTkUoYWNjX2h2b2lkX3AsIGFjY192Z2V0X2FjY19odm9pZF9jcCkgKGNvbnN0IGFjY19odm9pZF9wIHZ2LCBpbnQgZXhwcikKK3sKKyAgICBhY2NfaHZvaWRfcCB2ID0gKGFjY19odm9pZF9wKSB2djsKKyAgICBfX0FDQ0xJQl9WR0VUX0JPRFkoYWNjX2h2b2lkX3ApCit9CisjZWxzZQorQUNDTElCX1BVQkxJQ19OT0lOTElORShjb25zdCBhY2NfaHZvaWRfcCwgYWNjX3ZnZXRfYWNjX2h2b2lkX2NwKSAoY29uc3QgYWNjX2h2b2lkX3AgdiwgaW50IGV4cHIpCit7CisgICAgX19BQ0NMSUJfVkdFVF9CT0RZKGNvbnN0IGFjY19odm9pZF9wKQorfQorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ0xJQl9ITUVNQ1BZKQorIyAgdW5kZWYgQUNDX1dBTlRfQUNDTElCX0hNRU1DUFkKKyNkZWZpbmUgX19BQ0NMSUJfSE1FTUNQWV9DSF9JTkNMVURFRCAxCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQykKKyMgIGRlZmluZSBBQ0NMSUJfUFVCTElDKHIsZikgICAgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCitBQ0NMSUJfUFVCTElDKGludCwgYWNjX2htZW1jbXApIChjb25zdCBhY2NfaHZvaWRfcCBzMSwgY29uc3QgYWNjX2h2b2lkX3AgczIsIGFjY19oc2l6ZV90IGxlbikKK3sKKyNpZiAoQUNDX0hBVkVfTU1fSFVHRV9QVFIpIHx8ICFkZWZpbmVkKEhBVkVfTUVNQ01QKQorICAgIGNvbnN0IGFjY19oYnl0ZV9wIHAxID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBzMTsKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBwMiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgczI7CisgICAgaWYgX19hY2NfbGlrZWx5KGxlbiA+IDApIGRvCisgICAgeworICAgICAgICBpbnQgZCA9ICpwMSAtICpwMjsKKyAgICAgICAgaWYgKGQgIT0gMCkKKyAgICAgICAgICAgIHJldHVybiBkOworICAgICAgICBwMSsrOyBwMisrOworICAgIH0gd2hpbGUgX19hY2NfbGlrZWx5KC0tbGVuID4gMCk7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIHJldHVybiBtZW1jbXAoczEsIHMyLCBsZW4pOworI2VuZGlmCit9CitBQ0NMSUJfUFVCTElDKGFjY19odm9pZF9wLCBhY2NfaG1lbWNweSkgKGFjY19odm9pZF9wIGRlc3QsIGNvbnN0IGFjY19odm9pZF9wIHNyYywgYWNjX2hzaXplX3QgbGVuKQoreworI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikgfHwgIWRlZmluZWQoSEFWRV9NRU1DUFkpCisgICAgYWNjX2hieXRlX3AgcDEgPSAoYWNjX2hieXRlX3ApIGRlc3Q7CisgICAgY29uc3QgYWNjX2hieXRlX3AgcDIgPSAoY29uc3QgYWNjX2hieXRlX3ApIHNyYzsKKyAgICBpZiAoIShsZW4gPiAwKSB8fCBwMSA9PSBwMikKKyAgICAgICAgcmV0dXJuIGRlc3Q7CisgICAgZG8KKyAgICAgICAgKnAxKysgPSAqcDIrKzsKKyAgICB3aGlsZSBfX2FjY19saWtlbHkoLS1sZW4gPiAwKTsKKyAgICByZXR1cm4gZGVzdDsKKyNlbHNlCisgICAgcmV0dXJuIG1lbWNweShkZXN0LCBzcmMsIGxlbik7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoYWNjX2h2b2lkX3AsIGFjY19obWVtbW92ZSkgKGFjY19odm9pZF9wIGRlc3QsIGNvbnN0IGFjY19odm9pZF9wIHNyYywgYWNjX2hzaXplX3QgbGVuKQoreworI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikgfHwgIWRlZmluZWQoSEFWRV9NRU1NT1ZFKQorICAgIGFjY19oYnl0ZV9wIHAxID0gKGFjY19oYnl0ZV9wKSBkZXN0OworICAgIGNvbnN0IGFjY19oYnl0ZV9wIHAyID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBzcmM7CisgICAgaWYgKCEobGVuID4gMCkgfHwgcDEgPT0gcDIpCisgICAgICAgIHJldHVybiBkZXN0OworICAgIGlmIChwMSA8IHAyKQorICAgIHsKKyAgICAgICAgZG8KKyAgICAgICAgICAgICpwMSsrID0gKnAyKys7CisgICAgICAgIHdoaWxlIF9fYWNjX2xpa2VseSgtLWxlbiA+IDApOworICAgIH0KKyAgICBlbHNlCisgICAgeworICAgICAgICBwMSArPSBsZW47CisgICAgICAgIHAyICs9IGxlbjsKKyAgICAgICAgZG8KKyAgICAgICAgICAgICotLXAxID0gKi0tcDI7CisgICAgICAgIHdoaWxlIF9fYWNjX2xpa2VseSgtLWxlbiA+IDApOworICAgIH0KKyAgICByZXR1cm4gZGVzdDsKKyNlbHNlCisgICAgcmV0dXJuIG1lbW1vdmUoZGVzdCwgc3JjLCBsZW4pOworI2VuZGlmCit9CitBQ0NMSUJfUFVCTElDKGFjY19odm9pZF9wLCBhY2NfaG1lbXNldCkgKGFjY19odm9pZF9wIHMsIGludCBjLCBhY2NfaHNpemVfdCBsZW4pCit7CisjaWYgKEFDQ19IQVZFX01NX0hVR0VfUFRSKSB8fCAhZGVmaW5lZChIQVZFX01FTVNFVCkKKyAgICBhY2NfaGJ5dGVfcCBwID0gKGFjY19oYnl0ZV9wKSBzOworICAgIGlmIF9fYWNjX2xpa2VseShsZW4gPiAwKSBkbworICAgICAgICAqcCsrID0gKHVuc2lnbmVkIGNoYXIpIGM7CisgICAgd2hpbGUgX19hY2NfbGlrZWx5KC0tbGVuID4gMCk7CisgICAgcmV0dXJuIHM7CisjZWxzZQorICAgIHJldHVybiBtZW1zZXQocywgYywgbGVuKTsKKyNlbmRpZgorfQorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NMSUJfUkFORCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ0xJQl9SQU5ECisjZGVmaW5lIF9fQUNDTElCX1JBTkRfQ0hfSU5DTFVERUQgMQorI2lmICFkZWZpbmVkKEFDQ0xJQl9QVUJMSUMpCisjICBkZWZpbmUgQUNDTElCX1BVQkxJQyhyLGYpICAgIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyNlbmRpZgorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2Nfc3JhbmQzMSkgKGFjY19yYW5kMzFfcCByLCBhY2NfdWludDMybF90IHNlZWQpCit7CisgICAgci0+c2VlZCA9IHNlZWQgJiBBQ0NfVUlOVDMyX0MoMHhmZmZmZmZmZik7Cit9CitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJsX3QsIGFjY19yYW5kMzEpIChhY2NfcmFuZDMxX3AgcikKK3sKKyAgICByLT5zZWVkID0gci0+c2VlZCAqIEFDQ19VSU5UMzJfQygxMTAzNTE1MjQ1KSArIDEyMzQ1OworICAgIHItPnNlZWQgJj0gQUNDX1VJTlQzMl9DKDB4N2ZmZmZmZmYpOworICAgIHJldHVybiByLT5zZWVkOworfQorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2Nfc3JhbmQ0OCkgKGFjY19yYW5kNDhfcCByLCBhY2NfdWludDMybF90IHNlZWQpCit7CisgICAgci0+c2VlZCA9IHNlZWQgJiBBQ0NfVUlOVDMyX0MoMHhmZmZmZmZmZik7CisgICAgci0+c2VlZCA8PD0gMTY7IHItPnNlZWQgfD0gMHgzMzBlOworfQorQUNDTElCX1BVQkxJQyhhY2NfdWludDMybF90LCBhY2NfcmFuZDQ4KSAoYWNjX3JhbmQ0OF9wIHIpCit7CisgICAgci0+c2VlZCA9IHItPnNlZWQgKiBBQ0NfVUlOVDY0X0MoMjUyMTQ5MDM5MTcpICsgMTE7CisgICAgci0+c2VlZCAmPSBBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmYpOworICAgIHJldHVybiAoYWNjX3VpbnQzMmxfdCkgKHItPnNlZWQgPj4gMTcpOworfQorQUNDTElCX1BVQkxJQyhhY2NfdWludDMybF90LCBhY2NfcmFuZDQ4X3IzMikgKGFjY19yYW5kNDhfcCByKQoreworICAgIHItPnNlZWQgPSByLT5zZWVkICogQUNDX1VJTlQ2NF9DKDI1MjE0OTAzOTE3KSArIDExOworICAgIHItPnNlZWQgJj0gQUNDX1VJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmKTsKKyAgICByZXR1cm4gKGFjY191aW50MzJsX3QpIChyLT5zZWVkID4+IDE2KTsKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2Nfc3JhbmQ2NCkgKGFjY19yYW5kNjRfcCByLCBhY2NfdWludDY0bF90IHNlZWQpCit7CisgICAgci0+c2VlZCA9IHNlZWQgJiBBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKTsKK30KK0FDQ0xJQl9QVUJMSUMoYWNjX3VpbnQzMmxfdCwgYWNjX3JhbmQ2NCkgKGFjY19yYW5kNjRfcCByKQoreworICAgIHItPnNlZWQgPSByLT5zZWVkICogQUNDX1VJTlQ2NF9DKDYzNjQxMzYyMjM4NDY3OTMwMDUpICsgMTsKKyNpZiAoQUNDX1NJWkVPRl9BQ0NfSU5UNjRMX1QgPiA4KQorICAgIHItPnNlZWQgJj0gQUNDX1VJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZik7CisjZW5kaWYKKyAgICByZXR1cm4gKGFjY191aW50MzJsX3QpIChyLT5zZWVkID4+IDMzKTsKK30KK0FDQ0xJQl9QVUJMSUMoYWNjX3VpbnQzMmxfdCwgYWNjX3JhbmQ2NF9yMzIpIChhY2NfcmFuZDY0X3AgcikKK3sKKyAgICByLT5zZWVkID0gci0+c2VlZCAqIEFDQ19VSU5UNjRfQyg2MzY0MTM2MjIzODQ2NzkzMDA1KSArIDE7CisjaWYgKEFDQ19TSVpFT0ZfQUNDX0lOVDY0TF9UID4gOCkKKyAgICByLT5zZWVkICY9IEFDQ19VSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpOworI2VuZGlmCisgICAgcmV0dXJuIChhY2NfdWludDMybF90KSAoci0+c2VlZCA+PiAzMik7Cit9CisjZW5kaWYKK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3NyYW5kbXQpIChhY2NfcmFuZG10X3AgciwgYWNjX3VpbnQzMmxfdCBzZWVkKQoreworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgci0+c1tpKytdID0gKHNlZWQgJj0gQUNDX1VJTlQzMl9DKDB4ZmZmZmZmZmYpKTsKKyAgICAgICAgc2VlZCBePSBzZWVkID4+IDMwOworICAgICAgICBzZWVkID0gc2VlZCAqIEFDQ19VSU5UMzJfQygweDZjMDc4OTY1KSArIGk7CisgICAgfSB3aGlsZSAoaSAhPSA2MjQpOworICAgIHItPm4gPSBpOworfQorQUNDTElCX1BVQkxJQyhhY2NfdWludDMybF90LCBhY2NfcmFuZG10KSAoYWNjX3JhbmRtdF9wIHIpCit7CisgICAgcmV0dXJuIChfX0FDQ0xJQl9GVU5DTkFNRShhY2NfcmFuZG10X3IzMikocikpID4+IDE7Cit9CitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJsX3QsIGFjY19yYW5kbXRfcjMyKSAoYWNjX3JhbmRtdF9wIHIpCit7CisgICAgYWNjX3VpbnQzMmxfdCB2OworICAgIGlmIF9fYWNjX3VubGlrZWx5KHItPm4gPT0gNjI0KSB7CisgICAgICAgIGludCBpID0gMCwgajsKKyAgICAgICAgci0+biA9IDA7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGogPSBpIC0gNjIzOyBpZiAoaiA8IDApIGogKz0gNjI0OworICAgICAgICAgICAgdiA9IChyLT5zW2ldICYgQUNDX1VJTlQzMl9DKDB4ODAwMDAwMDApKSBeIChyLT5zW2pdICYgQUNDX1VJTlQzMl9DKDB4N2ZmZmZmZmYpKTsKKyAgICAgICAgICAgIGogPSBpIC0gMjI3OyBpZiAoaiA8IDApIGogKz0gNjI0OworICAgICAgICAgICAgci0+c1tpXSA9IHItPnNbal0gXiAodiA+PiAxKTsKKyAgICAgICAgICAgIGlmICh2ICYgMSkgci0+c1tpXSBePSBBQ0NfVUlOVDMyX0MoMHg5OTA4YjBkZik7CisgICAgICAgIH0gd2hpbGUgKCsraSAhPSA2MjQpOworICAgIH0KKyAgICB2ID0gci0+c1tyLT5uKytdOworICAgIHYgXj0gdiA+PiAxMTsgdiBePSAodiAmIEFDQ19VSU5UMzJfQygweDAxM2E1OGFkKSkgPDwgNzsKKyAgICB2IF49ICh2ICYgQUNDX1VJTlQzMl9DKDB4MDAwMWRmOGMpKSA8PCAxNTsgdiBePSB2ID4+IDE4OworICAgIHJldHVybiB2OworfQorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2Nfc3JhbmRtdDY0KSAoYWNjX3JhbmRtdDY0X3AgciwgYWNjX3VpbnQ2NGxfdCBzZWVkKQoreworICAgIHVuc2lnbmVkIGkgPSAwOworICAgIGRvIHsKKyAgICAgICAgci0+c1tpKytdID0gKHNlZWQgJj0gQUNDX1VJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikpOworICAgICAgICBzZWVkIF49IHNlZWQgPj4gNjI7CisgICAgICAgIHNlZWQgPSBzZWVkICogQUNDX1VJTlQ2NF9DKDB4NTg1MWY0MmQ0Yzk1N2YyZCkgKyBpOworICAgIH0gd2hpbGUgKGkgIT0gMzEyKTsKKyAgICByLT5uID0gaTsKK30KKyNpZiAwCitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJsX3QsIGFjY19yYW5kbXQ2NCkgKGFjY19yYW5kbXQ2NF9wIHIpCit7CisgICAgYWNjX3VpbnQ2NGxfdCB2OworICAgIHYgPSAoX19BQ0NMSUJfRlVOQ05BTUUoYWNjX3JhbmRtdDY0X3I2NCkocikpID4+IDMzOworICAgIHJldHVybiAoYWNjX3VpbnQzMmxfdCkgdjsKK30KKyNlbmRpZgorQUNDTElCX1BVQkxJQyhhY2NfdWludDY0bF90LCBhY2NfcmFuZG10NjRfcjY0KSAoYWNjX3JhbmRtdDY0X3AgcikKK3sKKyAgICBhY2NfdWludDY0bF90IHY7CisgICAgaWYgX19hY2NfdW5saWtlbHkoci0+biA9PSAzMTIpIHsKKyAgICAgICAgaW50IGkgPSAwLCBqOworICAgICAgICByLT5uID0gMDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgaiA9IGkgLSAzMTE7IGlmIChqIDwgMCkgaiArPSAzMTI7CisgICAgICAgICAgICB2ID0gKHItPnNbaV0gJiBBQ0NfVUlOVDY0X0MoMHhmZmZmZmZmZjgwMDAwMDAwKSkgXiAoci0+c1tqXSAmIEFDQ19VSU5UNjRfQygweDdmZmZmZmZmKSk7CisgICAgICAgICAgICBqID0gaSAtIDE1NjsgaWYgKGogPCAwKSBqICs9IDMxMjsKKyAgICAgICAgICAgIHItPnNbaV0gPSByLT5zW2pdIF4gKHYgPj4gMSk7CisgICAgICAgICAgICBpZiAodiAmIDEpIHItPnNbaV0gXj0gQUNDX1VJTlQ2NF9DKDB4YjUwMjZmNWFhOTY2MTllOSk7CisgICAgICAgIH0gd2hpbGUgKCsraSAhPSAzMTIpOworICAgIH0KKyAgICB2ID0gci0+c1tyLT5uKytdOworICAgIHYgXj0gKHYgJiBBQ0NfVUlOVDY0X0MoMHhhYWFhYWFhYWEwMDAwMDAwKSkgPj4gMjk7CisgICAgdiBePSAodiAmIEFDQ19VSU5UNjRfQygweDM4ZWIzZmZmZjZkMykpIDw8IDE3OworICAgIHYgXj0gKHYgJiBBQ0NfVUlOVDY0X0MoMHg3ZmZiZjc3KSkgPDwgMzc7CisgICAgcmV0dXJuIHYgXiAodiA+PiA0Myk7Cit9CisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDTElCX1JEVFNDKQorIyAgdW5kZWYgQUNDX1dBTlRfQUNDTElCX1JEVFNDCisjZGVmaW5lIF9fQUNDTElCX1JEVFNDX0NIX0lOQ0xVREVEIDEKKyNpZiAhZGVmaW5lZChBQ0NMSUJfUFVCTElDKQorIyAgZGVmaW5lIEFDQ0xJQl9QVUJMSUMocixmKSAgICByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjZW5kaWYKKyNpZiBkZWZpbmVkKGFjY19pbnQzMmVfdCkKKyNpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19QRUxMRVNDICYmIChfX1BPQ0NfXyA+PSAyOTApKQorIyAgcHJhZ21hIHdhcm4ocHVzaCkKKyMgIHByYWdtYSB3YXJuKGRpc2FibGU6MjAwNykKKyNlbmRpZgorI2lmIChBQ0NfQVJDSF9BTUQ2NCB8fCBBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfR05VQykKKyNpZiAoQUNDX0FSQ0hfQU1ENjQgJiYgQUNDX0NDX1BBVEhTQ0FMRSkKKyMgIGRlZmluZSBfX0FDQ0xJQl9SRFRTQ19SRUdTICAgOiA6ICJjIiAodCkgOiAiY2MiLCAibWVtb3J5IiwgInJheCIsICJyZHgiCisjZWxpZiAoQUNDX0FSQ0hfQU1ENjQgJiYgQUNDX0NDX0lOVEVMQykKKyMgIGRlZmluZSBfX0FDQ0xJQl9SRFRTQ19SRUdTICAgOiA6ICJyIiAodCkgOiAibWVtb3J5IiwgInJheCIsICJyZHgiCisjZWxpZiAoQUNDX0FSQ0hfQU1ENjQpCisjICBkZWZpbmUgX19BQ0NMSUJfUkRUU0NfUkVHUyAgIDogOiAiciIgKHQpIDogImNjIiwgIm1lbW9yeSIsICJyYXgiLCAicmR4IgorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgQUNDX0NDX0dOVUMgJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjAwMDB1bCkpCisjICBkZWZpbmUgX19BQ0NMSUJfUkRUU0NfUkVHUyAgIDogOiAiciIgKHQpIDogImF4IiwgImR4IgorI2VsaWYgKEFDQ19BUkNIX0kzODYgJiYgQUNDX0NDX0lOVEVMQykKKyMgIGRlZmluZSBfX0FDQ0xJQl9SRFRTQ19SRUdTICAgOiA6ICJyIiAodCkgOiAibWVtb3J5IiwgImVheCIsICJlZHgiCisjZWxpZiAoQUNDX0FSQ0hfSTM4NiAmJiBBQ0NfQ0NfUEFUSFNDQUxFKQorIyAgZGVmaW5lIF9fQUNDTElCX1JEVFNDX1JFR1MgICA6IDogImMiICh0KSA6ICJtZW1vcnkiLCAiZWF4IiwgImVkeCIKKyNlbHNlCisjICBkZWZpbmUgX19BQ0NMSUJfUkRUU0NfUkVHUyAgIDogOiAiciIgKHQpIDogImNjIiwgIm1lbW9yeSIsICJlYXgiLCAiZWR4IgorI2VuZGlmCisjZW5kaWYKK0FDQ0xJQl9QVUJMSUMoaW50LCBhY2NfdHNjX3JlYWQpIChhY2NfdWludDMyZV90KiB0KQoreworI2lmIChBQ0NfQVJDSF9BTUQ2NCB8fCBBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfR05VQykKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKKyAgICAgICAgImNsYyBcbiIgIi5ieXRlIDB4MGYsMHgzMVxuIgorICAgICAgICAibW92bCAlJWVheCwoJTApXG4iICJtb3ZsICUlZWR4LDQoJTApXG4iCisgICAgICAgIF9fQUNDTElCX1JEVFNDX1JFR1MKKyAgICApOworICAgIHJldHVybiAwOworI2VsaWYgKEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9NU0MpCisgICAgQUNDX1VOVVNFRCh0KTsKKyAgICBfX2FzbSB7CisgICAgICAgIG1vdiBlY3gsIHQKKyAgICAgICAgY2xjCisjICBpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPCAxMjAwKSkKKyAgICAgICAgX2VtaXQgMHgwZgorICAgICAgICBfZW1pdCAweDMxCisjICBlbHNlCisgICAgICAgIHJkdHNjCisjICBlbmRpZgorICAgICAgICBtb3YgW2VjeF0sIGVheAorICAgICAgICBtb3YgW2VjeCs0XSwgZWR4CisgICAgfQorICAgIHJldHVybiAwOworI2Vsc2UKKyAgICB0WzBdID0gdFsxXSA9IDA7IHJldHVybiAtMTsKKyNlbmRpZgorfQorI2lmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX1BFTExFU0MgJiYgKF9fUE9DQ19fID49IDI5MCkpCisjICBwcmFnbWEgd2Fybihwb3ApCisjZW5kaWYKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NMSUJfRE9TQUxMT0MpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NMSUJfRE9TQUxMT0MKKyNkZWZpbmUgX19BQ0NMSUJfRE9TQUxMT0NfQ0hfSU5DTFVERUQgMQorI2lmICFkZWZpbmVkKEFDQ0xJQl9QVUJMSUMpCisjICBkZWZpbmUgQUNDTElCX1BVQkxJQyhyLGYpICAgIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyNlbmRpZgorI2lmIChBQ0NfT1NfT1MyMTYpCitBQ0NfRVhURVJOX0MgdW5zaWduZWQgc2hvcnQgX19mYXIgX19wYXNjYWwgRG9zQWxsb2NIdWdlKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgX19mYXIgKiwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK0FDQ19FWFRFUk5fQyB1bnNpZ25lZCBzaG9ydCBfX2ZhciBfX3Bhc2NhbCBEb3NGcmVlU2VnKHVuc2lnbmVkIHNob3J0KTsKKyNlbmRpZgorI2lmIChBQ0NfT1NfRE9TMTYgfHwgQUNDX09TX1dJTjE2KQorI2lmICFkZWZpbmVkKEFDQ19DQ19BWlRFQ0MpCitBQ0NMSUJfUFVCTElDKHZvaWQgX19mYXIqLCBhY2NfZG9zX2FsbG9jKSAodW5zaWduZWQgbG9uZyBzaXplKQoreworICAgIHZvaWQgX19mYXIqIHAgPSAwOworICAgIHVuaW9uIFJFR1MgcmksIHJvOworICAgIGlmICgobG9uZylzaXplIDw9IDApCisgICAgICAgIHJldHVybiBwOworICAgIHNpemUgPSAoc2l6ZSArIDE1KSA+PiA0OworICAgIGlmIChzaXplID4gMHhmZmZmdSkKKyAgICAgICAgcmV0dXJuIHA7CisgICAgcmkueC5heCA9IDB4NDgwMDsKKyAgICByaS54LmJ4ID0gKHVuc2lnbmVkIHNob3J0KSBzaXplOworICAgIGludDg2KDB4MjEsICZyaSwgJnJvKTsKKyAgICBpZiAoKHJvLnguY2ZsYWcgJiAxKSA9PSAwKQorICAgICAgICBwID0gKHZvaWQgX19mYXIqKSBBQ0NfUFRSX01LX0ZQKHJvLnguYXgsIDApOworICAgIHJldHVybiBwOworfQorQUNDTElCX1BVQkxJQyhpbnQsIGFjY19kb3NfZnJlZSkgKHZvaWQgX19mYXIqIHApCit7CisgICAgdW5pb24gUkVHUyByaSwgcm87CisgICAgc3RydWN0IFNSRUdTIHJzOworICAgIGlmICghcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKEFDQ19QVFJfRlBfT0ZGKHApICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICBzZWdyZWFkKCZycyk7CisgICAgcmkueC5heCA9IDB4NDkwMDsKKyAgICBycy5lcyA9IEFDQ19QVFJfRlBfU0VHKHApOworICAgIGludDg2eCgweDIxLCAmcmksICZybywgJnJzKTsKKyAgICBpZiAocm8ueC5jZmxhZyAmIDEpCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisjaWYgKEFDQ19PU19PUzIxNikKK0FDQ0xJQl9QVUJMSUModm9pZCBfX2ZhciosIGFjY19kb3NfYWxsb2MpICh1bnNpZ25lZCBsb25nIHNpemUpCit7CisgICAgdm9pZCBfX2ZhciogcCA9IDA7CisgICAgdW5zaWduZWQgc2hvcnQgc2VsID0gMDsKKyAgICBpZiAoKGxvbmcpc2l6ZSA8PSAwKQorICAgICAgICByZXR1cm4gcDsKKyAgICBpZiAoRG9zQWxsb2NIdWdlKCh1bnNpZ25lZCBzaG9ydCkoc2l6ZSA+PiAxNiksICh1bnNpZ25lZCBzaG9ydClzaXplLCAmc2VsLCAwLCAwKSA9PSAwKQorICAgICAgICBwID0gKHZvaWQgX19mYXIqKSBBQ0NfUFRSX01LX0ZQKHNlbCwgMCk7CisgICAgcmV0dXJuIHA7Cit9CitBQ0NMSUJfUFVCTElDKGludCwgYWNjX2Rvc19mcmVlKSAodm9pZCBfX2ZhciogcCkKK3sKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChBQ0NfUFRSX0ZQX09GRihwKSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKERvc0ZyZWVTZWcoQUNDX1BUUl9GUF9TRUcocCkpICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NMSUJfSEFMTE9DKQorIyAgdW5kZWYgQUNDX1dBTlRfQUNDTElCX0hBTExPQworI2RlZmluZSBfX0FDQ0xJQl9IQUxMT0NfQ0hfSU5DTFVERUQgMQorI2lmICFkZWZpbmVkKEFDQ0xJQl9QVUJMSUMpCisjICBkZWZpbmUgQUNDTElCX1BVQkxJQyhyLGYpICAgIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyNlbmRpZgorI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyNpZiAxICYmIChBQ0NfT1NfRE9TMTYgJiYgZGVmaW5lZChCTFgyODYpKQorIyAgZGVmaW5lIF9fQUNDTElCX0hBTExPQ19VU0VfREFIIDEKKyNlbGlmIDEgJiYgKEFDQ19PU19ET1MxNiAmJiBkZWZpbmVkKERPU1gyODYpKQorIyAgZGVmaW5lIF9fQUNDTElCX0hBTExPQ19VU0VfREFIIDEKKyNlbGlmIDEgJiYgKEFDQ19PU19PUzIxNikKKyMgIGRlZmluZSBfX0FDQ0xJQl9IQUxMT0NfVVNFX0RBSCAxCisjZWxpZiAxICYmIChBQ0NfT1NfV0lOMTYpCisjICBkZWZpbmUgX19BQ0NMSUJfSEFMTE9DX1VTRV9HQSAxCisjZWxpZiAxICYmIChBQ0NfT1NfRE9TMTYpICYmIChBQ0NfQ0NfQk9STEFOREMpICYmIGRlZmluZWQoX19EUE1JMTZfXykKKyMgIGRlZmluZSBfX0FDQ0xJQl9IQUxMT0NfVVNFX0dBIDEKKyNlbmRpZgorI2VuZGlmCisjaWYgKF9fQUNDTElCX0hBTExPQ19VU0VfREFIKQorI2lmIDAgJiYgKEFDQ19PU19PUzIxNikKKyNpbmNsdWRlIDxvczIuaD4KKyNlbHNlCitBQ0NfRVhURVJOX0MgdW5zaWduZWQgc2hvcnQgX19mYXIgX19wYXNjYWwgRG9zQWxsb2NIdWdlKHVuc2lnbmVkIHNob3J0LCB1bnNpZ25lZCBzaG9ydCwgdW5zaWduZWQgc2hvcnQgX19mYXIgKiwgdW5zaWduZWQgc2hvcnQsIHVuc2lnbmVkIHNob3J0KTsKK0FDQ19FWFRFUk5fQyB1bnNpZ25lZCBzaG9ydCBfX2ZhciBfX3Bhc2NhbCBEb3NGcmVlU2VnKHVuc2lnbmVkIHNob3J0KTsKKyNlbmRpZgorI2VuZGlmCisjaWYgKF9fQUNDTElCX0hBTExPQ19VU0VfR0EpCisjaWYgMAorI2RlZmluZSBTVFJJQ1QgMQorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbHNlCitBQ0NfRVhURVJOX0MgY29uc3Qgdm9pZCBfX25lYXIqIF9fZmFyIF9fcGFzY2FsIEdsb2JhbEFsbG9jKHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKK0FDQ19FWFRFUk5fQyBjb25zdCB2b2lkIF9fbmVhciogX19mYXIgX19wYXNjYWwgR2xvYmFsRnJlZShjb25zdCB2b2lkIF9fbmVhciopOworQUNDX0VYVEVSTl9DIHVuc2lnbmVkIGxvbmcgX19mYXIgX19wYXNjYWwgR2xvYmFsSGFuZGxlKHVuc2lnbmVkKTsKK0FDQ19FWFRFUk5fQyB2b2lkIF9fZmFyKiBfX2ZhciBfX3Bhc2NhbCBHbG9iYWxMb2NrKGNvbnN0IHZvaWQgX19uZWFyKik7CitBQ0NfRVhURVJOX0MgaW50IF9fZmFyIF9fcGFzY2FsIEdsb2JhbFVubG9jayhjb25zdCB2b2lkIF9fbmVhciopOworI2VuZGlmCisjZW5kaWYKK0FDQ0xJQl9QVUJMSUMoYWNjX2h2b2lkX3AsIGFjY19oYWxsb2MpIChhY2NfaHNpemVfdCBzaXplKQoreworICAgIGFjY19odm9pZF9wIHAgPSAwOworICAgIGlmICghKHNpemUgPiAwKSkKKyAgICAgICAgcmV0dXJuIHA7CisjaWYgMCAmJiBkZWZpbmVkKF9fcGFsbW9zX18pCisgICAgcCA9IE1lbVB0ck5ldyhzaXplKTsKKyNlbGlmICFkZWZpbmVkKEFDQ19IQVZFX01NX0hVR0VfUFRSKQorICAgIGlmIChzaXplIDwgKHNpemVfdCkgLTEpCisgICAgICAgIHAgPSBtYWxsb2MoKHNpemVfdCkgc2l6ZSk7CisjZWxzZQorICAgIGlmICgobG9uZylzaXplIDw9IDApCisgICAgICAgIHJldHVybiBwOworeworI2lmIChfX0FDQ0xJQl9IQUxMT0NfVVNFX0RBSCkKKyAgICB1bnNpZ25lZCBzaG9ydCBzZWwgPSAwOworICAgIGlmIChEb3NBbGxvY0h1Z2UoKHVuc2lnbmVkIHNob3J0KShzaXplID4+IDE2KSwgKHVuc2lnbmVkIHNob3J0KXNpemUsICZzZWwsIDAsIDApID09IDApCisgICAgICAgIHAgPSAoYWNjX2h2b2lkX3ApIEFDQ19QVFJfTUtfRlAoc2VsLCAwKTsKKyNlbGlmIChfX0FDQ0xJQl9IQUxMT0NfVVNFX0dBKQorICAgIGNvbnN0IHZvaWQgX19uZWFyKiBoID0gR2xvYmFsQWxsb2MoMiwgc2l6ZSk7CisgICAgaWYgKGgpIHsKKyAgICAgICAgcCA9IEdsb2JhbExvY2soaCk7CisgICAgICAgIGlmIChwICYmIEFDQ19QVFJfRlBfT0ZGKHApICE9IDApIHsKKyAgICAgICAgICAgIEdsb2JhbFVubG9jayhoKTsKKyAgICAgICAgICAgIHAgPSAwOworICAgICAgICB9CisgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgIEdsb2JhbEZyZWUoaCk7CisgICAgfQorI2VsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDcwMCkpCisgICAgcCA9IF9oYWxsb2Moc2l6ZSwgMSk7CisjZWxpZiAoQUNDX0NDX01TQyB8fCBBQ0NfQ0NfV0FUQ09NQykKKyAgICBwID0gaGFsbG9jKHNpemUsIDEpOworI2VsaWYgKEFDQ19DQ19ETUMgfHwgQUNDX0NDX1NZTUFOVEVDQyB8fCBBQ0NfQ0NfWk9SVEVDSEMpCisgICAgcCA9IGZhcm1hbGxvYyhzaXplKTsKKyNlbGlmIChBQ0NfQ0NfQk9STEFOREMgfHwgQUNDX0NDX1RVUkJPQykKKyAgICBwID0gZmFybWFsbG9jKHNpemUpOworI2VsaWYgZGVmaW5lZChBQ0NfQ0NfQVpURUNDKQorICAgIHAgPSBsbWFsbG9jKHNpemUpOworI2Vsc2UKKyAgICBpZiAoc2l6ZSA8IChzaXplX3QpIC0xKQorICAgICAgICBwID0gbWFsbG9jKChzaXplX3QpIHNpemUpOworI2VuZGlmCit9CisjZW5kaWYKKyAgICByZXR1cm4gcDsKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX2hmcmVlKSAoYWNjX2h2b2lkX3AgcCkKK3sKKyAgICBpZiAoIXApCisgICAgICAgIHJldHVybjsKKyNpZiAwICYmIGRlZmluZWQoX19wYWxtb3NfXykKKyAgICBNZW1QdHJGcmVlKHApOworI2VsaWYgIWRlZmluZWQoQUNDX0hBVkVfTU1fSFVHRV9QVFIpCisgICAgZnJlZShwKTsKKyNlbHNlCisjaWYgKF9fQUNDTElCX0hBTExPQ19VU0VfREFIKQorICAgIGlmIChBQ0NfUFRSX0ZQX09GRihwKSA9PSAwKQorICAgICAgICBEb3NGcmVlU2VnKCh1bnNpZ25lZCBzaG9ydCkgQUNDX1BUUl9GUF9TRUcocCkpOworI2VsaWYgKF9fQUNDTElCX0hBTExPQ19VU0VfR0EpCisgICAgaWYgKEFDQ19QVFJfRlBfT0ZGKHApID09IDApIHsKKyAgICAgICAgY29uc3Qgdm9pZCBfX25lYXIqIGggPSAoY29uc3Qgdm9pZCBfX25lYXIqKSAodW5zaWduZWQpIEdsb2JhbEhhbmRsZShBQ0NfUFRSX0ZQX1NFRyhwKSk7CisgICAgICAgIGlmIChoKSB7CisgICAgICAgICAgICBHbG9iYWxVbmxvY2soaCk7CisgICAgICAgICAgICBHbG9iYWxGcmVlKGgpOworICAgICAgICB9CisgICAgfQorI2VsaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDcwMCkpCisgICAgX2hmcmVlKHApOworI2VsaWYgKEFDQ19DQ19NU0MgfHwgQUNDX0NDX1dBVENPTUMpCisgICAgaGZyZWUocCk7CisjZWxpZiAoQUNDX0NDX0RNQyB8fCBBQ0NfQ0NfU1lNQU5URUNDIHx8IEFDQ19DQ19aT1JURUNIQykKKyAgICBmYXJmcmVlKCh2b2lkIF9fZmFyKikgcCk7CisjZWxpZiAoQUNDX0NDX0JPUkxBTkRDIHx8IEFDQ19DQ19UVVJCT0MpCisgICAgZmFyZnJlZSgodm9pZCBfX2ZhciopIHApOworI2VsaWYgZGVmaW5lZChBQ0NfQ0NfQVpURUNDKQorICAgIGxmcmVlKHApOworI2Vsc2UKKyAgICBmcmVlKHApOworI2VuZGlmCisjZW5kaWYKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDTElCX0hGUkVBRCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ0xJQl9IRlJFQUQKKyNkZWZpbmUgX19BQ0NMSUJfSEZSRUFEX0NIX0lOQ0xVREVEIDEKKyNpZiAhZGVmaW5lZChBQ0NMSUJfUFVCTElDKQorIyAgZGVmaW5lIEFDQ0xJQl9QVUJMSUMocixmKSAgICByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjZW5kaWYKK0FDQ0xJQl9QVUJMSUMoYWNjX2hzaXplX3QsIGFjY19oZnJlYWQpICh2b2lkKiB2ZnAsIGFjY19odm9pZF9wIGJ1ZiwgYWNjX2hzaXplX3Qgc2l6ZSkKK3sKKyAgICBGSUxFKiBmcCA9IChGSUxFICopIHZmcDsKKyNpZiAoQUNDX0hBVkVfTU1fSFVHRV9QVFIpCisjaWYgKEFDQ19NTV9USU5ZIHx8IEFDQ19NTV9TTUFMTCB8fCBBQ0NfTU1fTUVESVVNKQorI2RlZmluZSBfX0FDQ0xJQl9SRVFVSVJFX0hNRU1DUFlfQ0ggMQorICAgIHVuc2lnbmVkIGNoYXIgdG1wWzUxMl07CisgICAgYWNjX2hzaXplX3QgbCA9IDA7CisgICAgd2hpbGUgKGwgPCBzaXplKQorICAgIHsKKyAgICAgICAgc2l6ZV90IG4gPSBzaXplIC0gbCA+IHNpemVvZih0bXApID8gc2l6ZW9mKHRtcCkgOiAoc2l6ZV90KSAoc2l6ZSAtIGwpOworICAgICAgICBuID0gZnJlYWQodG1wLCAxLCBuLCBmcCk7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgX19BQ0NMSUJfRlVOQ05BTUUoYWNjX2htZW1jcHkpKChhY2NfaGJ5dGVfcClidWYgKyBsLCB0bXAsIChhY2NfaHNpemVfdCluKTsKKyAgICAgICAgbCArPSBuOworICAgIH0KKyAgICByZXR1cm4gbDsKKyNlbGlmIChBQ0NfTU1fQ09NUEFDVCB8fCBBQ0NfTU1fTEFSR0UgfHwgQUNDX01NX0hVR0UpCisgICAgYWNjX2hieXRlX3AgYiA9IChhY2NfaGJ5dGVfcCkgYnVmOworICAgIGFjY19oc2l6ZV90IGwgPSAwOworICAgIHdoaWxlIChsIDwgc2l6ZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBuOworICAgICAgICBuID0gQUNDX1BUUl9GUF9PRkYoYik7IG4gPSAobiA8PSAxKSA/IDB4ODAwMHUgOiAoMHUgLSBuKTsKKyAgICAgICAgaWYgKChhY2NfaHNpemVfdCkgbiA+IHNpemUgLSBsKQorICAgICAgICAgICAgbiA9IChzaXplX3QpIChzaXplIC0gbCk7CisgICAgICAgIG4gPSBmcmVhZCgodm9pZCBfX2ZhciopYiwgMSwgbiwgZnApOworICAgICAgICBpZiAobiA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGIgKz0gbjsgbCArPSBuOworICAgIH0KKyAgICByZXR1cm4gbDsKKyNlbHNlCisjICBlcnJvciAidW5rbm93biBtZW1vcnkgbW9kZWwiCisjZW5kaWYKKyNlbHNlCisgICAgcmV0dXJuIGZyZWFkKGJ1ZiwgMSwgc2l6ZSwgZnApOworI2VuZGlmCit9CitBQ0NMSUJfUFVCTElDKGFjY19oc2l6ZV90LCBhY2NfaGZ3cml0ZSkgKHZvaWQqIHZmcCwgY29uc3QgYWNjX2h2b2lkX3AgYnVmLCBhY2NfaHNpemVfdCBzaXplKQoreworICAgIEZJTEUqIGZwID0gKEZJTEUgKikgdmZwOworI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyNpZiAoQUNDX01NX1RJTlkgfHwgQUNDX01NX1NNQUxMIHx8IEFDQ19NTV9NRURJVU0pCisjZGVmaW5lIF9fQUNDTElCX1JFUVVJUkVfSE1FTUNQWV9DSCAxCisgICAgdW5zaWduZWQgY2hhciB0bXBbNTEyXTsKKyAgICBhY2NfaHNpemVfdCBsID0gMDsKKyAgICB3aGlsZSAobCA8IHNpemUpCisgICAgeworICAgICAgICBzaXplX3QgbiA9IHNpemUgLSBsID4gc2l6ZW9mKHRtcCkgPyBzaXplb2YodG1wKSA6IChzaXplX3QpIChzaXplIC0gbCk7CisgICAgICAgIF9fQUNDTElCX0ZVTkNOQU1FKGFjY19obWVtY3B5KSh0bXAsIChjb25zdCBhY2NfaGJ5dGVfcClidWYgKyBsLCAoYWNjX2hzaXplX3Qpbik7CisgICAgICAgIG4gPSBmd3JpdGUodG1wLCAxLCBuLCBmcCk7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbCArPSBuOworICAgIH0KKyAgICByZXR1cm4gbDsKKyNlbGlmIChBQ0NfTU1fQ09NUEFDVCB8fCBBQ0NfTU1fTEFSR0UgfHwgQUNDX01NX0hVR0UpCisgICAgY29uc3QgYWNjX2hieXRlX3AgYiA9IChjb25zdCBhY2NfaGJ5dGVfcCkgYnVmOworICAgIGFjY19oc2l6ZV90IGwgPSAwOworICAgIHdoaWxlIChsIDwgc2l6ZSkKKyAgICB7CisgICAgICAgIHNpemVfdCBuOworICAgICAgICBuID0gQUNDX1BUUl9GUF9PRkYoYik7IG4gPSAobiA8PSAxKSA/IDB4ODAwMHUgOiAoMHUgLSBuKTsKKyAgICAgICAgaWYgKChhY2NfaHNpemVfdCkgbiA+IHNpemUgLSBsKQorICAgICAgICAgICAgbiA9IChzaXplX3QpIChzaXplIC0gbCk7CisgICAgICAgIG4gPSBmd3JpdGUoKHZvaWQgX19mYXIqKWIsIDEsIG4sIGZwKTsKKyAgICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBiICs9IG47IGwgKz0gbjsKKyAgICB9CisgICAgcmV0dXJuIGw7CisjZWxzZQorIyAgZXJyb3IgInVua25vd24gbWVtb3J5IG1vZGVsIgorI2VuZGlmCisjZWxzZQorICAgIHJldHVybiBmd3JpdGUoYnVmLCAxLCBzaXplLCBmcCk7CisjZW5kaWYKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDTElCX0hTUkVBRCkKKyMgIHVuZGVmIEFDQ19XQU5UX0FDQ0xJQl9IU1JFQUQKKyNkZWZpbmUgX19BQ0NMSUJfSFNSRUFEX0NIX0lOQ0xVREVEIDEKKyNpZiAhZGVmaW5lZChBQ0NMSUJfUFVCTElDKQorIyAgZGVmaW5lIEFDQ0xJQl9QVUJMSUMocixmKSAgICByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjZW5kaWYKK0FDQ0xJQl9QVUJMSUMobG9uZywgYWNjX3NhZmVfaHJlYWQpIChpbnQgZmQsIGFjY19odm9pZF9wIGJ1ZiwgbG9uZyBzaXplKQoreworICAgIGFjY19oYnl0ZV9wIGIgPSAoYWNjX2hieXRlX3ApIGJ1ZjsKKyAgICBsb25nIGwgPSAwOworICAgIGludCBzYXZlZF9lcnJubzsKKyAgICBzYXZlZF9lcnJubyA9IGVycm5vOworICAgIHdoaWxlIChsIDwgc2l6ZSkKKyAgICB7CisgICAgICAgIGxvbmcgbiA9IHNpemUgLSBsOworI2lmIChBQ0NfSEFWRV9NTV9IVUdFX1BUUikKKyMgIGRlZmluZSBfX0FDQ0xJQl9SRVFVSVJFX0hSRUFEX0NIIDEKKyAgICAgICAgZXJybm8gPSAwOyBuID0gYWNjX2hyZWFkKGZkLCBiLCBuKTsKKyNlbGlmIChBQ0NfT1NfRE9TMzIpICYmIGRlZmluZWQoX19ESkdQUF9fKQorICAgICAgICBlcnJubyA9IDA7IG4gPSBfcmVhZChmZCwgYiwgbik7CisjZWxzZQorICAgICAgICBlcnJubyA9IDA7IG4gPSByZWFkKGZkLCBiLCBuKTsKKyNlbmRpZgorICAgICAgICBpZiAobiA9PSAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChuIDwgMCkgeworI2lmIGRlZmluZWQoRUFHQUlOKQorICAgICAgICAgICAgaWYgKGVycm5vID09IChFQUdBSU4pKSBjb250aW51ZTsKKyNlbmRpZgorI2lmIGRlZmluZWQoRUlOVFIpCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gKEVJTlRSKSkgY29udGludWU7CisjZW5kaWYKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSAwKSBlcnJubyA9IDE7CisgICAgICAgICAgICByZXR1cm4gbDsKKyAgICAgICAgfQorICAgICAgICBiICs9IG47IGwgKz0gbjsKKyAgICB9CisgICAgZXJybm8gPSBzYXZlZF9lcnJubzsKKyAgICByZXR1cm4gbDsKK30KK0FDQ0xJQl9QVUJMSUMobG9uZywgYWNjX3NhZmVfaHdyaXRlKSAoaW50IGZkLCBjb25zdCBhY2NfaHZvaWRfcCBidWYsIGxvbmcgc2l6ZSkKK3sKKyAgICBjb25zdCBhY2NfaGJ5dGVfcCBiID0gKGNvbnN0IGFjY19oYnl0ZV9wKSBidWY7CisgICAgbG9uZyBsID0gMDsKKyAgICBpbnQgc2F2ZWRfZXJybm87CisgICAgc2F2ZWRfZXJybm8gPSBlcnJubzsKKyAgICB3aGlsZSAobCA8IHNpemUpCisgICAgeworICAgICAgICBsb25nIG4gPSBzaXplIC0gbDsKKyNpZiAoQUNDX0hBVkVfTU1fSFVHRV9QVFIpCisjICBkZWZpbmUgX19BQ0NMSUJfUkVRVUlSRV9IUkVBRF9DSCAxCisgICAgICAgIGVycm5vID0gMDsgbiA9IGFjY19od3JpdGUoZmQsIGIsIG4pOworI2VsaWYgKEFDQ19PU19ET1MzMikgJiYgZGVmaW5lZChfX0RKR1BQX18pCisgICAgICAgIGVycm5vID0gMDsgbiA9IF93cml0ZShmZCwgYiwgbik7CisjZWxzZQorICAgICAgICBlcnJubyA9IDA7IG4gPSB3cml0ZShmZCwgYiwgbik7CisjZW5kaWYKKyAgICAgICAgaWYgKG4gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAobiA8IDApIHsKKyNpZiBkZWZpbmVkKEVBR0FJTikKKyAgICAgICAgICAgIGlmIChlcnJubyA9PSAoRUFHQUlOKSkgY29udGludWU7CisjZW5kaWYKKyNpZiBkZWZpbmVkKEVJTlRSKQorICAgICAgICAgICAgaWYgKGVycm5vID09IChFSU5UUikpIGNvbnRpbnVlOworI2VuZGlmCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gMCkgZXJybm8gPSAxOworICAgICAgICAgICAgcmV0dXJuIGw7CisgICAgICAgIH0KKyAgICAgICAgYiArPSBuOyBsICs9IG47CisgICAgfQorICAgIGVycm5vID0gc2F2ZWRfZXJybm87CisgICAgcmV0dXJuIGw7Cit9CisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ0xJQl9QQ0xPQ0spCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NMSUJfUENMT0NLCisjZGVmaW5lIF9fQUNDTElCX1BDTE9DS19DSF9JTkNMVURFRCAxCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQykKKyMgIGRlZmluZSBBQ0NMSUJfUFVCTElDKHIsZikgICAgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX0dFVFRJTUVPRkRBWSkKKyNpZm5kZWYgYWNjX3BjbG9ja19yZWFkX2dldHRpbWVvZmRheQorI2RlZmluZSBhY2NfcGNsb2NrX3JlYWRfZ2V0dGltZW9mZGF5IGFjY19wY2xvY2tfcmVhZF9nZXR0aW1lb2ZkYXkKKyNlbmRpZgorc3RhdGljIGludCBhY2NfcGNsb2NrX3JlYWRfZ2V0dGltZW9mZGF5KGFjY19wY2xvY2tfaGFuZGxlX3AgaCwgYWNjX3BjbG9ja19wIGMpCit7CisgICAgc3RydWN0IHRpbWV2YWwgdHY7CisgICAgaWYgKGdldHRpbWVvZmRheSgmdHYsIDApICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyAgICBjLT50dl9zZWMgPSB0di50dl9zZWM7CisjZWxzZQorICAgIGMtPnR2X3NlY19oaWdoID0gMDsKKyAgICBjLT50dl9zZWNfbG93ID0gdHYudHZfc2VjOworI2VuZGlmCisgICAgYy0+dHZfbnNlYyA9IChhY2NfdWludDMybF90KSAodHYudHZfdXNlYyAqIDEwMDB1KTsKKyAgICBBQ0NfVU5VU0VEKGgpOyByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoQ0xPQ0tTX1BFUl9TRUMpCisjaWZuZGVmIGFjY19wY2xvY2tfcmVhZF9jbG9jaworI2RlZmluZSBhY2NfcGNsb2NrX3JlYWRfY2xvY2sgYWNjX3BjbG9ja19yZWFkX2Nsb2NrCisjZW5kaWYKK3N0YXRpYyBpbnQgYWNjX3BjbG9ja19yZWFkX2Nsb2NrKGFjY19wY2xvY2tfaGFuZGxlX3AgaCwgYWNjX3BjbG9ja19wIGMpCit7CisgICAgY2xvY2tfdCB0aWNrczsKKyAgICBkb3VibGUgc2VjczsKKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyAgICBhY2NfdWludDY0bF90IG5zZWNzOworICAgIHRpY2tzID0gY2xvY2soKTsKKyAgICBzZWNzID0gKGRvdWJsZSl0aWNrcyAvIChDTE9DS1NfUEVSX1NFQyk7CisgICAgbnNlY3MgPSAoYWNjX3VpbnQ2NGxfdCkgKHNlY3MgKiAxMDAwMDAwMDAwLjApOworICAgIGMtPnR2X3NlYyA9IChhY2NfaW50NjRsX3QpIChuc2VjcyAvIDEwMDAwMDAwMDB1bCk7CisgICAgYy0+dHZfbnNlYyA9IChhY2NfdWludDMybF90KSAobnNlY3MgJSAxMDAwMDAwMDAwdWwpOworI2Vsc2UKKyAgICB0aWNrcyA9IGNsb2NrKCk7CisgICAgc2VjcyA9IChkb3VibGUpdGlja3MgLyAoQ0xPQ0tTX1BFUl9TRUMpOworICAgIGMtPnR2X3NlY19oaWdoID0gMDsKKyAgICBjLT50dl9zZWNfbG93ID0gKGFjY191aW50MzJsX3QpIChzZWNzICsgMC41KTsKKyAgICBjLT50dl9uc2VjID0gMDsKKyNlbmRpZgorICAgIEFDQ19VTlVTRUQoaCk7IHJldHVybiAwOworfQorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MzMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX0RKR1BQX18pICYmIGRlZmluZWQoVUNMT0NLU19QRVJfU0VDKQorI2lmbmRlZiBhY2NfcGNsb2NrX3JlYWRfdWNsb2NrCisjZGVmaW5lIGFjY19wY2xvY2tfcmVhZF91Y2xvY2sgYWNjX3BjbG9ja19yZWFkX3VjbG9jaworI2VuZGlmCitzdGF0aWMgaW50IGFjY19wY2xvY2tfcmVhZF91Y2xvY2soYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBhY2NfcGNsb2NrX3AgYykKK3sKKyAgICBhY2NfdWludDY0bF90IHRpY2tzOworICAgIGRvdWJsZSBzZWNzOworICAgIGFjY191aW50NjRsX3QgbnNlY3M7CisgICAgdGlja3MgPSB1Y2xvY2soKTsKKyAgICBzZWNzID0gKGRvdWJsZSl0aWNrcyAvIChVQ0xPQ0tTX1BFUl9TRUMpOworICAgIG5zZWNzID0gKGFjY191aW50NjRsX3QpIChzZWNzICogMTAwMDAwMDAwMC4wKTsKKyAgICBjLT50dl9zZWMgPSBuc2VjcyAvIDEwMDAwMDAwMDB1bDsKKyAgICBjLT50dl9uc2VjID0gKGFjY191aW50MzJsX3QpIChuc2VjcyAlIDEwMDAwMDAwMDB1bCk7CisgICAgQUNDX1VOVVNFRChoKTsgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZiAwICYmIGRlZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKSAmJiBkZWZpbmVkKENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCkgJiYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisjaWZuZGVmIGFjY19wY2xvY2tfcmVhZF9jbG9ja19nZXR0aW1lX3AKKyNkZWZpbmUgYWNjX3BjbG9ja19yZWFkX2Nsb2NrX2dldHRpbWVfcCBhY2NfcGNsb2NrX3JlYWRfY2xvY2tfZ2V0dGltZV9wCisjZW5kaWYKK3N0YXRpYyBpbnQgYWNjX3BjbG9ja19yZWFkX2Nsb2NrX2dldHRpbWVfcChhY2NfcGNsb2NrX2hhbmRsZV9wIGgsIGFjY19wY2xvY2tfcCBjKQoreworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICBpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQsICZ0cykgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGMtPnR2X3NlYyA9IHRzLnR2X3NlYzsKKyAgICBjLT50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgICBBQ0NfVU5VU0VEKGgpOyByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIChBQ0NfT1NfQ1lHV0lOIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpICYmIGRlZmluZWQoYWNjX2ludDY0bF90KQorI2lmbmRlZiBhY2NfcGNsb2NrX3JlYWRfZ2V0cHJvY2Vzc3RpbWVzCisjZGVmaW5lIGFjY19wY2xvY2tfcmVhZF9nZXRwcm9jZXNzdGltZXMgYWNjX3BjbG9ja19yZWFkX2dldHByb2Nlc3N0aW1lcworI2VuZGlmCitzdGF0aWMgaW50IGFjY19wY2xvY2tfcmVhZF9nZXRwcm9jZXNzdGltZXMoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBhY2NfcGNsb2NrX3AgYykKK3sKKyAgICBGSUxFVElNRSBjdCwgZXQsIGt0LCB1dDsKKyAgICBhY2NfdWludDY0bF90IHRpY2tzOworICAgIGlmIChHZXRQcm9jZXNzVGltZXMoR2V0Q3VycmVudFByb2Nlc3MoKSwgJmN0LCAmZXQsICZrdCwgJnV0KSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdGlja3MgPSAoKGFjY191aW50NjRsX3QpdXQuZHdIaWdoRGF0ZVRpbWUgPDwgMzIpIHwgdXQuZHdMb3dEYXRlVGltZTsKKyAgICBpZiBfX2FjY191bmxpa2VseShoLT50aWNrc19iYXNlID09IDApCisgICAgICAgIGgtPnRpY2tzX2Jhc2UgPSB0aWNrczsKKyAgICBlbHNlCisgICAgICAgIHRpY2tzIC09IGgtPnRpY2tzX2Jhc2U7CisgICAgYy0+dHZfc2VjID0gKGFjY19pbnQ2NGxfdCkgKHRpY2tzIC8gMTAwMDAwMDB1bCk7CisgICAgYy0+dHZfbnNlYyA9IChhY2NfdWludDMybF90KSh0aWNrcyAlIDEwMDAwMDAwdWwpICogMTAwdTsKKyAgICBBQ0NfVU5VU0VEKGgpOyByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9HRVRSVVNBR0UpICYmIGRlZmluZWQoUlVTQUdFX1NFTEYpCisjaWZuZGVmIGFjY19wY2xvY2tfcmVhZF9nZXRydXNhZ2UKKyNkZWZpbmUgYWNjX3BjbG9ja19yZWFkX2dldHJ1c2FnZSBhY2NfcGNsb2NrX3JlYWRfZ2V0cnVzYWdlCisjZW5kaWYKK3N0YXRpYyBpbnQgYWNjX3BjbG9ja19yZWFkX2dldHJ1c2FnZShhY2NfcGNsb2NrX2hhbmRsZV9wIGgsIGFjY19wY2xvY2tfcCBjKQoreworICAgIHN0cnVjdCBydXNhZ2UgcnU7CisgICAgaWYgKGdldHJ1c2FnZShSVVNBR0VfU0VMRiwgJnJ1KSAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgYy0+dHZfc2VjID0gcnUucnVfdXRpbWUudHZfc2VjOworI2Vsc2UKKyAgICBjLT50dl9zZWNfaGlnaCA9IDA7CisgICAgYy0+dHZfc2VjX2xvdyA9IHJ1LnJ1X3V0aW1lLnR2X3NlYzsKKyNlbmRpZgorICAgIGMtPnR2X25zZWMgPSAoYWNjX3VpbnQzMmxfdCkgKHJ1LnJ1X3V0aW1lLnR2X3VzZWMgKiAxMDAwdSk7CisgICAgQUNDX1VOVVNFRChoKTsgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNpZiAoX19BQ0NMSUJfUENMT0NLX1VTRV9QRVJGQ1RSKQorI2lmbmRlZiBhY2NfcGNsb2NrX3JlYWRfcGVyZmN0cgorI2RlZmluZSBhY2NfcGNsb2NrX3JlYWRfcGVyZmN0ciBhY2NfcGNsb2NrX3JlYWRfcGVyZmN0cgorI2VuZGlmCitzdGF0aWMgaW50IGFjY19wY2xvY2tfcmVhZF9wZXJmY3RyKGFjY19wY2xvY2tfaGFuZGxlX3AgaCwgYWNjX3BjbG9ja19wIGMpCit7CisgICAgYWNjX3BlcmZjdHJfY2xvY2tfdCBwY2M7CisgICAgZG91YmxlIHNlY3M7CisgICAgYWNjX3VpbnQ2NGxfdCBuc2VjczsKKyAgICBhY2NfcGVyZmN0cl9yZWFkKCZoLT5wY2gsICZwY2MpOworICAgIGlmIF9fYWNjX3VubGlrZWx5KGgtPnRpY2tzX2Jhc2UgPT0gMCkKKyAgICAgICAgaC0+dGlja3NfYmFzZSA9IHBjYy50c2M7CisgICAgZWxzZQorICAgICAgICBwY2MudHNjIC09IGgtPnRpY2tzX2Jhc2U7CisgICAgc2VjcyA9IHBjYy50c2MgKiBoLT5wY2gudHNjX3RvX3NlY29uZHM7CisgICAgbnNlY3MgPSAoYWNjX3VpbnQ2NGxfdCkgKHNlY3MgKiAxMDAwMDAwMDAwLjApOworICAgIGMtPnR2X3NlYyA9IG5zZWNzIC8gMTAwMDAwMDAwMHVsOworICAgIGMtPnR2X25zZWMgPSAoYWNjX3VpbnQzMmxfdCkgKG5zZWNzICUgMTAwMDAwMDAwMHVsKTsKKyAgICBBQ0NfVU5VU0VEKGgpOyByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIDAgJiYgZGVmaW5lZChIQVZFX0NMT0NLX0dFVFRJTUUpICYmIGRlZmluZWQoQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQpICYmIGRlZmluZWQoYWNjX2ludDY0bF90KQorI2lmbmRlZiBhY2NfcGNsb2NrX3JlYWRfY2xvY2tfZ2V0dGltZV90CisjZGVmaW5lIGFjY19wY2xvY2tfcmVhZF9jbG9ja19nZXR0aW1lX3QgYWNjX3BjbG9ja19yZWFkX2Nsb2NrX2dldHRpbWVfdAorI2VuZGlmCitzdGF0aWMgaW50IGFjY19wY2xvY2tfcmVhZF9jbG9ja19nZXR0aW1lX3QoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBhY2NfcGNsb2NrX3AgYykKK3sKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgaWYgKGNsb2NrX2dldHRpbWUoQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQsICZ0cykgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGMtPnR2X3NlYyA9IHRzLnR2X3NlYzsKKyAgICBjLT50dl9uc2VjID0gdHMudHZfbnNlYzsKKyAgICBBQ0NfVU5VU0VEKGgpOyByZXR1cm4gMDsKK30KKyNlbmRpZgorI2lmIChBQ0NfT1NfQ1lHV0lOIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpICYmIGRlZmluZWQoYWNjX2ludDY0bF90KQorI2lmbmRlZiBhY2NfcGNsb2NrX3JlYWRfZ2V0dGhyZWFkdGltZXMKKyNkZWZpbmUgYWNjX3BjbG9ja19yZWFkX2dldHRocmVhZHRpbWVzIGFjY19wY2xvY2tfcmVhZF9nZXR0aHJlYWR0aW1lcworI2VuZGlmCitzdGF0aWMgaW50IGFjY19wY2xvY2tfcmVhZF9nZXR0aHJlYWR0aW1lcyhhY2NfcGNsb2NrX2hhbmRsZV9wIGgsIGFjY19wY2xvY2tfcCBjKQoreworICAgIEZJTEVUSU1FIGN0LCBldCwga3QsIHV0OworICAgIGFjY191aW50NjRsX3QgdGlja3M7CisgICAgaWYgKEdldFRocmVhZFRpbWVzKEdldEN1cnJlbnRUaHJlYWQoKSwgJmN0LCAmZXQsICZrdCwgJnV0KSA9PSAwKQorICAgICAgICByZXR1cm4gLTE7CisgICAgdGlja3MgPSAoKGFjY191aW50NjRsX3QpdXQuZHdIaWdoRGF0ZVRpbWUgPDwgMzIpIHwgdXQuZHdMb3dEYXRlVGltZTsKKyAgICBpZiBfX2FjY191bmxpa2VseShoLT50aWNrc19iYXNlID09IDApCisgICAgICAgIGgtPnRpY2tzX2Jhc2UgPSB0aWNrczsKKyAgICBlbHNlCisgICAgICAgIHRpY2tzIC09IGgtPnRpY2tzX2Jhc2U7CisgICAgYy0+dHZfc2VjID0gKGFjY19pbnQ2NGxfdCkgKHRpY2tzIC8gMTAwMDAwMDB1bCk7CisgICAgYy0+dHZfbnNlYyA9IChhY2NfdWludDMybF90KSh0aWNrcyAlIDEwMDAwMDAwdWwpICogMTAwOworICAgIEFDQ19VTlVTRUQoaCk7IHJldHVybiAwOworfQorI2VuZGlmCitBQ0NMSUJfUFVCTElDKGludCwgYWNjX3BjbG9ja19vcGVuKSAoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBpbnQgbW9kZSkKK3sKKyAgICBhY2NfcGNsb2NrX3QgYzsKKyAgICBpbnQgaTsKKyAgICBoLT5oID0gKGFjY2xpYl9oYW5kbGVfdCkgMDsKKyAgICBoLT5tb2RlID0gLTE7CisgICAgaC0+bmFtZSA9IE5VTEw7CisgICAgaC0+Z2V0dGltZSA9IDA7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgaC0+dGlja3NfYmFzZSA9IDA7CisjZW5kaWYKKyAgICBzd2l0Y2ggKG1vZGUpCisgICAgeworICAgIGNhc2UgQUNDX1BDTE9DS19SRUFMVElNRV9IUjoKKyMgICAgIGlmIGRlZmluZWQoYWNjX3BjbG9ja19yZWFkX2dldHRpbWVvZmRheSkKKyAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9nZXR0aW1lb2ZkYXk7CisgICAgICAgIGgtPm5hbWUgPSAiZ2V0dGltZW9mZGF5IjsKKyMgICAgIGVuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUNDX1BDTE9DS19SRUFMVElNRToKKyMgICAgIGlmIGRlZmluZWQoYWNjX3BjbG9ja19yZWFkX2dldHRpbWVvZmRheSkKKyAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9nZXR0aW1lb2ZkYXk7CisgICAgICAgIGgtPm5hbWUgPSAiZ2V0dGltZW9mZGF5IjsKKyMgICAgIGVuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQUNDX1BDTE9DS19NT05PVE9OSUNfSFI6CisjICAgICBpZiBkZWZpbmVkKGFjY19wY2xvY2tfcmVhZF91Y2xvY2spCisgICAgICAgIGgtPmdldHRpbWUgPSBhY2NfcGNsb2NrX3JlYWRfdWNsb2NrOworICAgICAgICBoLT5uYW1lID0gInVjbG9jayI7CisjICAgICBlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFDQ19QQ0xPQ0tfTU9OT1RPTklDOgorIyAgICAgaWYgZGVmaW5lZChhY2NfcGNsb2NrX3JlYWRfY2xvY2spCisgICAgICAgIGlmICghaC0+Z2V0dGltZSkgeworICAgICAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9jbG9jazsKKyAgICAgICAgICAgIGgtPm5hbWUgPSAiY2xvY2siOworICAgICAgICB9CisjICAgICBlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFDQ19QQ0xPQ0tfUFJPQ0VTU19DUFVUSU1FX0lEOgorIyAgICAgaWYgZGVmaW5lZChhY2NfcGNsb2NrX3JlYWRfcGVyZmN0cikKKyAgICAgICAgaWYgKGFjY19wZXJmY3RyX29wZW4oJmgtPnBjaCkgPT0gMCkgeworICAgICAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9wZXJmY3RyOworICAgICAgICAgICAgaC0+bmFtZSA9ICJwZXJmY3RyIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjICAgICBlbmRpZgorIyAgICAgaWYgZGVmaW5lZChhY2NfcGNsb2NrX3JlYWRfZ2V0cHJvY2Vzc3RpbWVzKQorICAgICAgICBpZiAoIWgtPmdldHRpbWUgJiYgYWNjX3BjbG9ja19yZWFkX2dldHByb2Nlc3N0aW1lcyhoLCAmYykgPT0gMCkgeworICAgICAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9nZXRwcm9jZXNzdGltZXM7CisgICAgICAgICAgICBoLT5uYW1lID0gIkdldFByb2Nlc3NUaW1lcyI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorIyAgICAgZW5kaWYKKyMgICAgIGlmIGRlZmluZWQoYWNjX3BjbG9ja19yZWFkX2Nsb2NrX2dldHRpbWVfcCkKKyAgICAgICAgaWYgKCFoLT5nZXR0aW1lICYmIGFjY19wY2xvY2tfcmVhZF9jbG9ja19nZXR0aW1lX3AoaCwgJmMpID09IDApIHsKKyAgICAgICAgICAgIGgtPmdldHRpbWUgPSBhY2NfcGNsb2NrX3JlYWRfY2xvY2tfZ2V0dGltZV9wOworICAgICAgICAgICAgaC0+bmFtZSA9ICJDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyMgICAgIGVuZGlmCisjICAgICBpZiBkZWZpbmVkKGFjY19wY2xvY2tfcmVhZF9nZXRydXNhZ2UpCisgICAgICAgIGgtPmdldHRpbWUgPSBhY2NfcGNsb2NrX3JlYWRfZ2V0cnVzYWdlOworICAgICAgICBoLT5uYW1lID0gImdldHJ1c2FnZSI7CisjICAgICBlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEFDQ19QQ0xPQ0tfVEhSRUFEX0NQVVRJTUVfSUQ6CisjICAgICBpZiBkZWZpbmVkKGFjY19wY2xvY2tfcmVhZF9nZXR0aHJlYWR0aW1lcykKKyAgICAgICAgaWYgKCFoLT5nZXR0aW1lICYmIGFjY19wY2xvY2tfcmVhZF9nZXR0aHJlYWR0aW1lcyhoLCAmYykgPT0gMCkgeworICAgICAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9nZXR0aHJlYWR0aW1lczsKKyAgICAgICAgICAgIGgtPm5hbWUgPSAiR2V0VGhyZWFkVGltZXMiOworICAgICAgICB9CisjICAgICBlbmRpZgorIyAgICAgaWYgZGVmaW5lZChhY2NfcGNsb2NrX3JlYWRfY2xvY2tfZ2V0dGltZV90KQorICAgICAgICBpZiAoIWgtPmdldHRpbWUgJiYgYWNjX3BjbG9ja19yZWFkX2Nsb2NrX2dldHRpbWVfdChoLCAmYykgPT0gMCkgeworICAgICAgICAgICAgaC0+Z2V0dGltZSA9IGFjY19wY2xvY2tfcmVhZF9jbG9ja19nZXR0aW1lX3Q7CisgICAgICAgICAgICBoLT5uYW1lID0gIkNMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjICAgICBlbmRpZgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKCFoLT5nZXR0aW1lKQorICAgICAgICByZXR1cm4gLTE7CisgICAgaWYgKCFoLT5oKQorICAgICAgICBoLT5oID0gKGFjY2xpYl9oYW5kbGVfdCkgMTsKKyAgICBoLT5tb2RlID0gbW9kZTsKKyAgICBpZiAoIWgtPm5hbWUpCisgICAgICAgIGgtPm5hbWUgPSAidW5rbm93biI7CisgICAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKyAgICAgICAgYWNjX3BjbG9ja19yZWFkKGgsICZjKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CitBQ0NMSUJfUFVCTElDKGludCwgYWNjX3BjbG9ja19vcGVuX2RlZmF1bHQpIChhY2NfcGNsb2NrX2hhbmRsZV9wIGgpCit7CisgICAgaWYgKGFjY19wY2xvY2tfb3BlbihoLCBBQ0NfUENMT0NLX1BST0NFU1NfQ1BVVElNRV9JRCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFjY19wY2xvY2tfb3BlbihoLCBBQ0NfUENMT0NLX01PTk9UT05JQ19IUikgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKGFjY19wY2xvY2tfb3BlbihoLCBBQ0NfUENMT0NLX1JFQUxUSU1FX0hSKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYWNjX3BjbG9ja19vcGVuKGgsIEFDQ19QQ0xPQ0tfTU9OT1RPTklDKSA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAoYWNjX3BjbG9ja19vcGVuKGgsIEFDQ19QQ0xPQ0tfUkVBTFRJTUUpID09IDApCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChhY2NfcGNsb2NrX29wZW4oaCwgQUNDX1BDTE9DS19USFJFQURfQ1BVVElNRV9JRCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIC0xOworfQorQUNDTElCX1BVQkxJQyhpbnQsIGFjY19wY2xvY2tfY2xvc2UpIChhY2NfcGNsb2NrX2hhbmRsZV9wIGgpCit7CisgICAgaC0+aCA9IChhY2NsaWJfaGFuZGxlX3QpIDA7CisgICAgaC0+bW9kZSA9IC0xOworICAgIGgtPm5hbWUgPSBOVUxMOworICAgIGgtPmdldHRpbWUgPSAwOworI2lmIChfX0FDQ0xJQl9QQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgYWNjX3BlcmZjdHJfY2xvc2UoJmgtPnBjaCk7CisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3BjbG9ja19yZWFkKSAoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBhY2NfcGNsb2NrX3AgYykKK3sKKyAgICBpZiAoaC0+Z2V0dGltZSkgeworICAgICAgICBpZiAoaC0+Z2V0dGltZShoLCBjKSA9PSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgIH0KKyNpZiBkZWZpbmVkKGFjY19pbnQ2NGxfdCkKKyAgICBjLT50dl9zZWMgPSAwOworI2Vsc2UKKyAgICBjLT50dl9zZWNfaGlnaCA9IDA7CisgICAgYy0+dHZfc2VjX2xvdyA9IDA7CisjZW5kaWYKKyAgICBjLT50dl9uc2VjID0gMDsKK30KKyNpZiAhZGVmaW5lZChBQ0NfQ0ZHX05PX0RPVUJMRSkKK0FDQ0xJQl9QVUJMSUMoZG91YmxlLCBhY2NfcGNsb2NrX2dldF9lbGFwc2VkKSAoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCBjb25zdCBhY2NfcGNsb2NrX3Agc3RhcnQsIGNvbnN0IGFjY19wY2xvY2tfcCBzdG9wKQoreworICAgIGRvdWJsZSB0c3RvcCwgdHN0YXJ0OworICAgIGlmICghaC0+aCkgeworICAgICAgICBoLT5tb2RlID0gLTE7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorICAgIHRzdG9wICA9IHN0b3AtPnR2X3NlYyAgKyBzdG9wLT50dl9uc2VjICAvIDEwMDAwMDAwMDAuMDsKKyAgICB0c3RhcnQgPSBzdGFydC0+dHZfc2VjICsgc3RhcnQtPnR2X25zZWMgLyAxMDAwMDAwMDAwLjA7CisjZWxzZQorICAgIHRzdG9wICA9IHN0b3AtPnR2X3NlY19sb3cgICsgc3RvcC0+dHZfbnNlYyAgLyAxMDAwMDAwMDAwLjA7CisgICAgdHN0YXJ0ID0gc3RhcnQtPnR2X3NlY19sb3cgKyBzdGFydC0+dHZfbnNlYyAvIDEwMDAwMDAwMDAuMDsKKyNlbmRpZgorICAgIHJldHVybiB0c3RvcCAtIHRzdGFydDsKK30KKyNlbmRpZgorQUNDTElCX1BVQkxJQyhpbnQsIGFjY19wY2xvY2tfZmx1c2hfY3B1X2NhY2hlKSAoYWNjX3BjbG9ja19oYW5kbGVfcCBoLCB1bnNpZ25lZCBmbGFncykKK3sKKyAgICBpZiAoaC0+aCkgeworI2lmIChfX0FDQ0xJQl9QQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgICAgIHJldHVybiBhY2NfcGVyZmN0cl9mbHVzaF9jcHVfY2FjaGUoJmgtPnBjaCwgZmxhZ3MpOworI2VuZGlmCisgICAgfQorICAgIEFDQ19VTlVTRUQoaCk7IEFDQ19VTlVTRUQoZmxhZ3MpOworICAgIHJldHVybiAtMTsKK30KKyNpZiBkZWZpbmVkKF9fQUNDTElCX1BDTE9DS19ORUVEX1dBUk5fUE9QKQorIyAgaWYgKEFDQ19DQ19NU0MgJiYgKF9NU0NfVkVSID49IDEyMDApKQorIyAgICBwcmFnbWEgd2FybmluZyhwb3ApCisjICBlbHNlCisjICAgIGVycm9yICJfX0FDQ0xJQl9QQ0xPQ0tfTkVFRF9XQVJOX1BPUCIKKyMgIGVuZGlmCisjICB1bmRlZiBfX0FDQ0xJQl9QQ0xPQ0tfTkVFRF9XQVJOX1BPUAorI2VuZGlmCisjZW5kaWYKKyNpZiBkZWZpbmVkKEFDQ19XQU5UX0FDQ0xJQl9VQ0xPQ0spCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NMSUJfVUNMT0NLCisjZGVmaW5lIF9fQUNDTElCX1VDTE9DS19DSF9JTkNMVURFRCAxCisjaWYgIWRlZmluZWQoQUNDTElCX1BVQkxJQykKKyMgIGRlZmluZSBBQ0NMSUJfUFVCTElDKHIsZikgICAgciBfX0FDQ0xJQl9GVU5DTkFNRShmKQorI2VuZGlmCisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfV0lOMTYpCisjZWxpZiAoQUNDX09TX0RPUzMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fREpHUFBfXykKKyNlbGlmIChBQ0NfT1NfQ1lHV0lOIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpCisjICBpZiAoKEFDQ19DQ19ETUMgJiYgKF9fRE1DX18gPCAweDgzOCkpIHx8IEFDQ19DQ19MQ0NXSU4zMikKKyMgICAgZGVmaW5lIF9fQUNDTElCX1VDTE9DS19VU0VfQ0xPQ0sgMQorIyAgZWxzZQorIyAgICBkZWZpbmUgX19BQ0NMSUJfVUNMT0NLX1VTRV9XSU5NTSAxCisjICAgIGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSAxMjAwKSkKKyMgICAgICBwcmFnbWEgd2FybmluZyhwdXNoKQorIyAgICAgIGRlZmluZSBfX0FDQ0xJQl9VQ0xPQ0tfTkVFRF9XQVJOX1BPUCAxCisjICAgIGVuZGlmCisjICAgIGlmIChBQ0NfQ0NfTVNDICYmIChfTVNDX1ZFUiA+PSA5MDApKQorIyAgICAgIHByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQyMDEpCisjICAgIGVsaWYgKEFDQ19DQ19NV0VSS1MpCisjICAgICAgZGVmaW5lIExQVUlOVCBfX0FDQ19NTVNZU1RFTV9IX0xQVUlOVAorIyAgICBlbmRpZgorIyAgICBpZiAxCisjICAgICAgaW5jbHVkZSA8bW1zeXN0ZW0uaD4KKyMgICAgZWxzZQorIyAgICAgIGlmIChBQ0NfQ0NfSU5URUxDIHx8IEFDQ19DQ19NU0MgfHwgQUNDX0NDX1BFTExFU0MpCisgICAgICAgICBBQ0NfRVhURVJOX0MgX19kZWNsc3BlYyhkbGxpbXBvcnQpIHVuc2lnbmVkIGxvbmcgX19zdGRjYWxsIHRpbWVHZXRUaW1lKHZvaWQpOworIyAgICAgIGVsc2UKKyAgICAgICAgIEFDQ19FWFRFUk5fQyB1bnNpZ25lZCBsb25nIF9fc3RkY2FsbCB0aW1lR2V0VGltZSh2b2lkKTsKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgICBpZiAoQUNDX0NDX0RNQykKKyMgICAgICBwcmFnbWEgRE1DIGluY2x1ZGVsaWIgIndpbm1tLmxpYiIKKyMgICAgZWxpZiAoQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfTVNDIHx8IEFDQ19DQ19QRUxMRVNDKQorIyAgICAgIHByYWdtYSBjb21tZW50KGxpYiwgIndpbm1tLmxpYiIpCisjICAgIGVsaWYgKEFDQ19DQ19NV0VSS1MgJiYgKF9fTVdFUktTX18gPj0gMHgzMDAwKSkKKyMgICAgICBwcmFnbWEgY29tbWVudChsaWIsICJ3aW5tbS5saWIiKQorIyAgICBlbGlmIChBQ0NfQ0NfU1lNQU5URUNDKQorIyAgICAgIHByYWdtYSBTQyBpbmNsdWRlbGliICJ3aW5tbS5saWIiCisjICAgIGVsaWYgKEFDQ19DQ19XQVRDT01DICYmIChfX1dBVENPTUNfXyA+PSAxMDUwKSkKKyMgICAgICBwcmFnbWEgbGlicmFyeSgid2lubW0ubGliIikKKyMgICAgZW5kaWYKKyMgIGVuZGlmCisjZWxpZiAoQUNDX09TX0NZR1dJTiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX0VNWCB8fCBBQ0NfT1NfT1MyIHx8IEFDQ19PU19PUzIxNiB8fCBBQ0NfT1NfVE9TIHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjICBkZWZpbmUgX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSyAxCisjZWxpZiAoQUNDX09TX0NPTlNPTEUpICYmIGRlZmluZWQoQ0xPQ0tTX1BFUl9TRUMpCisjICBkZWZpbmUgX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSyAxCisjZWxpZiAoQUNDX0xJQkNfSVNPQzkwIHx8IEFDQ19MSUJDX0lTT0M5OSkgJiYgZGVmaW5lZChDTE9DS1NfUEVSX1NFQykKKyMgIGRlZmluZSBfX0FDQ0xJQl9VQ0xPQ0tfVVNFX0NMT0NLIDEKKyNlbmRpZgorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX0NMT0NLKSAmJiAhZGVmaW5lZChDTE9DS1NfUEVSX1NFQykKKyMgIGlmIGRlZmluZWQoQ0xLX1RDSykKKyMgICAgZGVmaW5lIENMT0NLU19QRVJfU0VDIENMS19UQ0sKKyMgIGVsc2UKKyMgICAgdW5kZWYgX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSworIyAgZW5kaWYKKyNlbmRpZgorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX0dFVFJVU0FHRSkKKyMgIGlmICFkZWZpbmVkKFJVU0FHRV9TRUxGKQorIyAgICB1bmRlZiBfX0FDQ0xJQl9VQ0xPQ0tfVVNFX0dFVFJVU0FHRQorIyAgZW5kaWYKKyNlbmRpZgorQUNDTElCX1BVQkxJQyhpbnQsIGFjY191Y2xvY2tfb3BlbikgKGFjY191Y2xvY2tfaGFuZGxlX3AgaCkKK3sKKyAgICBpbnQgaTsKKyNpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9RUEMpCisgICAgTEFSR0VfSU5URUdFUiBsaTsKKyNlbmRpZgorICAgIGgtPmggPSAoYWNjbGliX2hhbmRsZV90KSAxOworICAgIGgtPm1vZGUgPSAwOworICAgIGgtPm5hbWUgPSBOVUxMOworI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgaC0+cGNoLmggPSAwOworICAgIGlmIChoLT5tb2RlID09IDAgJiYgYWNjX3BlcmZjdHJfb3BlbigmaC0+cGNoKSA9PSAwKQorICAgICAgICBoLT5tb2RlID0gMjsKKyNlbmRpZgorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1FQQykKKyAgICBoLT5xcGYgPSAwLjA7CisgICAgaWYgKGgtPm1vZGUgPT0gMCAmJiBRdWVyeVBlcmZvcm1hbmNlRnJlcXVlbmN5KCZsaSkgIT0gMCkgeworICAgICAgICBkb3VibGUgZCA9IChkb3VibGUpIGxpLlF1YWRQYXJ0OworICAgICAgICBpZiAoZCA+IDAuMCAmJiBRdWVyeVBlcmZvcm1hbmNlQ291bnRlcigmbGkpICE9IDApIHsKKyAgICAgICAgICAgIGgtPm1vZGUgPSAzOworICAgICAgICAgICAgaC0+cXBmID0gZDsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorICAgIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisgICAgICAgIGFjY191Y2xvY2tfdCBjOworICAgICAgICBhY2NfdWNsb2NrX3JlYWQoaCwgJmMpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KK0FDQ0xJQl9QVUJMSUMoaW50LCBhY2NfdWNsb2NrX2Nsb3NlKSAoYWNjX3VjbG9ja19oYW5kbGVfcCBoKQoreworICAgIGgtPmggPSAoYWNjbGliX2hhbmRsZV90KSAwOworICAgIGgtPm1vZGUgPSAtMTsKKyAgICBoLT5uYW1lID0gTlVMTDsKKyNpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9QRVJGQ1RSKQorICAgIGFjY19wZXJmY3RyX2Nsb3NlKCZoLT5wY2gpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CitBQ0NMSUJfUFVCTElDKHZvaWQsIGFjY191Y2xvY2tfcmVhZCkgKGFjY191Y2xvY2tfaGFuZGxlX3AgaCwgYWNjX3VjbG9ja19wIGMpCit7CisjaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfUkRUU0MpCisgICAgYWNjX3RzY19yZWFkKChhY2NfdWludDMyZV90KikgKHZvaWQqKSAmYy0+dHNjKTsKKyNlbmRpZgorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgaWYgKGgtPnBjaC5oKSB7CisgICAgICAgIGFjY19wZXJmY3RyX3JlYWQoJmgtPnBjaCwgJmMtPnBjYyk7CisgICAgICAgIGlmIChoLT5tb2RlID4gMCAmJiBoLT5tb2RlIDw9IDIpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorI2VuZGlmCisjaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfUVBDKQorICAgIGlmIChoLT5xcGYgPiAwLjApIHsKKyAgICAgICAgTEFSR0VfSU5URUdFUiBsaTsKKyAgICAgICAgaWYgKFF1ZXJ5UGVyZm9ybWFuY2VDb3VudGVyKCZsaSkgIT0gMCkgeworICAgICAgICAgICAgYy0+cXBjID0gKGFjY19pbnQ2NGxfdCkgbGkuUXVhZFBhcnQ7CisgICAgICAgICAgICBpZiAoaC0+bW9kZSA+IDAgJiYgaC0+bW9kZSA8PSAzKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGgtPm1vZGUgPSAwOyBoLT5xcGYgPSAwLjA7IGMtPnFwYyA9IDA7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICB7CisjaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfV0lOMTYpCisjIGlmIChBQ0NfQ0NfQVpURUNDKQorICAgIGMtPnRpY2tzLnQzMiA9IDA7CisjIGVsc2UKKyAgICB1bmlvbiBSRUdTIHJpLCBybzsKKyAgICByaS54LmF4ID0gMHgyYzAwOyBpbnQ4NigweDIxLCAmcmksICZybyk7CisgICAgYy0+dGlja3MudDMyID0gcm8uaC5jaCo2MFVMKjYwVUwqMTAwVUwgKyByby5oLmNsKjYwVUwqMTAwVUwgKyByby5oLmRoKjEwMFVMICsgcm8uaC5kbDsKKyMgZW5kaWYKKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19ESkdQUF9fKQorICAgIGMtPnRpY2tzLnQ2NCA9IHVjbG9jaygpOworI2VsaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfQ0xPQ0spICYmIGRlZmluZWQoYWNjX2ludDY0bF90KQorICAgIGMtPnRpY2tzLnQ2NCA9IGNsb2NrKCk7CisjZWxpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSykKKyAgICBjLT50aWNrcy50MzIgPSBjbG9jaygpOworI2VsaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfV0lOTU0pCisgICAgYy0+dGlja3MudDMyID0gdGltZUdldFRpbWUoKTsKKyNlbGlmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX0dFVFJVU0FHRSkKKyAgICBzdHJ1Y3QgcnVzYWdlIHJ1OworICAgIGlmIChnZXRydXNhZ2UoUlVTQUdFX1NFTEYsICZydSkgIT0gMCkgYy0+dGlja3MudGQgPSAwOworICAgIGVsc2UgYy0+dGlja3MudGQgPSBydS5ydV91dGltZS50dl9zZWMgKyBydS5ydV91dGltZS50dl91c2VjIC8gMTAwMDAwMC4wOworI2VsaWYgKEhBVkVfR0VUVElNRU9GREFZKQorICAgIHN0cnVjdCB0aW1ldmFsIHR2OworICAgIGlmIChnZXR0aW1lb2ZkYXkoJnR2LCAwKSAhPSAwKSBjLT50aWNrcy50ZCA9IDA7CisgICAgZWxzZSBjLT50aWNrcy50ZCA9IHR2LnR2X3NlYyArIHR2LnR2X3VzZWMgLyAxMDAwMDAwLjA7CisjZWxzZQorICAgIEFDQ19VTlVTRUQoYyk7CisjZW5kaWYKKyAgICB9CisgICAgQUNDX1VOVVNFRChoKTsKK30KK0FDQ0xJQl9QVUJMSUMoZG91YmxlLCBhY2NfdWNsb2NrX2dldF9lbGFwc2VkKSAoYWNjX3VjbG9ja19oYW5kbGVfcCBoLCBjb25zdCBhY2NfdWNsb2NrX3Agc3RhcnQsIGNvbnN0IGFjY191Y2xvY2tfcCBzdG9wKQoreworICAgIGRvdWJsZSBkOworICAgIGlmICghaC0+aCkgeworICAgICAgICBoLT5tb2RlID0gLTE7CisgICAgICAgIHJldHVybiAwLjA7CisgICAgfQorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1JEVFNDKQorICAgIGlmIChoLT5tb2RlID09IDEpIHsKKyAgICAgICAgaWYgKCFoLT5uYW1lKSBoLT5uYW1lID0gInJkdHNjIjsKKyAgICAgICAgZCA9IChkb3VibGUpICgoYWNjX2ludDY0bF90KXN0b3AtPnRzYyAtIChhY2NfaW50NjRsX3Qpc3RhcnQtPnRzYyk7CisgICAgICAgIHJldHVybiBkIC8gMTAwMDAwMDAwMC4wOworICAgIH0KKyNlbmRpZgorI2lmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1BFUkZDVFIpCisgICAgaWYgKGgtPnBjaC5oICYmIGgtPm1vZGUgPT0gMikgeworICAgICAgICBpZiAoIWgtPm5hbWUpIGgtPm5hbWUgPSAicGVyZmN0ciI7CisgICAgICAgIHJldHVybiBhY2NfcGVyZmN0cl9nZXRfZWxhcHNlZCgmaC0+cGNoLCAmc3RhcnQtPnBjYywgJnN0b3AtPnBjYyk7CisgICAgfQorI2VuZGlmCisjaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfUVBDKQorICAgIGlmIChoLT5xcGYgPiAwLjAgJiYgaC0+bW9kZSA9PSAzKSB7CisgICAgICAgIGlmICghaC0+bmFtZSkgaC0+bmFtZSA9ICJxcGMiOworICAgICAgICBpZiAoc3RhcnQtPnFwYyA9PSAwIHx8IHN0b3AtPnFwYyA9PSAwKSByZXR1cm4gMC4wOworICAgICAgICByZXR1cm4gKGRvdWJsZSkgKHN0b3AtPnFwYyAtIHN0YXJ0LT5xcGMpIC8gaC0+cXBmOworICAgIH0KKyNlbmRpZgorI2lmIChBQ0NfT1NfRE9TMTYgfHwgQUNDX09TX1dJTjE2KQorICAgIGgtPm1vZGUgPSAxMTsKKyAgICBpZiAoIWgtPm5hbWUpIGgtPm5hbWUgPSAidWNsb2NrIjsKKyAgICBkID0gKGRvdWJsZSkgKHN0b3AtPnRpY2tzLnQzMiAtIHN0YXJ0LT50aWNrcy50MzIpIC8gMTAwLjA7CisgICAgaWYgKGQgPCAwLjApIGQgKz0gODY0MDAuMDsKKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19ESkdQUF9fKQorICAgIGgtPm1vZGUgPSAxMjsKKyAgICBpZiAoIWgtPm5hbWUpIGgtPm5hbWUgPSAidWNsb2NrIjsKKyAgICBkID0gKGRvdWJsZSkgKHN0b3AtPnRpY2tzLnQ2NCAtIHN0YXJ0LT50aWNrcy50NjQpIC8gKFVDTE9DS1NfUEVSX1NFQyk7CisjZWxpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSykgJiYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgaC0+bW9kZSA9IDEzOworICAgIGlmICghaC0+bmFtZSkgaC0+bmFtZSA9ICJjbG9jayI7CisgICAgeworICAgIGFjY19pbnQ2NGxfdCB0OworICAgIHQgPSBzdG9wLT50aWNrcy50NjQgLSBzdGFydC0+dGlja3MudDY0OworICAgIGlmICh0IDwgMCkKKyAgICAgICAgdCArPSBzaXplb2YoY2xvY2tfdCkgPT0gNCA/IEFDQ19JTlQ2NF9DKDB4MTAwMDAwMDAwKSA6IEFDQ19JTlQ2NF9DKDApOworICAgIGQgPSAoZG91YmxlKSB0IC8gKENMT0NLU19QRVJfU0VDKTsKKyAgICB9CisjZWxpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9DTE9DSykKKyAgICBoLT5tb2RlID0gMTQ7CisgICAgaWYgKCFoLT5uYW1lKSBoLT5uYW1lID0gImNsb2NrIjsKKyAgICBkID0gKGRvdWJsZSkgKHN0b3AtPnRpY2tzLnQzMiAtIHN0YXJ0LT50aWNrcy50MzIpIC8gKENMT0NLU19QRVJfU0VDKTsKKyNlbGlmIChfX0FDQ0xJQl9VQ0xPQ0tfVVNFX1dJTk1NKQorICAgIGgtPm1vZGUgPSAxNTsKKyAgICBpZiAoIWgtPm5hbWUpIGgtPm5hbWUgPSAidGltZUdldFRpbWUiOworICAgIGQgPSAoZG91YmxlKSAoc3RvcC0+dGlja3MudDMyIC0gc3RhcnQtPnRpY2tzLnQzMikgLyAxMDAwLjA7CisjZWxpZiAoX19BQ0NMSUJfVUNMT0NLX1VTRV9HRVRSVVNBR0UpCisgICAgaC0+bW9kZSA9IDE2OworICAgIGlmICghaC0+bmFtZSkgaC0+bmFtZSA9ICJnZXRydXNhZ2UiOworICAgIGQgPSBzdG9wLT50aWNrcy50ZCAtIHN0YXJ0LT50aWNrcy50ZDsKKyNlbGlmIChIQVZFX0dFVFRJTUVPRkRBWSkKKyAgICBoLT5tb2RlID0gMTc7CisgICAgaWYgKCFoLT5uYW1lKSBoLT5uYW1lID0gImdldHRpbWVvZmRheSI7CisgICAgZCA9IHN0b3AtPnRpY2tzLnRkIC0gc3RhcnQtPnRpY2tzLnRkOworI2Vsc2UKKyAgICBoLT5tb2RlID0gMDsKKyAgICBkID0gMC4wOworI2VuZGlmCisgICAgcmV0dXJuIGQ7Cit9CitBQ0NMSUJfUFVCTElDKGludCwgYWNjX3VjbG9ja19mbHVzaF9jcHVfY2FjaGUpIChhY2NfdWNsb2NrX2hhbmRsZV9wIGgsIHVuc2lnbmVkIGZsYWdzKQoreworICAgIGlmIChoLT5oKSB7CisjaWYgKF9fQUNDTElCX1VDTE9DS19VU0VfUEVSRkNUUikKKyAgICAgICAgcmV0dXJuIGFjY19wZXJmY3RyX2ZsdXNoX2NwdV9jYWNoZSgmaC0+cGNoLCBmbGFncyk7CisjZW5kaWYKKyAgICB9CisgICAgQUNDX1VOVVNFRChoKTsgQUNDX1VOVVNFRChmbGFncyk7CisgICAgcmV0dXJuIC0xOworfQorI2lmIGRlZmluZWQoX19BQ0NMSUJfVUNMT0NLX05FRURfV0FSTl9QT1ApCisjICBpZiAoQUNDX0NDX01TQyAmJiAoX01TQ19WRVIgPj0gMTIwMCkpCisjICAgIHByYWdtYSB3YXJuaW5nKHBvcCkKKyMgIGVsc2UKKyMgICAgZXJyb3IgIl9fQUNDTElCX1VDTE9DS19ORUVEX1dBUk5fUE9QIgorIyAgZW5kaWYKKyMgIHVuZGVmIF9fQUNDTElCX1VDTE9DS19ORUVEX1dBUk5fUE9QCisjZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoQUNDX1dBTlRfQUNDTElCX01JU0MpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NMSUJfTUlTQworI2RlZmluZSBfX0FDQ0xJQl9NSVNDX0NIX0lOQ0xVREVEIDEKKyNpZiAhZGVmaW5lZChBQ0NMSUJfUFVCTElDKQorIyAgZGVmaW5lIEFDQ0xJQl9QVUJMSUMocixmKSAgICAgICAgICAgICAgICByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjZW5kaWYKKyNpZiAhZGVmaW5lZChBQ0NMSUJfUFVCTElDX05PSU5MSU5FKQorIyAgaWYgIWRlZmluZWQoX19hY2Nfbm9pbmxpbmUpCisjICAgIGRlZmluZSBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHIsZikgICAgIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyMgIGVsaWYgKEFDQ19DQ19HTlVDID49IDB4MDMwNDAwdWwpIHx8IChBQ0NfQ0NfTExWTSkKKyMgICAgZGVmaW5lIEFDQ0xJQl9QVUJMSUNfTk9JTkxJTkUocixmKSAgICAgX19hY2Nfbm9pbmxpbmUgX19hdHRyaWJ1dGVfXygoX191c2VkX18pKSByIF9fQUNDTElCX0ZVTkNOQU1FKGYpCisjICBlbHNlCisjICAgIGRlZmluZSBBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHIsZikgICAgIF9fYWNjX25vaW5saW5lIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyMgIGVuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09TX1dJTjMyICYmIEFDQ19DQ19QRUxMRVNDICYmIChfX1BPQ0NfXyA+PSAyOTApKQorIyAgcHJhZ21hIHdhcm4ocHVzaCkKKyMgIHByYWdtYSB3YXJuKGRpc2FibGU6MjAwNykKKyNlbmRpZgorQUNDTElCX1BVQkxJQyhjb25zdCBjaGFyICosIGFjY19nZXRlbnYpIChjb25zdCBjaGFyICpzKQoreworI2lmIGRlZmluZWQoSEFWRV9HRVRFTlYpCisgICAgcmV0dXJuIGdldGVudihzKTsKKyNlbHNlCisgICAgQUNDX1VOVVNFRChzKTsgcmV0dXJuIChjb25zdCBjaGFyICopIDA7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoYWNjbGliX2hhbmRsZV90LCBhY2NfZ2V0X29zZmhhbmRsZSkgKGludCBmZCkKK3sKKyAgICBpZiAoZmQgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisjaWYgKEFDQ19PU19DWUdXSU4pCisgICAgcmV0dXJuIGdldF9vc2ZoYW5kbGUoZmQpOworI2VsaWYgKEFDQ19PU19FTVggJiYgZGVmaW5lZChfX1JTWE5UX18pKQorICAgIHJldHVybiAtMTsKKyNlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19QVzMyX18pCisgICAgcmV0dXJuIC0xOworI2VsaWYgKEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisjIGlmIChBQ0NfQ0NfUEVMTEVTQyAmJiAoX19QT0NDX18gPCAyODApKQorICAgIHJldHVybiAtMTsKKyMgZWxpZiAoQUNDX0NDX1dBVENPTUMgJiYgKF9fV0FUQ09NQ19fIDwgMTAwMCkpCisgICAgcmV0dXJuIC0xOworIyBlbGlmIChBQ0NfQ0NfV0FUQ09NQyAmJiAoX19XQVRDT01DX18gPCAxMTAwKSkKKyAgICByZXR1cm4gX29zX2hhbmRsZShmZCk7CisjIGVsc2UKKyAgICByZXR1cm4gX2dldF9vc2ZoYW5kbGUoZmQpOworIyBlbmRpZgorI2Vsc2UKKyAgICByZXR1cm4gZmQ7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoaW50LCBhY2Nfc2V0X2Jpbm1vZGUpIChpbnQgZmQsIGludCBiaW5hcnkpCit7CisjaWYgKEFDQ19BUkNIX002OEsgJiYgQUNDX09TX1RPUyAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX01JTlRfXykKKyAgICBGSUxFKiBmcDsgaW50IG9sZF9iaW5hcnk7CisgICAgaWYgKGZkID09IFNURElOX0ZJTEVOTykgZnAgPSBzdGRpbjsKKyAgICBlbHNlIGlmIChmZCA9PSBTVERPVVRfRklMRU5PKSBmcCA9IHN0ZG91dDsKKyAgICBlbHNlIGlmIChmZCA9PSBTVERFUlJfRklMRU5PKSBmcCA9IHN0ZGVycjsKKyAgICBlbHNlIHJldHVybiAtMTsKKyAgICBvbGRfYmluYXJ5ID0gZnAtPl9fbW9kZS5fX2JpbmFyeTsKKyAgICBfX3NldF9iaW5tb2RlKGZwLCBiaW5hcnkgPyAxIDogMCk7CisgICAgcmV0dXJuIG9sZF9iaW5hcnkgPyAxIDogMDsKKyNlbGlmIChBQ0NfQVJDSF9NNjhLICYmIEFDQ19PU19UT1MpCisgICAgQUNDX1VOVVNFRChmZCk7IEFDQ19VTlVTRUQoYmluYXJ5KTsKKyAgICByZXR1cm4gLTE7CisjZWxpZiAoQUNDX09TX0RPUzE2ICYmIChBQ0NfQ0NfQVpURUNDIHx8IEFDQ19DQ19QQUNJRklDQykpCisgICAgQUNDX1VOVVNFRChmZCk7IEFDQ19VTlVTRUQoYmluYXJ5KTsKKyAgICByZXR1cm4gLTE7CisjZWxpZiAoQUNDX09TX0RPUzMyICYmIEFDQ19DQ19HTlVDKSAmJiBkZWZpbmVkKF9fREpHUFBfXykKKyAgICBpbnQgcjsgdW5zaWduZWQgb2xkX2ZsYWdzID0gX19kamdwcF9od2ludF9mbGFnczsKKyAgICBBQ0NfQ09NUElMRV9USU1FX0FTU0VSVChPX0JJTkFSWSA+IDApCisgICAgQUNDX0NPTVBJTEVfVElNRV9BU1NFUlQoT19URVhUID4gMCkKKyAgICBpZiAoZmQgPCAwKSByZXR1cm4gLTE7CisgICAgciA9IHNldG1vZGUoZmQsIGJpbmFyeSA/IE9fQklOQVJZIDogT19URVhUKTsKKyAgICBpZiAoKG9sZF9mbGFncyAmIDF1KSAhPSAoX19kamdwcF9od2ludF9mbGFncyAmIDF1KSkKKyAgICAgICAgX19kamdwcF9zZXRfY3RybF9jKCEob2xkX2ZsYWdzICYgMSkpOworICAgIGlmIChyID09IC0xKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIChyICYgT19URVhUKSA/IDAgOiAxOworI2VsaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX1BXMzJfXykKKyAgICBpZiAoZmQgPCAwKSByZXR1cm4gLTE7CisgICAgQUNDX1VOVVNFRChiaW5hcnkpOworICAgIHJldHVybiAxOworI2VsaWYgKEFDQ19PU19ET1MzMiAmJiBBQ0NfQ0NfSElHSEMpCisgICAgRklMRSogZnA7IGludCByOworICAgIGlmIChmZCA9PSBmaWxlbm8oc3RkaW4pKSBmcCA9IHN0ZGluOworICAgIGVsc2UgaWYgKGZkID09IGZpbGVubyhzdGRvdXQpKSBmcCA9IHN0ZG91dDsKKyAgICBlbHNlIGlmIChmZCA9PSBmaWxlbm8oc3RkZXJyKSkgZnAgPSBzdGRlcnI7CisgICAgZWxzZSByZXR1cm4gLTE7CisgICAgciA9IF9zZXRtb2RlKGZwLCBiaW5hcnkgPyBfQklOQVJZIDogX1RFWFQpOworICAgIGlmIChyID09IC0xKSByZXR1cm4gLTE7CisgICAgcmV0dXJuIChyICYgX0JJTkFSWSkgPyAxIDogMDsKKyNlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX01XRVJLUykgJiYgZGVmaW5lZChfX01TTF9fKQorICAgIEFDQ19VTlVTRUQoZmQpOyBBQ0NfVU5VU0VEKGJpbmFyeSk7CisgICAgcmV0dXJuIC0xOworI2VsaWYgKEFDQ19PU19DWUdXSU4gJiYgKEFDQ19DQ19HTlVDIDwgMHgwMjVhMDB1bCkpCisgICAgQUNDX1VOVVNFRChmZCk7IEFDQ19VTlVTRUQoYmluYXJ5KTsKKyAgICByZXR1cm4gLTE7CisjZWxpZiAoQUNDX09TX0NZR1dJTiB8fCBBQ0NfT1NfRE9TMTYgfHwgQUNDX09TX0RPUzMyIHx8IEFDQ19PU19FTVggfHwgQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2IHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisgICAgaW50IHI7CisjaWYgIWRlZmluZWQoQUNDX0NDX1pPUlRFQ0hDKQorICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKE9fQklOQVJZID4gMCkKKyNlbmRpZgorICAgIEFDQ19DT01QSUxFX1RJTUVfQVNTRVJUKE9fVEVYVCA+IDApCisgICAgaWYgKGZkIDwgMCkgcmV0dXJuIC0xOworICAgIHIgPSBzZXRtb2RlKGZkLCBiaW5hcnkgPyBPX0JJTkFSWSA6IE9fVEVYVCk7CisgICAgaWYgKHIgPT0gLTEpIHJldHVybiAtMTsKKyAgICByZXR1cm4gKHIgJiBPX1RFWFQpID8gMCA6IDE7CisjZWxzZQorICAgIGlmIChmZCA8IDApIHJldHVybiAtMTsKKyAgICBBQ0NfVU5VU0VEKGJpbmFyeSk7CisgICAgcmV0dXJuIDE7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoaW50LCBhY2NfaXNhdHR5KSAoaW50IGZkKQoreworICAgIGlmIChmZCA8IDApCisgICAgICAgIHJldHVybiAwOworI2lmIChBQ0NfT1NfRE9TMTYgJiYgIWRlZmluZWQoQUNDX0NDX0FaVEVDQykpCisgICAgeworICAgICAgICB1bmlvbiBSRUdTIHJpLCBybzsKKyAgICAgICAgcmkueC5heCA9IDB4NDQwMDsgcmkueC5ieCA9IGZkOworICAgICAgICBpbnQ4NigweDIxLCAmcmksICZybyk7CisgICAgICAgIGlmICgocm8ueC5jZmxhZyAmIDEpID09IDApCisgICAgICAgICAgICBpZiAoKHJvLnguYXggJiAweDgzKSAhPSAweDgzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX1dBVENPTUMpCisgICAgeworICAgICAgICB1bmlvbiBSRUdTIHJpLCBybzsKKyAgICAgICAgcmkudy5heCA9IDB4NDQwMDsgcmkudy5ieCA9ICh1bnNpZ25lZCBzaG9ydCkgZmQ7CisgICAgICAgIGludDM4NigweDIxLCAmcmksICZybyk7CisgICAgICAgIGlmICgocm8udy5jZmxhZyAmIDEpID09IDApCisgICAgICAgICAgICBpZiAoKHJvLncuYXggJiAweDgzKSAhPSAweDgzKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyNlbGlmIChBQ0NfSEFWRV9XSU5ET1dTX0gpCisgICAgeworICAgICAgICBhY2NsaWJfaGFuZGxlX3QgaCA9IF9fQUNDTElCX0ZVTkNOQU1FKGFjY19nZXRfb3NmaGFuZGxlKShmZCk7CisgICAgICAgIGlmICgoSEFORExFKWggIT0gSU5WQUxJRF9IQU5ETEVfVkFMVUUpCisgICAgICAgIHsKKyAgICAgICAgICAgIERXT1JEIGQgPSAwOworICAgICAgICAgICAgaWYgKEdldENvbnNvbGVNb2RlKChIQU5ETEUpaCwgJmQpID09IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKEhBVkVfSVNBVFRZKQorICAgIHJldHVybiAoaXNhdHR5KGZkKSkgPyAxIDogMDsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KK0FDQ0xJQl9QVUJMSUMoaW50LCBhY2NfbWtkaXIpIChjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBtb2RlKQoreworI2lmICFkZWZpbmVkKEhBVkVfTUtESVIpCisgICAgQUNDX1VOVVNFRChuYW1lKTsgQUNDX1VOVVNFRChtb2RlKTsKKyAgICByZXR1cm4gLTE7CisjZWxpZiAoQUNDX0FSQ0hfTTY4SyAmJiBBQ0NfT1NfVE9TICYmIChBQ0NfQ0NfUFVSRUMgfHwgQUNDX0NDX1RVUkJPQykpCisgICAgQUNDX1VOVVNFRChtb2RlKTsKKyAgICByZXR1cm4gRGNyZWF0ZShuYW1lKTsKKyNlbGlmIChBQ0NfT1NfRE9TMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19ESkdQUF9fKQorICAgIHJldHVybiBta2RpcihuYW1lLCBtb2RlKTsKKyNlbGlmIChBQ0NfT1NfV0lOMzIgJiYgQUNDX0NDX0dOVUMpICYmIGRlZmluZWQoX19QVzMyX18pCisgICAgcmV0dXJuIG1rZGlyKG5hbWUsIG1vZGUpOworI2VsaWYgKEFDQ19PU19ET1MxNiB8fCBBQ0NfT1NfRE9TMzIgfHwgQUNDX09TX09TMiB8fCBBQ0NfT1NfT1MyMTYgfHwgQUNDX09TX1dJTjE2IHx8IEFDQ19PU19XSU4zMiB8fCBBQ0NfT1NfV0lONjQpCisgICAgQUNDX1VOVVNFRChtb2RlKTsKKyMgaWYgKEFDQ19DQ19ISUdIQyB8fCBBQ0NfQ0NfUEFDSUZJQ0MpCisgICAgcmV0dXJuIG1rZGlyKChjaGFyKikgbmFtZSk7CisjIGVsc2UKKyAgICByZXR1cm4gbWtkaXIobmFtZSk7CisjIGVuZGlmCisjZWxzZQorICAgIHJldHVybiBta2RpcihuYW1lLCBtb2RlKTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQyhpbnQsIGFjY19ybWRpcikgKGNvbnN0IGNoYXIqIG5hbWUpCit7CisjaWYgIWRlZmluZWQoSEFWRV9STURJUikKKyAgICBBQ0NfVU5VU0VEKG5hbWUpOworICAgIHJldHVybiAtMTsKKyNlbGlmICgoQUNDX09TX0RPUzE2IHx8IEFDQ19PU19ET1MzMikgJiYgKEFDQ19DQ19ISUdIQyB8fCBBQ0NfQ0NfUEFDSUZJQ0MpKQorICAgIHJldHVybiBybWRpcigoY2hhciAqKSBuYW1lKTsKKyNlbHNlCisgICAgcmV0dXJuIHJtZGlyKG5hbWUpOworI2VuZGlmCit9CisjaWYgZGVmaW5lZChhY2NfaW50MzJlX3QpCitBQ0NMSUJfUFVCTElDKGFjY19pbnQzMmVfdCwgYWNjX211bGRpdjMycykgKGFjY19pbnQzMmVfdCBhLCBhY2NfaW50MzJlX3QgYiwgYWNjX2ludDMyZV90IHgpCit7CisgICAgYWNjX2ludDMyZV90IHIgPSAwOworICAgIGlmIF9fYWNjX2xpa2VseSh4ICE9IDApCisgICAgeworI2lmIGRlZmluZWQoYWNjX2ludDY0bF90KQorICAgICAgICByID0gKGFjY19pbnQzMmVfdCkgKCgoYWNjX2ludDY0bF90KSBhICogYikgLyB4KTsKKyNlbHNlCisgICAgICAgIEFDQ19VTlVTRUQoYSk7IEFDQ19VTlVTRUQoYik7CisjZW5kaWYKKyAgICB9CisgICAgcmV0dXJuIHI7Cit9CitBQ0NMSUJfUFVCTElDKGFjY191aW50MzJlX3QsIGFjY19tdWxkaXYzMnUpIChhY2NfdWludDMyZV90IGEsIGFjY191aW50MzJlX3QgYiwgYWNjX3VpbnQzMmVfdCB4KQoreworICAgIGFjY191aW50MzJlX3QgciA9IDA7CisgICAgaWYgX19hY2NfbGlrZWx5KHggIT0gMCkKKyAgICB7CisjaWYgZGVmaW5lZChhY2NfaW50NjRsX3QpCisgICAgICAgIHIgPSAoYWNjX3VpbnQzMmVfdCkgKCgoYWNjX3VpbnQ2NGxfdCkgYSAqIGIpIC8geCk7CisjZWxzZQorICAgICAgICBBQ0NfVU5VU0VEKGEpOyBBQ0NfVU5VU0VEKGIpOworI2VuZGlmCisgICAgfQorICAgIHJldHVybiByOworfQorI2VuZGlmCisjaWYgMAorQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19zeXNjYWxsX2Nsb2NrX2dldHRpbWUpIChpbnQgYykKK3sKK30KKyNlbmRpZgorI2lmIChBQ0NfT1NfV0lOMTYpCitBQ0NfRVhURVJOX0Mgdm9pZCBfX2ZhciBfX3Bhc2NhbCBEZWJ1Z0JyZWFrKHZvaWQpOworI2VuZGlmCitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19icmVhaykgKHZvaWQpCit7CisjaWYgKEFDQ19PU19XSU4xNikKKyAgICBEZWJ1Z0JyZWFrKCk7CisjZWxpZiAoQUNDX0FSQ0hfSTA4NikKKyNlbGlmIChBQ0NfT1NfV0lONjQpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpCisgICAgRGVidWdCcmVhaygpOworI2VsaWYgZGVmaW5lZChBQ0NfQ0ZHX05PX0lOTElORV9BU00pICYmIChBQ0NfT1NfV0lOMzIpICYmIChBQ0NfSEFWRV9XSU5ET1dTX0gpCisgICAgRGVidWdCcmVhaygpOworI2VsaWYgKEFDQ19BUkNIX0FNRDY0IHx8IEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9HTlVDKQorICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJpbnQgJDNcbiIgOiA6IDogX19BQ0NfQVNNX0NMT0JCRVIpOworI2VsaWYgKEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9NU0MpCisgICAgX19hc20geyBpbnQgMyB9CisjZWxpZiAoQUNDX09TX1dJTjMyKSAmJiAoQUNDX0hBVkVfV0lORE9XU19IKQorICAgIERlYnVnQnJlYWsoKTsKKyNlbHNlCisgICAgKiAodm9sYXRpbGUgaW50ICopIDB4MSA9IC0xOworI2VuZGlmCit9CitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHZvaWQsIGFjY19kZWJ1Z19ub3ApICh2b2lkKQoreworfQorQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19kZWJ1Z19hbGlnbl9jaGVja19xdWVyeSkgKHZvaWQpCit7CisjaWYgKEFDQ19BUkNIX0FNRDY0IHx8IEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9HTlVDKQorICAgIHNpemVfdCByOworICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZlxuIHBvcCAlMFxuIiA6ICI9YSIgKHIpIDogOiBfX0FDQ19BU01fQ0xPQkJFUik7CisgICAgcmV0dXJuIChpbnQpKHIgPj4gMTgpICYgMTsKKyNlbGlmIChBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfTVNDKQorICAgIHVuc2lnbmVkIGxvbmcgcjsKKyAgICBfX2FzbSB7CisgICAgICAgIHB1c2hmCisgICAgICAgIHBvcCBlYXgKKyAgICAgICAgbW92IHIsZWF4CisgICAgfQorICAgIHJldHVybiAoaW50KShyID4+IDE4KSAmIDE7CisjZWxzZQorICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQorQUNDTElCX1BVQkxJQ19OT0lOTElORShpbnQsIGFjY19kZWJ1Z19hbGlnbl9jaGVja19lbmFibGUpIChpbnQgdikKK3sKKyAgICBpbnQgcjsKKyNpZiAoQUNDX0FSQ0hfQU1ENjQpICYmIChBQ0NfQVNNX1NZTlRBWF9HTlVDKQorICAgIGlmICh2KSB7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZlxuIG9ybCAkMjYyMTQ0LCglJXJzcClcbiBwb3BmXG4iIDogOiA6IF9fQUNDX0FTTV9DTE9CQkVSKTsKKyAgICB9IGVsc2UgeworICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZcbiBhbmRsICQtMjYyMTQ1LCglJXJzcClcbiBwb3BmXG4iIDogOiA6IF9fQUNDX0FTTV9DTE9CQkVSKTsKKyAgICB9CisgICAgciA9IDA7CisjZWxpZiAoQUNDX0FSQ0hfSTM4NikgJiYgKEFDQ19BU01fU1lOVEFYX0dOVUMpCisgICAgaWYgKHYpIHsKKyAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmXG4gb3JsICQyNjIxNDQsKCUlZXNwKVxuIHBvcGZcbiIgOiA6IDogX19BQ0NfQVNNX0NMT0JCRVIpOworICAgIH0gZWxzZSB7CisgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZlxuIGFuZGwgJC0yNjIxNDUsKCUlZXNwKVxuIHBvcGZcbiIgOiA6IDogX19BQ0NfQVNNX0NMT0JCRVIpOworICAgIH0KKyAgICByID0gMDsKKyNlbGlmIChBQ0NfQVJDSF9JMzg2KSAmJiAoQUNDX0FTTV9TWU5UQVhfTVNDKQorICAgIGlmICh2KSB7IF9fYXNtIHsKKyAgICAgICAgcHVzaGYKKyAgICAgICAgb3IgZHdvcmQgcHRyIFtlc3BdLDI2MjE0NAorICAgICAgICBwb3BmCisgICAgfX0gZWxzZSB7IF9fYXNtIHsKKyAgICAgICAgcHVzaGYKKyAgICAgICAgYW5kIGR3b3JkIHB0ciBbZXNwXSwtMjYyMTQ1CisgICAgICAgIHBvcGYKKyAgICB9fQorICAgIHIgPSAwOworI2Vsc2UKKyAgICByID0gLTE7CisjZW5kaWYKKyAgICBBQ0NfVU5VU0VEKHYpOyByZXR1cm4gcjsKK30KK0FDQ0xJQl9QVUJMSUNfTk9JTkxJTkUodW5zaWduZWQsIGFjY19kZWJ1Z19ydW5uaW5nX29uX3FlbXUpICh2b2lkKQoreworICAgIHVuc2lnbmVkIHIgPSAwOworI2lmIChBQ0NfT1NfUE9TSVhfTElOVVggfHwgQUNDX09TX1dJTjMyIHx8IEFDQ19PU19XSU42NCkKKyAgICBjb25zdCBjaGFyKiBwOworICAgIHAgPSBhY2NfZ2V0ZW52KCJBQ0NfRU5WX1JVTk5JTkdfT05fUUVNVSIpOworICAgIGlmIChwKSB7CisgICAgICAgIGlmIChwWzBdID09IDApIHIgPSAwOworICAgICAgICBlbHNlIGlmICgocFswXSA+PSAnMCcgJiYgcFswXSA8PSAnOScpICYmIHBbMV0gPT0gMCkgciA9IHBbMF0gLSAnMCc7CisgICAgICAgIGVsc2UgciA9IDE7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuIHI7Cit9CitBQ0NMSUJfUFVCTElDX05PSU5MSU5FKHVuc2lnbmVkLCBhY2NfZGVidWdfcnVubmluZ19vbl92YWxncmluZCkgKHZvaWQpCit7CisjaWYgKEFDQ19BUkNIX0FNRDY0IHx8IEFDQ19BUkNIX0kzODYpICYmIChBQ0NfQVNNX1NZTlRBWF9HTlVDKQorICAgIHZvbGF0aWxlIHVuc2lnbmVkIGxvbmcgYXJnc1s1XSA9IHsgMHgxMDAxLCAwLCAwLCAwLCAwIH07CisgICAgdW5zaWduZWQgbG9uZyByID0gMDsKKyAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHhjMSwweGMwLDB4MWQsMHhjMSwweGMwLDB4MDMsMHhjMSwweGM4LDB4MWIsMHhjMSwweGM4LDB4MDUsMHhjMSwweGMwLDB4MGQsMHhjMSwweGMwLDB4MTNcbiIgOiAiPWQiIChyKSA6ICJhIiAoJmFyZ3NbMF0pLCAiZCIgKHIpIDogX19BQ0NfQVNNX0NMT0JCRVIpOworICAgIHJldHVybiAodW5zaWduZWQpIHI7CisjZWxzZQorICAgIHJldHVybiAwOworI2VuZGlmCit9CisjaWYgKEFDQ19PU19XSU4zMiAmJiBBQ0NfQ0NfUEVMTEVTQyAmJiAoX19QT0NDX18gPj0gMjkwKSkKKyMgIHByYWdtYSB3YXJuKHBvcCkKKyNlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChBQ0NfV0FOVF9BQ0NMSUJfV0lMREFSR1YpCisjICB1bmRlZiBBQ0NfV0FOVF9BQ0NMSUJfV0lMREFSR1YKKyNkZWZpbmUgX19BQ0NMSUJfV0lMREFSR1ZfQ0hfSU5DTFVERUQgMQorI2lmICFkZWZpbmVkKEFDQ0xJQl9QVUJMSUMpCisjICBkZWZpbmUgQUNDTElCX1BVQkxJQyhyLGYpICAgIHIgX19BQ0NMSUJfRlVOQ05BTUUoZikKKyNlbmRpZgorI2lmIChBQ0NfT1NfRE9TMTYgfHwgQUNDX09TMjE2IHx8IEFDQ19PU19XSU4xNikKKyNpZiAwICYmIChBQ0NfQ0NfTVNDKQorQUNDX0VYVEVSTl9DIGludCBfX2FjY19jZGVjbCBfX3NldGFyZ3Yodm9pZCk7CitBQ0NfRVhURVJOX0MgaW50IF9fYWNjX2NkZWNsIF9zZXRhcmd2KHZvaWQpOworQUNDX0VYVEVSTl9DIGludCBfX2FjY19jZGVjbCBfc2V0YXJndih2b2lkKSB7IHJldHVybiBfX3NldGFyZ3YoKTsgfQorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09TX1dJTjMyIHx8IEFDQ19PU19XSU42NCkKKyNpZiAoQUNDX0NDX0lOVEVMQyB8fCBBQ0NfQ0NfTVNDKQorQUNDX0VYVEVSTl9DIGludCBfX2FjY19jZGVjbCBfX3NldGFyZ3Yodm9pZCk7CitBQ0NfRVhURVJOX0MgaW50IF9fYWNjX2NkZWNsIF9zZXRhcmd2KHZvaWQpOworQUNDX0VYVEVSTl9DIGludCBfX2FjY19jZGVjbCBfc2V0YXJndih2b2lkKSB7IHJldHVybiBfX3NldGFyZ3YoKTsgfQorI2VuZGlmCisjZW5kaWYKKyNpZiAoQUNDX09TX0VNWCkKKyNkZWZpbmUgX19BQ0NMSUJfSEFWRV9BQ0NfV0lMREFSR1YgMQorQUNDTElCX1BVQkxJQyh2b2lkLCBhY2Nfd2lsZGFyZ3YpIChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBpZiAoYXJnYyAmJiBhcmd2KSB7CisgICAgICAgIF9yZXNwb25zZShhcmdjLCBhcmd2KTsKKyAgICAgICAgX3dpbGRjYXJkKGFyZ2MsIGFyZ3YpOworICAgIH0KK30KKyNlbmRpZgorI2lmIChBQ0NfT1NfQ09OU09MRV9QU1ApICYmIGRlZmluZWQoX19QU1BTREtfREVCVUdfXykKKyNkZWZpbmUgX19BQ0NMSUJfSEFWRV9BQ0NfV0lMREFSR1YgMQorQUNDX0VYVEVSTl9DIGludCBhY2NfcHNwX2luaXRfbW9kdWxlKGludCosIGNoYXIqKiosIGludCk7CitBQ0NMSUJfUFVCTElDKHZvaWQsIGFjY193aWxkYXJndikgKGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGFjY19wc3BfaW5pdF9tb2R1bGUoYXJnYywgYXJndiwgLTEpOworfQorI2VuZGlmCisjaWYgIWRlZmluZWQoX19BQ0NMSUJfSEFWRV9BQ0NfV0lMREFSR1YpCisjZGVmaW5lIF9fQUNDTElCX0hBVkVfQUNDX1dJTERBUkdWIDEKK0FDQ0xJQl9QVUJMSUModm9pZCwgYWNjX3dpbGRhcmd2KSAoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7CisjaWYgMSAmJiAoQUNDX0FSQ0hfSTA4NlBNKQorICAgIGlmIChBQ0NfTU1fQUhTSElGVCAhPSAzKSB7IGV4aXQoMSk7IH0KKyNlbGlmIDEgJiYgKEFDQ19BUkNIX002OEsgJiYgQUNDX09TX1RPUyAmJiBBQ0NfQ0NfR05VQykgJiYgZGVmaW5lZChfX01JTlRfXykKKyAgICBfX2Jpbm1vZGUoMSk7CisgICAgaWYgKGlzYXR0eSgxKSkgX19zZXRfYmlubW9kZShzdGRvdXQsIDApOworICAgIGlmIChpc2F0dHkoMikpIF9fc2V0X2Jpbm1vZGUoc3RkZXJyLCAwKTsKKyNlbmRpZgorICAgIEFDQ19VTlVTRUQoYXJnYyk7IEFDQ19VTlVTRUQoYXJndik7Cit9CisjZW5kaWYKKyNlbmRpZgorCisvKiB2aW06c2V0IHRzPTQgZXQ6ICovCmRpZmYgLS1naXQgYS9sem8tMi4wMy9zcmMvc3RhdHMxYS5oIGIvbHpvLTIuMDMvc3JjL3N0YXRzMWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTE2ZjgwCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvc3JjL3N0YXRzMWEuaApAQCAtMCwwICsxLDEzNyBAQAorLyogc3RhdHMxYS5oIC0tIHN0YXRpc3RpY3MgZm9yIHRoZSB0aGUgTFpPMUEgYWxnb3JpdGhtCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFpPIHBhY2thZ2UgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKyNpZm5kZWYgX19MWk9fU1RBVFMxQV9ICisjZGVmaW5lIF9fTFpPX1NUQVRTMUFfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vIGNvbGxlY3Qgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gd2hlbiBjb21wcmVzc2luZworLy8gdXNlZCBmb3IgZmluZXR1bmluZywgdmlldyB3aXRoIGEgZGVidWdnZXIKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisjICBkZWZpbmUgTFpPX1NUQVRTKGV4cHIpICAgZXhwcgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fU1RBVFMoZXhwcikgICAoKHZvaWQpIDApCisjZW5kaWYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy8vCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IHsKKworLyogY29uZmlndXJhdGlvbiAqLworICAgIHVuc2lnbmVkIHJiaXRzOworICAgIHVuc2lnbmVkIGNsZXZlbDsKKworLyogaW50ZXJuYWwgY29uZmlndXJhdGlvbiAqLworICAgIHVuc2lnbmVkIGRiaXRzOworICAgIHVuc2lnbmVkIGxiaXRzOworCisvKiBjb25zdGFudHMgKi8KKyAgICB1bnNpZ25lZCBtaW5fbWF0Y2hfc2hvcnQ7CisgICAgdW5zaWduZWQgbWF4X21hdGNoX3Nob3J0OworICAgIHVuc2lnbmVkIG1pbl9tYXRjaF9sb25nOworICAgIHVuc2lnbmVkIG1heF9tYXRjaF9sb25nOworICAgIHVuc2lnbmVkIG1pbl9vZmZzZXQ7CisgICAgdW5zaWduZWQgbWF4X29mZnNldDsKKyAgICB1bnNpZ25lZCByMG1pbjsKKyAgICB1bnNpZ25lZCByMGZhc3Q7CisgICAgdW5zaWduZWQgcjBtYXg7CisKKy8qIGNvdW50cyAqLworICAgIGxvbmcgc2hvcnRfbWF0Y2hlczsKKyAgICBsb25nIGxvbmdfbWF0Y2hlczsKKyAgICBsb25nIHIxX21hdGNoZXM7CisgICAgbG9uZyBsaXRfcnVuczsKKyAgICBsb25nIGxpdF9ydW5zX2FmdGVyX2xvbmdfbWF0Y2g7CisgICAgbG9uZyByMHNob3J0X3J1bnM7CisgICAgbG9uZyByMGZhc3RfcnVuczsKKyAgICBsb25nIHIwbG9uZ19ydW5zOworCisvKiAqLworICAgIGxvbmcgbGl0X3J1bltSU0laRV07CisgICAgbG9uZyBsaXRfcnVuX2FmdGVyX2xvbmdfbWF0Y2hbUlNJWkVdOworICAgIGxvbmcgc2hvcnRfbWF0Y2hbTUFYX01BVENIX1NIT1JUICsgMV07CisgICAgbG9uZyBsb25nX21hdGNoW01BWF9NQVRDSF9MT05HICsgMV07CisgICAgbG9uZyBtYXJrZXJbMjU2XTsKKworLyogdGhlc2UgY291bGQgcHJvdmUgdXNlZnVsIGZvciBmdXJ0aGVyIG9wdGltaXphdGlvbnMgKi8KKyAgICBsb25nIHNob3J0X21hdGNoX29mZnNldF9vc2l6ZVtNQVhfTUFUQ0hfU0hPUlQgKyAxXTsKKyAgICBsb25nIHNob3J0X21hdGNoX29mZnNldF8yNTZbTUFYX01BVENIX1NIT1JUICsgMV07CisgICAgbG9uZyBzaG9ydF9tYXRjaF9vZmZzZXRfMTAyNFtNQVhfTUFUQ0hfU0hPUlQgKyAxXTsKKyAgICBsb25nIG1hdGNoZXNfb3V0X29mX3JhbmdlOworICAgIGxvbmcgbWF0Y2hlc19vdXRfb2ZfcmFuZ2VfMjsKKyAgICBsb25nIG1hdGNoZXNfb3V0X29mX3JhbmdlXzQ7CisgICAgbG9uZyBtYXRjaF9vdXRfb2ZfcmFuZ2VbTUFYX01BVENIX1NIT1JUICsgMV07CisKKy8qICovCisgICAgbG9uZyBpbl9sZW47CisgICAgbG9uZyBvdXRfbGVuOworfQorbHpvMWFfc3RhdHNfdDsKKworZXh0ZXJuIGx6bzFhX3N0YXRzX3QgKmx6bzFhX3N0YXRzOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9zdGF0czFiLmggYi9sem8tMi4wMy9zcmMvc3RhdHMxYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNGY3MWUKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvc3RhdHMxYi5oCkBAIC0wLDAgKzEsMTQyIEBACisvKiBzdGF0czFiLmggLS0gc3RhdGlzdGljcyBmb3IgdGhlIHRoZSBMWk8gbGlicmFyeQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisvKiBXQVJOSU5HOiB0aGlzIGZpbGUgc2hvdWxkICpub3QqIGJlIHVzZWQgYnkgYXBwbGljYXRpb25zLiBJdCBpcworICAgcGFydCBvZiB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGxpYnJhcnkgYW5kIGlzIHN1YmplY3QKKyAgIHRvIGNoYW5nZS4KKyAqLworCisKKyNpZm5kZWYgX19MWk9fU1RBVFMxQl9ICisjZGVmaW5lIF9fTFpPX1NUQVRTMUJfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLyBDb2xsZWN0IHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uIHdoZW4gY29tcHJlc3NpbmcuCisvLyBVc2VmdWwgZm9yIGZpbmV0dW5pbmcgdGhlIGNvbXByZXNzaW9uIGFsZ29yaXRobS4KKy8vIEV4YW1pbmUgdGhlIHN5bWJvbCAnbHpvMWJfc3RhdHMnIHdpdGggYSBkZWJ1Z2dlci4KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworI2lmIGRlZmluZWQoTFpPX0NPTExFQ1RfU1RBVFMpCisjICBkZWZpbmUgTFpPX1NUQVRTKGV4cHIpICAgZXhwcgorI2Vsc2UKKyMgIGRlZmluZSBMWk9fU1RBVFMoZXhwcikgICAoKHZvaWQpIDApCisjZW5kaWYKKworCisjaWYgZGVmaW5lZChMWk9fQ09MTEVDVF9TVEFUUykKKwordHlwZWRlZiBzdHJ1Y3QKK3sKKy8qIGFsZ29yaXRobSBjb25maWd1cmF0aW9uICovCisgICAgdW5zaWduZWQgcl9iaXRzOworICAgIHVuc2lnbmVkIG0zb19iaXRzOworICAgIHVuc2lnbmVkIGRkX2JpdHM7CisgICAgdW5zaWduZWQgY2xldmVsOworCisvKiBpbnRlcm5hbCBjb25maWd1cmF0aW9uICovCisgICAgdW5zaWduZWQgZF9iaXRzOworICAgIGxvbmcgbWluX2xvb2thaGVhZDsKKyAgICBsb25nIG1heF9sb29rYmVoaW5kOworICAgIGNvbnN0IGNoYXIgKmNvbXByZXNzX2lkOworCisvKiBjb3VudHMgKi8KKyAgICBsb25nIGxpdF9ydW5zOworICAgIGxvbmcgcjBzaG9ydF9ydW5zOworICAgIGxvbmcgcjBmYXN0X3J1bnM7CisgICAgbG9uZyByMGxvbmdfcnVuczsKKyAgICBsb25nIG0xX21hdGNoZXM7CisgICAgbG9uZyBtMl9tYXRjaGVzOworICAgIGxvbmcgbTNfbWF0Y2hlczsKKyAgICBsb25nIG00X21hdGNoZXM7CisgICAgbG9uZyByMV9tYXRjaGVzOworCisvKiAqLworICAgIGxvbmcgbGl0X3J1bltSME1JTl07CisgICAgbG9uZyBtMl9tYXRjaFtNMl9NQVhfTEVOICsgMV07CisgICAgbG9uZyBtM19tYXRjaFtNM19NQVhfTEVOICsgMV07CisjaWYgKE0zT19CSVRTIDwgOCkKKyAgICBsb25nIGxpdF9ydW5zX2FmdGVyX20zX21hdGNoOworICAgIGxvbmcgbGl0X3J1bl9hZnRlcl9tM19tYXRjaFtMWk9fU0laRSg4LU0zT19CSVRTKV07CisjZW5kaWYKKworLyogKi8KKyAgICBsb25nIG1hdGNoZXM7CisgICAgbG9uZyBtYXRjaF9ieXRlczsKKyAgICBsb25nIGxpdGVyYWxzOworICAgIGxvbmcgbGl0ZXJhbF9vdmVyaGVhZDsKKyAgICBsb25nIGxpdGVyYWxfYnl0ZXM7CisgICAgZG91YmxlIGxpdGVyYWxfb3ZlcmhlYWRfcGVyY2VudDsKKworLyogKi8KKyAgICBsb25nIHVudXNlZF9kaWN0X2VudHJpZXM7CisgICAgZG91YmxlIHVudXNlZF9kaWN0X2VudHJpZXNfcGVyY2VudDsKKworLyogKi8KKyAgICBsb25nIGluX2xlbjsKKyAgICBsb25nIG91dF9sZW47Cit9Citsem8xYl9zdGF0c190OworCisKK3ZvaWQgX2x6bzFiX3N0YXRzX2luaXQobHpvMWJfc3RhdHNfdCAqbHpvX3N0YXRzKTsKK3ZvaWQgX2x6bzFiX3N0YXRzX2NhbGMobHpvMWJfc3RhdHNfdCAqbHpvX3N0YXRzKTsKKworZXh0ZXJuIGx6bzFiX3N0YXRzX3QgKiBjb25zdCBsem8xYl9zdGF0czsKKworI2RlZmluZSBsem9fc3RhdHNfdCAgICAgbHpvMWJfc3RhdHNfdAorI2RlZmluZSBsem9fc3RhdHMgICAgICAgbHpvMWJfc3RhdHMKKworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisjZW5kaWYgLyogYWxyZWFkeSBpbmNsdWRlZCAqLworCisvKgordmk6dHM9NDpldAorKi8KZGlmZiAtLWdpdCBhL2x6by0yLjAzL3NyYy9zdGF0czFjLmggYi9sem8tMi4wMy9zcmMvc3RhdHMxYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMjYxZTcKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy9zcmMvc3RhdHMxYy5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qIHN0YXRzMWMuaCAtLSBzdGF0aXN0aWNzIGZvciB0aGUgdGhlIExaTyBsaWJyYXJ5CisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKy8qIFdBUk5JTkc6IHRoaXMgZmlsZSBzaG91bGQgKm5vdCogYmUgdXNlZCBieSBhcHBsaWNhdGlvbnMuIEl0IGlzCisgICBwYXJ0IG9mIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbGlicmFyeSBhbmQgaXMgc3ViamVjdAorICAgdG8gY2hhbmdlLgorICovCisKKworI2lmbmRlZiBfX0xaT19TVEFUUzFDX0gKKyNkZWZpbmUgX19MWk9fU1RBVFMxQ19ICisKKyNkZWZpbmUgbHpvMWJfc3RhdHNfdCAgICAgICBsem8xY19zdGF0c190CisjZGVmaW5lIGx6bzFiX3N0YXRzICAgICAgICAgbHpvMWNfc3RhdHMKKyNkZWZpbmUgX2x6bzFiX3N0YXRzX2luaXQgICBfbHpvMWNfc3RhdHNfaW5pdAorI2RlZmluZSBfbHpvMWJfc3RhdHNfY2FsYyAgIF9sem8xY19zdGF0c19jYWxjCisKKyNpbmNsdWRlICJzdGF0czFiLmgiCisKKyNlbmRpZiAvKiBhbHJlYWR5IGluY2x1ZGVkICovCisKKy8qCit2aTp0cz00OmV0CisqLwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvdGVzdHMvTWFrZWZpbGUuYW0gYi9sem8tMi4wMy90ZXN0cy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODI0NmIzCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdGVzdHMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwxNyBAQAorIyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvbWFrZSB0byBjcmVhdGUgTWFrZWZpbGUuaW4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyMKKworSU5DTFVERVMgPSAtSSQodG9wX3NyY2RpcikvaW5jbHVkZSAtSSQodG9wX3NyY2RpcikKKworbm9pbnN0X1BST0dSQU1TID0gYWxpZ24gY2hrc3VtIHByb21vdGUgc2l6ZXMKKworYWxpZ25fU09VUkNFUyA9IGFsaWduLmMKK2Noa3N1bV9TT1VSQ0VTID0gY2hrc3VtLmMKK3Byb21vdGVfU09VUkNFUyA9IHByb21vdGUuYworc2l6ZXNfU09VUkNFUyA9IHNpemVzLmMKKworYWxpZ25fTERBREQgPSAuLi9zcmMvbGlibHpvMi5sYQorY2hrc3VtX0xEQUREID0gLi4vc3JjL2xpYmx6bzIubGEKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvdGVzdHMvTWFrZWZpbGUuaW4gYi9sem8tMi4wMy90ZXN0cy9NYWtlZmlsZS5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODZhYTFmCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdGVzdHMvTWFrZWZpbGUuaW4KQEAgLTAsMCArMSw0NjggQEAKKyMgTWFrZWZpbGUuaW4gZ2VuZXJhdGVkIGJ5IGF1dG9tYWtlIDEuOS42IGZyb20gTWFrZWZpbGUuYW0uCisjIEBjb25maWd1cmVfaW5wdXRACisKKyMgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLAorIyAyMDAzLCAyMDA0LCAyMDA1ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyMgVGhpcyBNYWtlZmlsZS5pbiBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCisjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsCisjIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXc7IHdpdGhvdXQKKyMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQorIyBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK0BTRVRfTUFLRUAKKworIworIyBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorIworCitzcmNkaXIgPSBAc3JjZGlyQAordG9wX3NyY2RpciA9IEB0b3Bfc3JjZGlyQAorVlBBVEggPSBAc3JjZGlyQAorcGtnZGF0YWRpciA9ICQoZGF0YWRpcikvQFBBQ0tBR0VACitwa2dsaWJkaXIgPSAkKGxpYmRpcikvQFBBQ0tBR0VACitwa2dpbmNsdWRlZGlyID0gJChpbmNsdWRlZGlyKS9AUEFDS0FHRUAKK3RvcF9idWlsZGRpciA9IC4uCithbV9fY2QgPSBDRFBBVEg9IiQke1pTSF9WRVJTSU9OKy59JChQQVRIX1NFUEFSQVRPUikiICYmIGNkCitJTlNUQUxMID0gQElOU1RBTExACitpbnN0YWxsX3NoX0RBVEEgPSAkKGluc3RhbGxfc2gpIC1jIC1tIDY0NAoraW5zdGFsbF9zaF9QUk9HUkFNID0gJChpbnN0YWxsX3NoKSAtYworaW5zdGFsbF9zaF9TQ1JJUFQgPSAkKGluc3RhbGxfc2gpIC1jCitJTlNUQUxMX0hFQURFUiA9ICQoSU5TVEFMTF9EQVRBKQordHJhbnNmb3JtID0gJChwcm9ncmFtX3RyYW5zZm9ybV9uYW1lKQorTk9STUFMX0lOU1RBTEwgPSA6CitQUkVfSU5TVEFMTCA9IDoKK1BPU1RfSU5TVEFMTCA9IDoKK05PUk1BTF9VTklOU1RBTEwgPSA6CitQUkVfVU5JTlNUQUxMID0gOgorUE9TVF9VTklOU1RBTEwgPSA6CitidWlsZF90cmlwbGV0ID0gQGJ1aWxkQAoraG9zdF90cmlwbGV0ID0gQGhvc3RACit0YXJnZXRfdHJpcGxldCA9IEB0YXJnZXRACitub2luc3RfUFJPR1JBTVMgPSBhbGlnbiQoRVhFRVhUKSBjaGtzdW0kKEVYRUVYVCkgcHJvbW90ZSQoRVhFRVhUKSBcCisJc2l6ZXMkKEVYRUVYVCkKK3N1YmRpciA9IHRlc3RzCitESVNUX0NPTU1PTiA9ICQoc3JjZGlyKS9NYWtlZmlsZS5hbSAkKHNyY2RpcikvTWFrZWZpbGUuaW4KK0FDTE9DQUxfTTQgPSAkKHRvcF9zcmNkaXIpL2FjbG9jYWwubTQKK2FtX19hY2xvY2FsX200X2RlcHMgPSAkKHRvcF9zcmNkaXIpL2NvbmZpZ3VyZS5hYworYW1fX2NvbmZpZ3VyZV9kZXBzID0gJChhbV9fYWNsb2NhbF9tNF9kZXBzKSAkKENPTkZJR1VSRV9ERVBFTkRFTkNJRVMpIFwKKwkkKEFDTE9DQUxfTTQpCitta2luc3RhbGxkaXJzID0gJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9hdXRvY29uZi9ta2luc3RhbGxkaXJzCitDT05GSUdfSEVBREVSID0gJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5oCitDT05GSUdfQ0xFQU5fRklMRVMgPQorUFJPR1JBTVMgPSAkKG5vaW5zdF9QUk9HUkFNUykKK2FtX2FsaWduX09CSkVDVFMgPSBhbGlnbi4kKE9CSkVYVCkKK2FsaWduX09CSkVDVFMgPSAkKGFtX2FsaWduX09CSkVDVFMpCithbGlnbl9ERVBFTkRFTkNJRVMgPSAuLi9zcmMvbGlibHpvMi5sYQorYW1fY2hrc3VtX09CSkVDVFMgPSBjaGtzdW0uJChPQkpFWFQpCitjaGtzdW1fT0JKRUNUUyA9ICQoYW1fY2hrc3VtX09CSkVDVFMpCitjaGtzdW1fREVQRU5ERU5DSUVTID0gLi4vc3JjL2xpYmx6bzIubGEKK2FtX3Byb21vdGVfT0JKRUNUUyA9IHByb21vdGUuJChPQkpFWFQpCitwcm9tb3RlX09CSkVDVFMgPSAkKGFtX3Byb21vdGVfT0JKRUNUUykKK3Byb21vdGVfTERBREQgPSAkKExEQUREKQorYW1fc2l6ZXNfT0JKRUNUUyA9IHNpemVzLiQoT0JKRVhUKQorc2l6ZXNfT0JKRUNUUyA9ICQoYW1fc2l6ZXNfT0JKRUNUUykKK3NpemVzX0xEQUREID0gJChMREFERCkKK0RFRkFVTFRfSU5DTFVERVMgPSAtSS4gLUkkKHNyY2RpcikgLUkkKHRvcF9idWlsZGRpcikKK2RlcGNvbXAgPSAkKFNIRUxMKSAkKHRvcF9zcmNkaXIpL2F1dG9jb25mL2RlcGNvbXAKK2FtX19kZXBmaWxlc19tYXliZSA9IGRlcGZpbGVzCitDT01QSUxFID0gJChDQykgJChERUZTKSAkKERFRkFVTFRfSU5DTFVERVMpICQoSU5DTFVERVMpICQoQU1fQ1BQRkxBR1MpIFwKKwkkKENQUEZMQUdTKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpCitMVENPTVBJTEUgPSAkKExJQlRPT0wpIC0tdGFnPUNDIC0tbW9kZT1jb21waWxlICQoQ0MpICQoREVGUykgXAorCSQoREVGQVVMVF9JTkNMVURFUykgJChJTkNMVURFUykgJChBTV9DUFBGTEFHUykgJChDUFBGTEFHUykgXAorCSQoQU1fQ0ZMQUdTKSAkKENGTEFHUykKK0NDTEQgPSAkKENDKQorTElOSyA9ICQoTElCVE9PTCkgLS10YWc9Q0MgLS1tb2RlPWxpbmsgJChDQ0xEKSAkKEFNX0NGTEFHUykgJChDRkxBR1MpIFwKKwkkKEFNX0xERkxBR1MpICQoTERGTEFHUykgLW8gJEAKK1NPVVJDRVMgPSAkKGFsaWduX1NPVVJDRVMpICQoY2hrc3VtX1NPVVJDRVMpICQocHJvbW90ZV9TT1VSQ0VTKSBcCisJJChzaXplc19TT1VSQ0VTKQorRElTVF9TT1VSQ0VTID0gJChhbGlnbl9TT1VSQ0VTKSAkKGNoa3N1bV9TT1VSQ0VTKSAkKHByb21vdGVfU09VUkNFUykgXAorCSQoc2l6ZXNfU09VUkNFUykKK0VUQUdTID0gZXRhZ3MKK0NUQUdTID0gY3RhZ3MKK0RJU1RGSUxFUyA9ICQoRElTVF9DT01NT04pICQoRElTVF9TT1VSQ0VTKSAkKFRFWElORk9TKSAkKEVYVFJBX0RJU1QpCitBQ0xPQ0FMID0gQEFDTE9DQUxACitBTURFUF9GQUxTRSA9IEBBTURFUF9GQUxTRUAKK0FNREVQX1RSVUUgPSBAQU1ERVBfVFJVRUAKK0FNVEFSID0gQEFNVEFSQAorQVIgPSBAQVJACitBVVRPQ09ORiA9IEBBVVRPQ09ORkAKK0FVVE9IRUFERVIgPSBAQVVUT0hFQURFUkAKK0FVVE9NQUtFID0gQEFVVE9NQUtFQAorQVdLID0gQEFXS0AKK0NDID0gQENDQAorQ0NERVBNT0RFID0gQENDREVQTU9ERUAKK0NGTEFHUyA9IEBDRkxBR1NACitDUFAgPSBAQ1BQQAorQ1BQRkxBR1MgPSBAQ1BQRkxBR1NACitDWFggPSBAQ1hYQAorQ1hYQ1BQID0gQENYWENQUEAKK0NYWERFUE1PREUgPSBAQ1hYREVQTU9ERUAKK0NYWEZMQUdTID0gQENYWEZMQUdTQAorQ1lHUEFUSF9XID0gQENZR1BBVEhfV0AKK0RFRlMgPSBAREVGU0AKK0RFUERJUiA9IEBERVBESVJACitFQ0hPID0gQEVDSE9ACitFQ0hPX0MgPSBARUNIT19DQAorRUNIT19OID0gQEVDSE9fTkAKK0VDSE9fVCA9IEBFQ0hPX1RACitFR1JFUCA9IEBFR1JFUEAKK0VYRUVYVCA9IEBFWEVFWFRACitGNzcgPSBARjc3QAorRkZMQUdTID0gQEZGTEFHU0AKK0lOU1RBTExfREFUQSA9IEBJTlNUQUxMX0RBVEFACitJTlNUQUxMX1BST0dSQU0gPSBASU5TVEFMTF9QUk9HUkFNQAorSU5TVEFMTF9TQ1JJUFQgPSBASU5TVEFMTF9TQ1JJUFRACitJTlNUQUxMX1NUUklQX1BST0dSQU0gPSBASU5TVEFMTF9TVFJJUF9QUk9HUkFNQAorTERGTEFHUyA9IEBMREZMQUdTQAorTElCT0JKUyA9IEBMSUJPQkpTQAorTElCUyA9IEBMSUJTQAorTElCVE9PTCA9IEBMSUJUT09MQAorTE5fUyA9IEBMTl9TQAorTFRMSUJPQkpTID0gQExUTElCT0JKU0AKK0xaT19BU01fVlBBVEggPSBATFpPX0FTTV9WUEFUSEAKK0xaT19DRkxBR1MgPSBATFpPX0NGTEFHU0AKK0xaT19DUFBGTEFHUyA9IEBMWk9fQ1BQRkxBR1NACitMWk9fRVhUUkFfQ0ZMQUdTID0gQExaT19FWFRSQV9DRkxBR1NACitMWk9fRVhUUkFfQ1BQRkxBR1MgPSBATFpPX0VYVFJBX0NQUEZMQUdTQAorTFpPX1VTRV9BU01fRkFMU0UgPSBATFpPX1VTRV9BU01fRkFMU0VACitMWk9fVVNFX0FTTV9UUlVFID0gQExaT19VU0VfQVNNX1RSVUVACitNQUlOVCA9IEBNQUlOVEAKK01BSU5UQUlORVJfTU9ERV9GQUxTRSA9IEBNQUlOVEFJTkVSX01PREVfRkFMU0VACitNQUlOVEFJTkVSX01PREVfVFJVRSA9IEBNQUlOVEFJTkVSX01PREVfVFJVRUAKK01BS0VJTkZPID0gQE1BS0VJTkZPQAorT0JKRVhUID0gQE9CSkVYVEAKK1BBQ0tBR0UgPSBAUEFDS0FHRUAKK1BBQ0tBR0VfQlVHUkVQT1JUID0gQFBBQ0tBR0VfQlVHUkVQT1JUQAorUEFDS0FHRV9OQU1FID0gQFBBQ0tBR0VfTkFNRUAKK1BBQ0tBR0VfU1RSSU5HID0gQFBBQ0tBR0VfU1RSSU5HQAorUEFDS0FHRV9UQVJOQU1FID0gQFBBQ0tBR0VfVEFSTkFNRUAKK1BBQ0tBR0VfVkVSU0lPTiA9IEBQQUNLQUdFX1ZFUlNJT05ACitQQVRIX1NFUEFSQVRPUiA9IEBQQVRIX1NFUEFSQVRPUkAKK1JBTkxJQiA9IEBSQU5MSUJACitTRVRfTUFLRSA9IEBTRVRfTUFLRUAKK1NIRUxMID0gQFNIRUxMQAorU1RSSVAgPSBAU1RSSVBACitWRVJTSU9OID0gQFZFUlNJT05ACithY19jdF9BUiA9IEBhY19jdF9BUkAKK2FjX2N0X0NDID0gQGFjX2N0X0NDQAorYWNfY3RfQ1hYID0gQGFjX2N0X0NYWEAKK2FjX2N0X0Y3NyA9IEBhY19jdF9GNzdACithY19jdF9SQU5MSUIgPSBAYWNfY3RfUkFOTElCQAorYWNfY3RfU1RSSVAgPSBAYWNfY3RfU1RSSVBACithbV9fZmFzdGRlcENDX0ZBTFNFID0gQGFtX19mYXN0ZGVwQ0NfRkFMU0VACithbV9fZmFzdGRlcENDX1RSVUUgPSBAYW1fX2Zhc3RkZXBDQ19UUlVFQAorYW1fX2Zhc3RkZXBDWFhfRkFMU0UgPSBAYW1fX2Zhc3RkZXBDWFhfRkFMU0VACithbV9fZmFzdGRlcENYWF9UUlVFID0gQGFtX19mYXN0ZGVwQ1hYX1RSVUVACithbV9faW5jbHVkZSA9IEBhbV9faW5jbHVkZUAKK2FtX19sZWFkaW5nX2RvdCA9IEBhbV9fbGVhZGluZ19kb3RACithbV9fcXVvdGUgPSBAYW1fX3F1b3RlQAorYW1fX3RhciA9IEBhbV9fdGFyQAorYW1fX3VudGFyID0gQGFtX191bnRhckAKK2JpbmRpciA9IEBiaW5kaXJACitidWlsZCA9IEBidWlsZEAKK2J1aWxkX2FsaWFzID0gQGJ1aWxkX2FsaWFzQAorYnVpbGRfY3B1ID0gQGJ1aWxkX2NwdUAKK2J1aWxkX29zID0gQGJ1aWxkX29zQAorYnVpbGRfdmVuZG9yID0gQGJ1aWxkX3ZlbmRvckAKK2NvbmZpZ3VyZV9DRkxBR1MgPSBAY29uZmlndXJlX0NGTEFHU0AKK2NvbmZpZ3VyZV9DUFBGTEFHUyA9IEBjb25maWd1cmVfQ1BQRkxBR1NACitkYXRhZGlyID0gQGRhdGFkaXJACitleGVjX3ByZWZpeCA9IEBleGVjX3ByZWZpeEAKK2hvc3QgPSBAaG9zdEAKK2hvc3RfYWxpYXMgPSBAaG9zdF9hbGlhc0AKK2hvc3RfY3B1ID0gQGhvc3RfY3B1QAoraG9zdF9vcyA9IEBob3N0X29zQAoraG9zdF92ZW5kb3IgPSBAaG9zdF92ZW5kb3JACitpbmNsdWRlZGlyID0gQGluY2x1ZGVkaXJACitpbmZvZGlyID0gQGluZm9kaXJACitpbnN0YWxsX3NoID0gQGluc3RhbGxfc2hACitsaWJkaXIgPSBAbGliZGlyQAorbGliZXhlY2RpciA9IEBsaWJleGVjZGlyQAorbG9jYWxzdGF0ZWRpciA9IEBsb2NhbHN0YXRlZGlyQAorbWFuZGlyID0gQG1hbmRpckAKK21rZGlyX3AgPSBAbWtkaXJfcEAKK29sZGluY2x1ZGVkaXIgPSBAb2xkaW5jbHVkZWRpckAKK3ByZWZpeCA9IEBwcmVmaXhACitwcm9ncmFtX3RyYW5zZm9ybV9uYW1lID0gQHByb2dyYW1fdHJhbnNmb3JtX25hbWVACitzYmluZGlyID0gQHNiaW5kaXJACitzaGFyZWRzdGF0ZWRpciA9IEBzaGFyZWRzdGF0ZWRpckAKK3N5c2NvbmZkaXIgPSBAc3lzY29uZmRpckAKK3RhcmdldCA9IEB0YXJnZXRACit0YXJnZXRfYWxpYXMgPSBAdGFyZ2V0X2FsaWFzQAordGFyZ2V0X2NwdSA9IEB0YXJnZXRfY3B1QAordGFyZ2V0X29zID0gQHRhcmdldF9vc0AKK3RhcmdldF92ZW5kb3IgPSBAdGFyZ2V0X3ZlbmRvckAKK0lOQ0xVREVTID0gLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUgLUkkKHRvcF9zcmNkaXIpCithbGlnbl9TT1VSQ0VTID0gYWxpZ24uYworY2hrc3VtX1NPVVJDRVMgPSBjaGtzdW0uYworcHJvbW90ZV9TT1VSQ0VTID0gcHJvbW90ZS5jCitzaXplc19TT1VSQ0VTID0gc2l6ZXMuYworYWxpZ25fTERBREQgPSAuLi9zcmMvbGlibHpvMi5sYQorY2hrc3VtX0xEQUREID0gLi4vc3JjL2xpYmx6bzIubGEKK2FsbDogYWxsLWFtCisKKy5TVUZGSVhFUzoKKy5TVUZGSVhFUzogLmMgLmxvIC5vIC5vYmoKKyQoc3JjZGlyKS9NYWtlZmlsZS5pbjogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKHNyY2RpcikvTWFrZWZpbGUuYW0gICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCUBmb3IgZGVwIGluICQ/OyBkbyBcCisJICBjYXNlICckKGFtX19jb25maWd1cmVfZGVwcyknIGluIFwKKwkgICAgKiQkZGVwKikgXAorCSAgICAgIGNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaCBcCisJCSYmIGV4aXQgMDsgXAorCSAgICAgIGV4aXQgMTs7IFwKKwkgIGVzYWM7IFwKKwlkb25lOyBcCisJZWNobyAnIGNkICQodG9wX3NyY2RpcikgJiYgJChBVVRPTUFLRSkgLS1nbnUgIHRlc3RzL01ha2VmaWxlJzsgXAorCWNkICQodG9wX3NyY2RpcikgJiYgXAorCSAgJChBVVRPTUFLRSkgLS1nbnUgIHRlc3RzL01ha2VmaWxlCisuUFJFQ0lPVVM6IE1ha2VmaWxlCitNYWtlZmlsZTogJChzcmNkaXIpL01ha2VmaWxlLmluICQodG9wX2J1aWxkZGlyKS9jb25maWcuc3RhdHVzCisJQGNhc2UgJyQ/JyBpbiBcCisJICAqY29uZmlnLnN0YXR1cyopIFwKKwkgICAgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoOzsgXAorCSAgKikgXAorCSAgICBlY2hvICcgY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoU0hFTEwpIC4vY29uZmlnLnN0YXR1cyAkKHN1YmRpcikvJEAgJChhbV9fZGVwZmlsZXNfbWF5YmUpJzsgXAorCSAgICBjZCAkKHRvcF9idWlsZGRpcikgJiYgJChTSEVMTCkgLi9jb25maWcuc3RhdHVzICQoc3ViZGlyKS8kQCAkKGFtX19kZXBmaWxlc19tYXliZSk7OyBcCisJZXNhYzsKKworJCh0b3BfYnVpbGRkaXIpL2NvbmZpZy5zdGF0dXM6ICQodG9wX3NyY2RpcikvY29uZmlndXJlICQoQ09ORklHX1NUQVRVU19ERVBFTkRFTkNJRVMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKKyQodG9wX3NyY2RpcikvY29uZmlndXJlOiBATUFJTlRBSU5FUl9NT0RFX1RSVUVAICQoYW1fX2NvbmZpZ3VyZV9kZXBzKQorCWNkICQodG9wX2J1aWxkZGlyKSAmJiAkKE1BS0UpICQoQU1fTUFLRUZMQUdTKSBhbS0tcmVmcmVzaAorJChBQ0xPQ0FMX000KTogQE1BSU5UQUlORVJfTU9ERV9UUlVFQCAkKGFtX19hY2xvY2FsX200X2RlcHMpCisJY2QgJCh0b3BfYnVpbGRkaXIpICYmICQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGFtLS1yZWZyZXNoCisKK2NsZWFuLW5vaW5zdFBST0dSQU1TOgorCUBsaXN0PSckKG5vaW5zdF9QUk9HUkFNUyknOyBmb3IgcCBpbiAkJGxpc3Q7IGRvIFwKKwkgIGY9YGVjaG8gJCRwfHNlZCAncy8kKEVYRUVYVCkkJC8vJ2A7IFwKKwkgIGVjaG8gIiBybSAtZiAkJHAgJCRmIjsgXAorCSAgcm0gLWYgJCRwICQkZiA7IFwKKwlkb25lCithbGlnbiQoRVhFRVhUKTogJChhbGlnbl9PQkpFQ1RTKSAkKGFsaWduX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIGFsaWduJChFWEVFWFQpCisJJChMSU5LKSAkKGFsaWduX0xERkxBR1MpICQoYWxpZ25fT0JKRUNUUykgJChhbGlnbl9MREFERCkgJChMSUJTKQorY2hrc3VtJChFWEVFWFQpOiAkKGNoa3N1bV9PQkpFQ1RTKSAkKGNoa3N1bV9ERVBFTkRFTkNJRVMpIAorCUBybSAtZiBjaGtzdW0kKEVYRUVYVCkKKwkkKExJTkspICQoY2hrc3VtX0xERkxBR1MpICQoY2hrc3VtX09CSkVDVFMpICQoY2hrc3VtX0xEQUREKSAkKExJQlMpCitwcm9tb3RlJChFWEVFWFQpOiAkKHByb21vdGVfT0JKRUNUUykgJChwcm9tb3RlX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHByb21vdGUkKEVYRUVYVCkKKwkkKExJTkspICQocHJvbW90ZV9MREZMQUdTKSAkKHByb21vdGVfT0JKRUNUUykgJChwcm9tb3RlX0xEQUREKSAkKExJQlMpCitzaXplcyQoRVhFRVhUKTogJChzaXplc19PQkpFQ1RTKSAkKHNpemVzX0RFUEVOREVOQ0lFUykgCisJQHJtIC1mIHNpemVzJChFWEVFWFQpCisJJChMSU5LKSAkKHNpemVzX0xERkxBR1MpICQoc2l6ZXNfT0JKRUNUUykgJChzaXplc19MREFERCkgJChMSUJTKQorCittb3N0bHljbGVhbi1jb21waWxlOgorCS1ybSAtZiAqLiQoT0JKRVhUKQorCitkaXN0Y2xlYW4tY29tcGlsZToKKwktcm0gLWYgKi50YWIuYworCitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvYWxpZ24uUG9AYW1fX3F1b3RlQAorQEFNREVQX1RSVUVAQGFtX19pbmNsdWRlQCBAYW1fX3F1b3RlQC4vJChERVBESVIpL2Noa3N1bS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvcHJvbW90ZS5Qb0BhbV9fcXVvdGVACitAQU1ERVBfVFJVRUBAYW1fX2luY2x1ZGVAIEBhbV9fcXVvdGVALi8kKERFUERJUikvc2l6ZXMuUG9AYW1fX3F1b3RlQAorCisuYy5vOgorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJaWYgJChDT01QSUxFKSAtTVQgJEAgLU1EIC1NUCAtTUYgIiQoREVQRElSKS8kKi5UcG8iIC1jIC1vICRAICQ8OyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jICQ8CisKKy5jLm9iajoKK0BhbV9fZmFzdGRlcENDX1RSVUVACWlmICQoQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCBgJChDWUdQQVRIX1cpICckPCdgOyBcCitAYW1fX2Zhc3RkZXBDQ19UUlVFQAl0aGVuIG12IC1mICIkKERFUERJUikvJCouVHBvIiAiJChERVBESVIpLyQqLlBvIjsgZWxzZSBybSAtZiAiJChERVBESVIpLyQqLlRwbyI7IGV4aXQgMTsgZmkKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlzb3VyY2U9JyQ8JyBvYmplY3Q9JyRAJyBsaWJ0b29sPW5vIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKENPTVBJTEUpIC1jIGAkKENZR1BBVEhfVykgJyQ8J2AKKworLmMubG86CitAYW1fX2Zhc3RkZXBDQ19UUlVFQAlpZiAkKExUQ09NUElMRSkgLU1UICRAIC1NRCAtTVAgLU1GICIkKERFUERJUikvJCouVHBvIiAtYyAtbyAkQCAkPDsgXAorQGFtX19mYXN0ZGVwQ0NfVFJVRUAJdGhlbiBtdiAtZiAiJChERVBESVIpLyQqLlRwbyIgIiQoREVQRElSKS8kKi5QbG8iOyBlbHNlIHJtIC1mICIkKERFUERJUikvJCouVHBvIjsgZXhpdCAxOyBmaQorQEFNREVQX1RSVUVAQGFtX19mYXN0ZGVwQ0NfRkFMU0VACXNvdXJjZT0nJDwnIG9iamVjdD0nJEAnIGxpYnRvb2w9eWVzIEBBTURFUEJBQ0tTTEFTSEAKK0BBTURFUF9UUlVFQEBhbV9fZmFzdGRlcENDX0ZBTFNFQAlERVBESVI9JChERVBESVIpICQoQ0NERVBNT0RFKSAkKGRlcGNvbXApIEBBTURFUEJBQ0tTTEFTSEAKK0BhbV9fZmFzdGRlcENDX0ZBTFNFQAkkKExUQ09NUElMRSkgLWMgLW8gJEAgJDwKKworbW9zdGx5Y2xlYW4tbGlidG9vbDoKKwktcm0gLWYgKi5sbworCitjbGVhbi1saWJ0b29sOgorCS1ybSAtcmYgLmxpYnMgX2xpYnMKKworZGlzdGNsZWFuLWxpYnRvb2w6CisJLXJtIC1mIGxpYnRvb2wKK3VuaW5zdGFsbC1pbmZvLWFtOgorCitJRDogJChIRUFERVJTKSAkKFNPVVJDRVMpICQoTElTUCkgJChUQUdTX0ZJTEVTKQorCWxpc3Q9JyQoU09VUkNFUykgJChIRUFERVJTKSAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJbWtpZCAtZklEICQkdW5pcXVlCit0YWdzOiBUQUdTCisKK1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJaWYgdGVzdCAteiAiJChFVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIjsgdGhlbiA6OyBlbHNlIFwKKwkgIHRlc3QgLW4gIiQkdW5pcXVlIiB8fCB1bmlxdWU9JCRlbXB0eV9maXg7IFwKKwkgICQoRVRBR1MpICQoRVRBR1NGTEFHUykgJChBTV9FVEFHU0ZMQUdTKSAkKEVUQUdTX0FSR1MpIFwKKwkgICAgJCR0YWdzICQkdW5pcXVlOyBcCisJZmkKK2N0YWdzOiBDVEFHUworQ1RBR1M6ICAkKEhFQURFUlMpICQoU09VUkNFUykgICQoVEFHU19ERVBFTkRFTkNJRVMpIFwKKwkJJChUQUdTX0ZJTEVTKSAkKExJU1ApCisJdGFncz07IFwKKwloZXJlPWBwd2RgOyBcCisJbGlzdD0nJChTT1VSQ0VTKSAkKEhFQURFUlMpICAkKExJU1ApICQoVEFHU19GSUxFUyknOyBcCisJdW5pcXVlPWBmb3IgaSBpbiAkJGxpc3Q7IGRvIFwKKwkgICAgaWYgdGVzdCAtZiAiJCRpIjsgdGhlbiBlY2hvICQkaTsgZWxzZSBlY2hvICQoc3JjZGlyKS8kJGk7IGZpOyBcCisJICBkb25lIHwgXAorCSAgJChBV0spICcgICAgeyBmaWxlc1skJDBdID0gMTsgfSBcCisJICAgICAgIEVORCB7IGZvciAoaSBpbiBmaWxlcykgcHJpbnQgaTsgfSdgOyBcCisJdGVzdCAteiAiJChDVEFHU19BUkdTKSQkdGFncyQkdW5pcXVlIiBcCisJICB8fCAkKENUQUdTKSAkKENUQUdTRkxBR1MpICQoQU1fQ1RBR1NGTEFHUykgJChDVEFHU19BUkdTKSBcCisJICAgICAkJHRhZ3MgJCR1bmlxdWUKKworR1RBR1M6CisJaGVyZT1gJChhbV9fY2QpICQodG9wX2J1aWxkZGlyKSAmJiBwd2RgIFwKKwkgICYmIGNkICQodG9wX3NyY2RpcikgXAorCSAgJiYgZ3RhZ3MgLWkgJChHVEFHU19BUkdTKSAkJGhlcmUKKworZGlzdGNsZWFuLXRhZ3M6CisJLXJtIC1mIFRBR1MgSUQgR1RBR1MgR1JUQUdTIEdTWU1TIEdQQVRIIHRhZ3MKKworZGlzdGRpcjogJChESVNURklMRVMpCisJQHNyY2RpcnN0cmlwPWBlY2hvICIkKHNyY2RpcikiIHwgc2VkICdzfC58LnxnJ2A7IFwKKwl0b3BzcmNkaXJzdHJpcD1gZWNobyAiJCh0b3Bfc3JjZGlyKSIgfCBzZWQgJ3N8LnwufGcnYDsgXAorCWxpc3Q9JyQoRElTVEZJTEVTKSc7IGZvciBmaWxlIGluICQkbGlzdDsgZG8gXAorCSAgY2FzZSAkJGZpbGUgaW4gXAorCSAgICAkKHNyY2RpcikvKikgZmlsZT1gZWNobyAiJCRmaWxlIiB8IHNlZCAic3xeJCRzcmNkaXJzdHJpcC98fCJgOzsgXAorCSAgICAkKHRvcF9zcmNkaXIpLyopIGZpbGU9YGVjaG8gIiQkZmlsZSIgfCBzZWQgInN8XiQkdG9wc3JjZGlyc3RyaXAvfCQodG9wX2J1aWxkZGlyKS98ImA7OyBcCisJICBlc2FjOyBcCisJICBpZiB0ZXN0IC1mICQkZmlsZSB8fCB0ZXN0IC1kICQkZmlsZTsgdGhlbiBkPS47IGVsc2UgZD0kKHNyY2Rpcik7IGZpOyBcCisJICBkaXI9YGVjaG8gIiQkZmlsZSIgfCBzZWQgLWUgJ3MsL1teL10qJCQsLCdgOyBcCisJICBpZiB0ZXN0ICIkJGRpciIgIT0gIiQkZmlsZSIgJiYgdGVzdCAiJCRkaXIiICE9ICIuIjsgdGhlbiBcCisJICAgIGRpcj0iLyQkZGlyIjsgXAorCSAgICAkKG1rZGlyX3ApICIkKGRpc3RkaXIpJCRkaXIiOyBcCisJICBlbHNlIFwKKwkgICAgZGlyPScnOyBcCisJICBmaTsgXAorCSAgaWYgdGVzdCAtZCAkJGQvJCRmaWxlOyB0aGVuIFwKKwkgICAgaWYgdGVzdCAtZCAkKHNyY2RpcikvJCRmaWxlICYmIHRlc3QgJCRkICE9ICQoc3JjZGlyKTsgdGhlbiBcCisJICAgICAgY3AgLXBSICQoc3JjZGlyKS8kJGZpbGUgJChkaXN0ZGlyKSQkZGlyIHx8IGV4aXQgMTsgXAorCSAgICBmaTsgXAorCSAgICBjcCAtcFIgJCRkLyQkZmlsZSAkKGRpc3RkaXIpJCRkaXIgfHwgZXhpdCAxOyBcCisJICBlbHNlIFwKKwkgICAgdGVzdCAtZiAkKGRpc3RkaXIpLyQkZmlsZSBcCisJICAgIHx8IGNwIC1wICQkZC8kJGZpbGUgJChkaXN0ZGlyKS8kJGZpbGUgXAorCSAgICB8fCBleGl0IDE7IFwKKwkgIGZpOyBcCisJZG9uZQorY2hlY2stYW06IGFsbC1hbQorY2hlY2s6IGNoZWNrLWFtCithbGwtYW06IE1ha2VmaWxlICQoUFJPR1JBTVMpCitpbnN0YWxsZGlyczoKK2luc3RhbGw6IGluc3RhbGwtYW0KK2luc3RhbGwtZXhlYzogaW5zdGFsbC1leGVjLWFtCitpbnN0YWxsLWRhdGE6IGluc3RhbGwtZGF0YS1hbQordW5pbnN0YWxsOiB1bmluc3RhbGwtYW0KKworaW5zdGFsbC1hbTogYWxsLWFtCisJQCQoTUFLRSkgJChBTV9NQUtFRkxBR1MpIGluc3RhbGwtZXhlYy1hbSBpbnN0YWxsLWRhdGEtYW0KKworaW5zdGFsbGNoZWNrOiBpbnN0YWxsY2hlY2stYW0KK2luc3RhbGwtc3RyaXA6CisJJChNQUtFKSAkKEFNX01BS0VGTEFHUykgSU5TVEFMTF9QUk9HUkFNPSIkKElOU1RBTExfU1RSSVBfUFJPR1JBTSkiIFwKKwkgIGluc3RhbGxfc2hfUFJPR1JBTT0iJChJTlNUQUxMX1NUUklQX1BST0dSQU0pIiBJTlNUQUxMX1NUUklQX0ZMQUc9LXMgXAorCSAgYHRlc3QgLXogJyQoU1RSSVApJyB8fCBcCisJICAgIGVjaG8gIklOU1RBTExfUFJPR1JBTV9FTlY9U1RSSVBQUk9HPSckKFNUUklQKSciYCBpbnN0YWxsCittb3N0bHljbGVhbi1nZW5lcmljOgorCitjbGVhbi1nZW5lcmljOgorCitkaXN0Y2xlYW4tZ2VuZXJpYzoKKwktdGVzdCAteiAiJChDT05GSUdfQ0xFQU5fRklMRVMpIiB8fCBybSAtZiAkKENPTkZJR19DTEVBTl9GSUxFUykKKworbWFpbnRhaW5lci1jbGVhbi1nZW5lcmljOgorCUBlY2hvICJUaGlzIGNvbW1hbmQgaXMgaW50ZW5kZWQgZm9yIG1haW50YWluZXJzIHRvIHVzZSIKKwlAZWNobyAiaXQgZGVsZXRlcyBmaWxlcyB0aGF0IG1heSByZXF1aXJlIHNwZWNpYWwgdG9vbHMgdG8gcmVidWlsZC4iCitjbGVhbjogY2xlYW4tYW0KKworY2xlYW4tYW06IGNsZWFuLWdlbmVyaWMgY2xlYW4tbGlidG9vbCBjbGVhbi1ub2luc3RQUk9HUkFNUyBcCisJbW9zdGx5Y2xlYW4tYW0KKworZGlzdGNsZWFuOiBkaXN0Y2xlYW4tYW0KKwktcm0gLXJmIC4vJChERVBESVIpCisJLXJtIC1mIE1ha2VmaWxlCitkaXN0Y2xlYW4tYW06IGNsZWFuLWFtIGRpc3RjbGVhbi1jb21waWxlIGRpc3RjbGVhbi1nZW5lcmljIFwKKwlkaXN0Y2xlYW4tbGlidG9vbCBkaXN0Y2xlYW4tdGFncworCitkdmk6IGR2aS1hbQorCitkdmktYW06CisKK2h0bWw6IGh0bWwtYW0KKworaW5mbzogaW5mby1hbQorCitpbmZvLWFtOgorCitpbnN0YWxsLWRhdGEtYW06CisKK2luc3RhbGwtZXhlYy1hbToKKworaW5zdGFsbC1pbmZvOiBpbnN0YWxsLWluZm8tYW0KKworaW5zdGFsbC1tYW46CisKK2luc3RhbGxjaGVjay1hbToKKworbWFpbnRhaW5lci1jbGVhbjogbWFpbnRhaW5lci1jbGVhbi1hbQorCS1ybSAtcmYgLi8kKERFUERJUikKKwktcm0gLWYgTWFrZWZpbGUKK21haW50YWluZXItY2xlYW4tYW06IGRpc3RjbGVhbi1hbSBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMKKworbW9zdGx5Y2xlYW46IG1vc3RseWNsZWFuLWFtCisKK21vc3RseWNsZWFuLWFtOiBtb3N0bHljbGVhbi1jb21waWxlIG1vc3RseWNsZWFuLWdlbmVyaWMgXAorCW1vc3RseWNsZWFuLWxpYnRvb2wKKworcGRmOiBwZGYtYW0KKworcGRmLWFtOgorCitwczogcHMtYW0KKworcHMtYW06CisKK3VuaW5zdGFsbC1hbTogdW5pbnN0YWxsLWluZm8tYW0KKworLlBIT05ZOiBDVEFHUyBHVEFHUyBhbGwgYWxsLWFtIGNoZWNrIGNoZWNrLWFtIGNsZWFuIGNsZWFuLWdlbmVyaWMgXAorCWNsZWFuLWxpYnRvb2wgY2xlYW4tbm9pbnN0UFJPR1JBTVMgY3RhZ3MgZGlzdGNsZWFuIFwKKwlkaXN0Y2xlYW4tY29tcGlsZSBkaXN0Y2xlYW4tZ2VuZXJpYyBkaXN0Y2xlYW4tbGlidG9vbCBcCisJZGlzdGNsZWFuLXRhZ3MgZGlzdGRpciBkdmkgZHZpLWFtIGh0bWwgaHRtbC1hbSBpbmZvIGluZm8tYW0gXAorCWluc3RhbGwgaW5zdGFsbC1hbSBpbnN0YWxsLWRhdGEgaW5zdGFsbC1kYXRhLWFtIGluc3RhbGwtZXhlYyBcCisJaW5zdGFsbC1leGVjLWFtIGluc3RhbGwtaW5mbyBpbnN0YWxsLWluZm8tYW0gaW5zdGFsbC1tYW4gXAorCWluc3RhbGwtc3RyaXAgaW5zdGFsbGNoZWNrIGluc3RhbGxjaGVjay1hbSBpbnN0YWxsZGlycyBcCisJbWFpbnRhaW5lci1jbGVhbiBtYWludGFpbmVyLWNsZWFuLWdlbmVyaWMgbW9zdGx5Y2xlYW4gXAorCW1vc3RseWNsZWFuLWNvbXBpbGUgbW9zdGx5Y2xlYW4tZ2VuZXJpYyBtb3N0bHljbGVhbi1saWJ0b29sIFwKKwlwZGYgcGRmLWFtIHBzIHBzLWFtIHRhZ3MgdW5pbnN0YWxsIHVuaW5zdGFsbC1hbSBcCisJdW5pbnN0YWxsLWluZm8tYW0KKworIyBUZWxsIHZlcnNpb25zIFszLjU5LDMuNjMpIG9mIEdOVSBtYWtlIHRvIG5vdCBleHBvcnQgYWxsIHZhcmlhYmxlcy4KKyMgT3RoZXJ3aXNlIGEgc3lzdGVtIGxpbWl0IChmb3IgU3lzViBhdCBsZWFzdCkgbWF5IGJlIGV4Y2VlZGVkLgorLk5PRVhQT1JUOgpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvdGVzdHMvYWxpZ24uYyBiL2x6by0yLjAzL3Rlc3RzL2FsaWduLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIyYzU0MAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3Rlc3RzL2FsaWduLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qIGFsaWduLmMgLS0gdGVzdCBhbGlnbm1lbnQgKGltcG9ydGFudCBmb3IgMTYtYml0IHN5c3RlbXMpCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpZiAwCisjaW5jbHVkZSAic3JjL2x6b19jb25mLmgiCisjaW5jbHVkZSAic3JjL2x6b19wdHIuaCIKKyNlbmRpZgorI2luY2x1ZGUgImx6by9sem9jb25mLmgiCisKKy8qIHV0aWxpdHkgbGF5ZXIgKi8KKyNkZWZpbmUgV0FOVF9MWk9fTUFMTE9DIDEKKyNpbmNsdWRlICJleGFtcGxlcy9wb3J0YWIuaCIKKworCitpbnQgb3B0X3ZlcmJvc2UgPSAwOworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2xvbmcgYWxpZ25fdGVzdChsem9fYnl0ZXAgYmxvY2ssIGx6b191aW50IGxlbiwgbHpvX3VpbnQgc3RlcCkKK3sKKyAgICBsem9fYnl0ZXAgYjEgPSBibG9jazsKKyAgICBsem9fYnl0ZXAgYjIgPSBibG9jazsKKyAgICBsem9fYnl0ZXAgazEgPSBOVUxMOworICAgIGx6b19ieXRlcCBrMiA9IE5VTEw7CisgICAgbHpvX2J5dGVwIGs7CisgICAgbHpvX2J5dGVwIHg7CisgICAgbHpvX3VpbnQgb2Zmc2V0ID0gMDsKKyAgICBsb25nIGkgPSAwOworCisgICAgYXNzZXJ0KHN0ZXAgPiAwKTsKKyAgICBhc3NlcnQoc3RlcCA8PSA2NTUzNkwpOworICAgIGFzc2VydCgoc3RlcCAmIChzdGVwIC0gMSkpID09IDApOworCisgICAgZm9yIChvZmZzZXQgPSBzdGVwOyBvZmZzZXQgPCBsZW47IG9mZnNldCArPSBzdGVwKQorICAgIHsKKyAgICAgICAgazEgPSBMWk9fUFRSX0FMSUdOX1VQKGIxKzEsc3RlcCk7CisgICAgICAgIGsyID0gYjIgKyBvZmZzZXQ7CisgICAgICAgIGlmIChrMSAhPSBrMikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvciAxOiBpICVsZCBzdGVwICVsZCBvZmZzZXQgJWxkOiAiCisgICAgICAgICAgICAgICAgICAgICIlcCAoJWxkKSAlcCAoJWxkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaSwgKGxvbmcpIHN0ZXAsIChsb25nKSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgIGsxLCAobG9uZykgKGsxIC0gYmxvY2spLAorICAgICAgICAgICAgICAgICAgICBrMiwgKGxvbmcpIChrMiAtIGJsb2NrKSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoazEgLSBzdGVwICE9IGIxKQorICAgICAgICB7CisgICAgICAgICAgICBwcmludGYoImVycm9yIDI6IGkgJWxkIHN0ZXAgJWxkIG9mZnNldCAlbGQ6ICIKKyAgICAgICAgICAgICAgICAgICAgIiVwICglbGQpICVwICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBpLCAobG9uZykgc3RlcCwgKGxvbmcpIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgYjEsIChsb25nKSAoYjEgLSBibG9jayksCisgICAgICAgICAgICAgICAgICAgIGsxLCAobG9uZykgKGsxIC0gYmxvY2spKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyAgICAgICAgYXNzZXJ0KGsxID4gYjEpOworICAgICAgICBhc3NlcnQoazIgPiBiMik7CisgICAgICAgIGFzc2VydCgobHpvX3VpbnQpKGsyIC0gYjIpID09IG9mZnNldCk7CisgICAgICAgIGFzc2VydChrMSAtIG9mZnNldCA9PSBiMik7CisjaWYgZGVmaW5lZChQVFJfQUxJR05FRF80KQorICAgICAgICBpZiAoc3RlcCA9PSA0KQorICAgICAgICB7CisgICAgICAgICAgICBhc3NlcnQoUFRSX0FMSUdORURfNChrMSkpOworICAgICAgICAgICAgYXNzZXJ0KFBUUl9BTElHTkVEXzQoazIpKTsKKyAgICAgICAgICAgIGFzc2VydChQVFJfQUxJR05FRDJfNChrMSxrMikpOworICAgICAgICB9CisjZW5kaWYKKyNpZiBkZWZpbmVkKFBUUl9BTElHTkVEXzgpCisgICAgICAgIGlmIChzdGVwID09IDgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGFzc2VydChQVFJfQUxJR05FRF84KGsxKSk7CisgICAgICAgICAgICBhc3NlcnQoUFRSX0FMSUdORURfOChrMikpOworICAgICAgICAgICAgYXNzZXJ0KFBUUl9BTElHTkVEMl84KGsxLGsyKSk7CisgICAgICAgIH0KKyNlbmRpZgorI2lmIGRlZmluZWQoUFRSX0xJTkVBUikKKyAgICAgICAgYXNzZXJ0KChQVFJfTElORUFSKGsxKSAmIChzdGVwLTEpKSA9PSAwKTsKKyAgICAgICAgYXNzZXJ0KChQVFJfTElORUFSKGsyKSAmIChzdGVwLTEpKSA9PSAwKTsKKyNlbmRpZgorCisgICAgICAgIGZvciAoayA9IGIxICsgMTsgayA8PSBrMTsgaysrKQorICAgICAgICB7CisgICAgICAgICAgICB4ID0gTFpPX1BUUl9BTElHTl9VUChrLHN0ZXApOworICAgICAgICAgICAgaWYgKHggIT0gazEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJlcnJvciAzOiBiYXNlOiAlcCAlcCAlcCAgaSAlbGQgc3RlcCAlbGQgb2Zmc2V0ICVsZDogIgorICAgICAgICAgICAgICAgICAgICAgICAgIiVwICglbGQpICVwICglbGQpICVwICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2ssIGIxLCBiMiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGksIChsb25nKSBzdGVwLCAobG9uZykgb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgazEsIChsb25nKSAoazEgLSBibG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICBrLCAobG9uZykgKGsgLSBibG9jayksCisgICAgICAgICAgICAgICAgICAgICAgICB4LCAobG9uZykgKHggLSBibG9jaykpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgYjEgPSBrMTsKKyAgICAgICAgaSsrOworICAgIH0KKworICAgIHJldHVybiBpOworfQorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQkxPQ0tfTEVOICAgKDEyOCoxMDI0TCkKKworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBsem9fYnl0ZXAgYnVmOworICAgIGx6b191aW50IHN0ZXA7CisKKyAgICBpZiAoYXJnYyA+PSAyICYmIHN0cmNtcChhcmd2WzFdLCItdiIpID09IDApCisgICAgICAgIG9wdF92ZXJib3NlID0gMTsKKworICAgIGlmIChsem9faW5pdCgpICE9IExaT19FX09LKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJsem9faW5pdCgpIGZhaWxlZCAhISFcbiIpOworICAgICAgICByZXR1cm4gMzsKKyAgICB9CisgICAgYnVmID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYygyKkJMT0NLX0xFTiArIDI1Nik7CisgICAgaWYgKGJ1ZiA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisgICAgcHJpbnRmKCJBbGlnbiBpbml0OiAlcCAoIDB4JWx4IClcbiIsIGJ1ZiwgKHVuc2lnbmVkIGxvbmcpIGJ1Zik7CisKKyAgICBmb3IgKHN0ZXAgPSAxOyBzdGVwIDw9IDY1NTM2TDsgc3RlcCAqPSAyKQorICAgIHsKKyAgICAgICAgbHpvX2J5dGVwIGJsb2NrID0gYnVmOworICAgICAgICBsb25nIG47CisgICAgICAgIHVuc2lnbmVkIGdhcDsKKworICAgICAgICBnYXAgPSBfX2x6b19hbGlnbl9nYXAoYmxvY2ssc3RlcCk7CisgICAgICAgIGJsb2NrID0gTFpPX1BUUl9BTElHTl9VUChibG9jayxzdGVwKTsKKyAgICAgICAgaWYgKG9wdF92ZXJib3NlID49IDEpCisgICAgICAgICAgICBwcmludGYoIlNURVAgJTVsZDogR0FQOiAlNWx1ICAlcCAlcCAlNWxkXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZykgc3RlcCwgKGxvbmcpIGdhcCwgYnVmLCBibG9jaywKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIChibG9jayAtIGJ1ZikpOworICAgICAgICBuID0gYWxpZ25fdGVzdChibG9jayxCTE9DS19MRU4sc3RlcCk7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKChuICsgMSkgKiBzdGVwICE9IEJMT0NLX0xFTikKKyAgICAgICAgeworICAgICAgICAgICAgcHJpbnRmKCJlcnJvciA0OiAlbGQgJWxkXG4iLChsb25nKXN0ZXAsbik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGx6b19mcmVlKGJ1Zik7CisgICAgcHJpbnRmKCJBbGlnbm1lbnQgdGVzdCBwYXNzZWQuXG4iKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKgordmk6dHM9NDpldAorKi8KKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvdGVzdHMvY2hrc3VtLmMgYi9sem8tMi4wMy90ZXN0cy9jaGtzdW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWI2ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdGVzdHMvY2hrc3VtLmMKQEAgLTAsMCArMSwxMDQgQEAKKy8qIGNoa3N1bS5jIC0tIGNvbXB1dGUgYSBjaGVja3N1bQorCisgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTFpPIHJlYWwtdGltZSBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnkuCisKKyAgIENvcHlyaWdodCAoQykgMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDQgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAzIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDEgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAwIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICBUaGUgTFpPIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgYWxvbmcgd2l0aCB0aGUgTFpPIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLgorICAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCisKKyAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyCisgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisgICBodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vCisgKi8KKworCisjaW5jbHVkZSAibHpvL2x6b2NvbmYuaCIKKworLyogdXRpbGl0eSBsYXllciAqLworI2RlZmluZSBXQU5UX0xaT19NQUxMT0MgMQorI2luY2x1ZGUgImV4YW1wbGVzL3BvcnRhYi5oIgorCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisvLworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgbHpvX2J5dGVwIGJsb2NrOworICAgIGx6b191aW50IGJsb2NrX2xlbjsKKyAgICBsem9fdWludDMyIGFkbGVyLCBjcmM7CisKKyAgICBpZiAoYXJnYyA8IDAgJiYgYXJndiA9PSBOVUxMKSAgIC8qIGF2b2lkIHdhcm5pbmcgYWJvdXQgdW51c2VkIGFyZ3MgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobHpvX2luaXQoKSAhPSBMWk9fRV9PSykKKyAgICB7CisgICAgICAgIHByaW50ZigibHpvX2luaXQoKSBmYWlsZWQgISEhXG4iKTsKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisvKiBwcmVwYXJlIHRoZSBibG9jayAqLworICAgIGJsb2NrX2xlbiA9IDEyOCAqIDEwMjRMOworICAgIGJsb2NrID0gKGx6b19ieXRlcCkgbHpvX21hbGxvYyhibG9ja19sZW4pOworICAgIGlmIChibG9jayA9PSBOVUxMKQorICAgIHsKKyAgICAgICAgcHJpbnRmKCJvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIDM7CisgICAgfQorICAgIGx6b19tZW1zZXQoYmxvY2ssIDAsIGJsb2NrX2xlbik7CisKKy8qIGFkbGVyMzIgY2hlY2tzdW0gKi8KKyAgICBhZGxlciA9IGx6b19hZGxlcjMyKDAsIE5VTEwsIDApOworICAgIGFkbGVyID0gbHpvX2FkbGVyMzIoYWRsZXIsIGJsb2NrLCBibG9ja19sZW4pOworICAgIGlmIChhZGxlciAhPSAweDAwMWUwMDAxVUwpCisgICAgeworICAgICAgICBwcmludGYoImFkbGVyMzIgY2hlY2tzdW0gZXJyb3IgISEhICgweCUwOGx4KVxuIiwgKGxvbmcpIGFkbGVyKTsKKyAgICAgICAgcmV0dXJuIDI7CisgICAgfQorCisvKiBjcmMzMiBjaGVja3N1bSAqLworICAgIGNyYyA9IGx6b19jcmMzMigwLCBOVUxMLCAwKTsKKyAgICBjcmMgPSBsem9fY3JjMzIoY3JjLCBibG9jaywgYmxvY2tfbGVuKTsKKyAgICBpZiAoY3JjICE9IDB4N2VlOGNkY2RVTCkKKyAgICB7CisgICAgICAgIHByaW50ZigiY3JjMzIgY2hlY2tzdW0gZXJyb3IgISEhICgweCUwOGx4KVxuIiwgKGxvbmcpIGNyYyk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGx6b19mcmVlKGJsb2NrKTsKKyAgICBwcmludGYoIkNoZWNrc3VtIHRlc3QgcGFzc2VkLlxuIik7CisgICAgcmV0dXJuIDA7Cit9CisKKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3Rlc3RzL3Byb21vdGUuYyBiL2x6by0yLjAzL3Rlc3RzL3Byb21vdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODViY2M2Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdGVzdHMvcHJvbW90ZS5jCkBAIC0wLDAgKzEsNzAgQEAKKy8qIHByb21vdGUuYyAtLSB0ZXN0IGludGVyZ3JhbCBwcm9tb3Rpb24KKworICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIExaTyByZWFsLXRpbWUgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA3IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNiBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDUgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA0IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDIgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAxIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTkgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5NyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgVGhlIExaTyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgIGFsb25nIHdpdGggdGhlIExaTyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy4KKyAgIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lcgorICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorICAgaHR0cDovL3d3dy5vYmVyaHVtZXIuY29tL29wZW5zb3VyY2UvbHpvLworICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIHVuc2lnbmVkIGNoYXIgYzsKKyAgICBpbnQgczsKKworICAgIGlmIChhcmdjIDwgMCAmJiBhcmd2ID09IE5VTEwpICAgLyogYXZvaWQgd2FybmluZyBhYm91dCB1bnVzZWQgYXJncyAqLworICAgICAgICByZXR1cm4gMDsKKworICAgIGMgPSAodW5zaWduZWQgY2hhcikgKDEgPDwgKDggKiBzaXplb2YoY2hhcikgLSAxKSk7CisgICAgcyA9IDggKiAoaW50KSAoc2l6ZW9mKGludCkgLSBzaXplb2YoY2hhcikpOworCisgICAgcHJpbnRmKCJJbnRlZ3JhbCBwcm9tb3Rpb246ICIpOworICAgIGlmICgoYyA8PCBzKSA+IDApCisgICAgeworICAgICAgICBwcmludGYoIkNsYXNzaWMgQyAodW5zaWduZWQtcHJlc2VydmluZylcbiIpOworICAgICAgICBwcmludGYoIiVkICVkICV1VVxuIiwgYywgcywgYyA8PCBzKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHByaW50ZigiQU5TSSBDICh2YWx1ZS1wcmVzZXJ2aW5nKVxuIik7CisgICAgICAgIHByaW50ZigiJWQgJWQgJWRcbiIsIGMsIHMsIGMgPDwgcyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCmRpZmYgLS1naXQgYS9sem8tMi4wMy90ZXN0cy9zaXplcy5jIGIvbHpvLTIuMDMvdGVzdHMvc2l6ZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzA0YjJiCi0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdGVzdHMvc2l6ZXMuYwpAQCAtMCwwICsxLDEzMyBAQAorLyogc2l6ZXMuYyAtLSBwcmludCBzaXplcyBvZiB2YXJpb3VzIHR5cGVzCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBMWk8gcmVhbC10aW1lIGRhdGEgY29tcHJlc3Npb24gbGlicmFyeS4KKworICAgQ29weXJpZ2h0IChDKSAyMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNyBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDYgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDA1IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwNCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAyMDAyIE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMjAwMSBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDIwMDAgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk5IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIENvcHlyaWdodCAoQykgMTk5OCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisgICBDb3B5cmlnaHQgKEMpIDE5OTcgTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorICAgQ29weXJpZ2h0IChDKSAxOTk2IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCisgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBMWk8gbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICBhbG9uZyB3aXRoIHRoZSBMWk8gbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuCisgICBJZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisgICA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIKKyAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyAgIGh0dHA6Ly93d3cub2Jlcmh1bWVyLmNvbS9vcGVuc291cmNlL2x6by8KKyAqLworCisKKyNpbmNsdWRlICJsem8vbHpvY29uZi5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKwordW5pb24gX2x6b19hbGlnbjFfdAoreworICAgIGNoYXIgICAgYV9jaGFyOworfTsKKworc3RydWN0IF9sem9fYWxpZ24yX3QKK3sKKyAgICBjaGFyICAgIGFfY2hhcjsKK307CisKK3N0cnVjdCBfbHpvX2FsaWduM190Cit7CisgICAgY2hhciAgICBhX2NoYXI7CisgICAgbG9uZyAgICBhX2xvbmc7Cit9OworCitzdHJ1Y3QgX2x6b19hbGlnbjRfdAoreworICAgIGNoYXIgICAgYV9jaGFyOworICAgIGNoYXIgKiAgYV9jaGFyX3A7Cit9OworCitzdHJ1Y3QgX2x6b19hbGlnbjVfdAoreworICAgIGNoYXIgICAgYV9jaGFyMTsKKyAgICBsb25nICAgIGFfbG9uZzsKKyAgICBjaGFyICAgIGFfY2hhcjI7CisgICAgY2hhciAqICBhX2NoYXJfcDsKK307CisKK3VuaW9uIF9sem9fYWxpZ242X3QKK3sKKyAgICBjaGFyICAgIGFfY2hhcjsKKyAgICBsb25nICAgIGFfbG9uZzsKKyAgICBjaGFyICogIGFfY2hhcl9wOworICAgIGx6b19ieXRlcCAgIGFfbHpvYnl0ZXA7Cit9OworCisKKyNkZWZpbmUgcHJpbnRfc2l6ZSh0eXBlKSBcCisgICAgc3ByaW50ZihzLCJzaXplb2YoJXMpIiwjdHlwZSk7IFwKKyAgICBwcmludGYoIiUtMzBzICUyZFxuIiwgcywgKGludClzaXplb2YodHlwZSkpOworCisjZGVmaW5lIHByaW50X3NzaXplKHR5cGUsbSkgXAorICAgIHNwcmludGYocywic2l6ZW9mKCVzKSIsI3R5cGUpOyBcCisgICAgcHJpbnRmKCIlLTMwcyAlMmQgJTIwbGRcbiIsIHMsIChpbnQpc2l6ZW9mKHR5cGUpLCAobG9uZykobSkpOworCisjZGVmaW5lIHByaW50X3VzaXplKHR5cGUsbSkgXAorICAgIHNwcmludGYocywic2l6ZW9mKCVzKSIsI3R5cGUpOyBcCisgICAgcHJpbnRmKCIlLTMwcyAlMmQgJTIwbHVcbiIsIHMsIChpbnQpc2l6ZW9mKHR5cGUpLCAodW5zaWduZWQgbG9uZykobSkpOworCisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY2hhciBzWzgwXTsKKworICAgIHByaW50X3NzaXplKGNoYXIsQ0hBUl9NQVgpOworICAgIHByaW50X3VzaXplKHVuc2lnbmVkIGNoYXIsVUNIQVJfTUFYKTsKKyAgICBwcmludF9zc2l6ZShzaG9ydCxTSFJUX01BWCk7CisgICAgcHJpbnRfdXNpemUodW5zaWduZWQgc2hvcnQsVVNIUlRfTUFYKTsKKyAgICBwcmludF9zc2l6ZShpbnQsSU5UX01BWCk7CisgICAgcHJpbnRfdXNpemUodW5zaWduZWQgaW50LFVJTlRfTUFYKTsKKyAgICBwcmludF9zc2l6ZShsb25nLExPTkdfTUFYKTsKKyAgICBwcmludF91c2l6ZSh1bnNpZ25lZCBsb25nLFVMT05HX01BWCk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50X3NpemUoY2hhciAqKTsKKyAgICBwcmludF9zaXplKHZvaWQgKCopKHZvaWQpKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgcHJpbnRfc3NpemUobHpvX2ludCxMWk9fSU5UX01BWCk7CisgICAgcHJpbnRfdXNpemUobHpvX3VpbnQsTFpPX1VJTlRfTUFYKTsKKyAgICBwcmludF91c2l6ZShsem9fdWludDMyLExaT19VSU5UMzJfTUFYKTsKKyAgICBwcmludF9zaXplKGx6b19ieXRlcCk7CisgICAgcHJpbnRmKCJcbiIpOworICAgIHByaW50X3NpemUodW5pb24gX2x6b19hbGlnbjFfdCk7CisgICAgcHJpbnRfc2l6ZShzdHJ1Y3QgX2x6b19hbGlnbjJfdCk7CisgICAgcHJpbnRfc2l6ZShzdHJ1Y3QgX2x6b19hbGlnbjNfdCk7CisgICAgcHJpbnRfc2l6ZShzdHJ1Y3QgX2x6b19hbGlnbjRfdCk7CisgICAgcHJpbnRfc2l6ZShzdHJ1Y3QgX2x6b19hbGlnbjVfdCk7CisgICAgcHJpbnRfc2l6ZSh1bmlvbiBfbHpvX2FsaWduNl90KTsKKworICAgIGlmIChhcmdjIDwgMCAmJiBhcmd2ID09IE5VTEwpICAgLyogYXZvaWQgd2FybmluZyBhYm91dCB1bnVzZWQgYXJncyAqLworICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gMDsKK30KKworLyoKK3ZpOnRzPTQ6ZXQKKyovCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3V0aWwvY2hlY2suc2ggYi9sem8tMi4wMy91dGlsL2NoZWNrLnNoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYzJhMmQKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy91dGlsL2NoZWNrLnNoCkBAIC0wLDAgKzEsNDMgQEAKKyMhIC9iaW4vc2gKK3NldCAtZQorCisjCisjIHVzYWdlOiB1dGlsL2NoZWNrLnNoIFtkaXJlY3RvcnldCisjCisjIFRoaXMgc2NyaXB0IHJ1bnMgbHpvdGVzdCB3aXRoIGFsbCBhbGdvcml0aG1zIG9uIGEgY29tcGxldGUgZGlyZWN0b3J5IHRyZWUuCisjIEl0IGlzIG5vdCBzdWl0YWJsZSBmb3IgYWNjdXJhdGUgdGltaW5ncy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorIworCitMWk9URVNUPSJsem90ZXN0IgordGVzdCAteCAuL2x6b3Rlc3QvbHpvdGVzdCAmJiBMWk9URVNUPSIuL2x6b3Rlc3QvbHpvdGVzdCIKK3Rlc3QgLXggLi9sem90ZXN0LmV4ZSAmJiBMWk9URVNUPSIuL2x6b3Rlc3QuZXhlIgordGVzdCAteCAuL2x6b3Rlc3Qub3V0ICYmIExaT1RFU1Q9Ii4vbHpvdGVzdC5vdXQiCisKK2Rpcj0iJHsqLS59IgorCitUTVBGSUxFPSIvdG1wL2x6b18kJC50bXAiCitybSAtZiAkVE1QRklMRQorKGZpbmQgJGRpci8gLXR5cGUgZiAtcHJpbnQgPiAkVE1QRklMRSkgfHwgdHJ1ZQorCisjIyBtZXRob2RzPWAkTFpPVEVTVCAtbSB8IHNlZCAtbiAncy9eICotbVwoWzAtOV0qXCkuKi9cMS9wJ2AKKyMjIG1ldGhvZHM9Ijk3MjEgOTcyMiA5NzIzIDk3MjQgOTcyNSA5NzI2IDk3MjcgOTcyOCA5NzI5IgorbWV0aG9kcz0iMjEgMzEgMSAyIDMgNCA1IDYgNyA4IDkgMTEgMTIgMTMgMTQgMTUgMTYgMTcgMTggMTkgNjEgNzEgODEiCittZXRob2RzPSIkbWV0aG9kcyAxMTEgMTEyIDExNSIKK21ldGhvZHM9IiRtZXRob2RzIDkyMSA5MzEgOTAxIDkxMSIKK21ldGhvZHM9IiRtZXRob2RzIDkwMiA5MTIgOTQyIDk2MiA5NzIgOTgyIDk5MiIKKyMjbWV0aG9kcz0iNzEgOTcyIgorIyNtZXRob2RzPSIxMTAxIDExMDIgMTEwMyAxMTA0IDExMDUgMTEwNiAxMTA3IgorCitMRkxBR1M9Ii1xIC1UIC1uMiAtUyIKK0xGTEFHUz0iLXEgLVQgLW4yIgorCitmb3IgaSBpbiAkbWV0aG9kczsgZG8KKyAgICBjYXQgJFRNUEZJTEUgfCAkTFpPVEVTVCAtbSR7aX0gLUAgJExGTEFHUworZG9uZQorCitybSAtZiAkVE1QRklMRQorZWNobyAiRG9uZS4iCitleGl0IDAKKwpkaWZmIC0tZ2l0IGEvbHpvLTIuMDMvdXRpbC9jaGVja2FzbS5zaCBiL2x6by0yLjAzL3V0aWwvY2hlY2thc20uc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmU4NGY0NgotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3V0aWwvY2hlY2thc20uc2gKQEAgLTAsMCArMSw0NiBAQAorIyEgL2Jpbi9zaAorc2V0IC1lCisKKyMKKyMgdXNhZ2U6IHV0aWwvY2hlY2thc20uc2ggW2RpcmVjdG9yeV0KKyMKKyMgVGhpcyBzY3JpcHQgcnVucyBsem90ZXN0IHdpdGggYWxsIGFzc2VtYmxlciBkZWNvbXByZXNzb3JzCisjIG9uIGEgY29tcGxldGUgZGlyZWN0b3J5IHRyZWUuCisjIEl0IGlzIG5vdCBzdWl0YWJsZSBmb3IgYWNjdXJhdGUgdGltaW5ncy4KKyMKKyMgQ29weXJpZ2h0IChDKSAxOTk2LTIwMDggTWFya3VzIEZyYW56IFhhdmVyIEpvaGFubmVzIE9iZXJodW1lcgorIworCitMWk9URVNUPSJsem90ZXN0IgordGVzdCAteCAuL2x6b3Rlc3QvbHpvdGVzdCAmJiBMWk9URVNUPSIuL2x6b3Rlc3QvbHpvdGVzdCIKK3Rlc3QgLXggLi9sem90ZXN0LmV4ZSAmJiBMWk9URVNUPSIuL2x6b3Rlc3QuZXhlIgordGVzdCAteCAuL2x6b3Rlc3Qub3V0ICYmIExaT1RFU1Q9Ii4vbHpvdGVzdC5vdXQiCitMRkxBR1M9Ii1xIgorCitkaXI9IiR7Ki0ufSIKKworVE1QRklMRT0iL3RtcC9sem9fJCQudG1wIgorcm0gLWYgJFRNUEZJTEUKKyhmaW5kICRkaXIvIC10eXBlIGYgLXByaW50ID4gJFRNUEZJTEUpIHx8IHRydWUKKworZm9yIGkgaW4gMTE7IGRvCisgICAgY2F0ICRUTVBGSUxFIHwgJExaT1RFU1QgLW0ke2l9IC1AICRMRkxBR1MgLUEKKyAgICBjYXQgJFRNUEZJTEUgfCAkTFpPVEVTVCAtbSR7aX0gLUAgJExGTEFHUyAtQSAtUworZG9uZQorCitmb3IgaSBpbiA2MTsgZG8KKyAgICBjYXQgJFRNUEZJTEUgfCAkTFpPVEVTVCAtbSR7aX0gLUAgJExGTEFHUyAtRgorICAgIGNhdCAkVE1QRklMRSB8ICRMWk9URVNUIC1tJHtpfSAtQCAkTEZMQUdTIC1GIC1TCitkb25lCisKK2ZvciBpIGluIDcxIDgxOyBkbworICAgIGNhdCAkVE1QRklMRSB8ICRMWk9URVNUIC1tJHtpfSAtQCAkTEZMQUdTIC1BCisgICAgY2F0ICRUTVBGSUxFIHwgJExaT1RFU1QgLW0ke2l9IC1AICRMRkxBR1MgLUEgLVMKKyAgICBjYXQgJFRNUEZJTEUgfCAkTFpPVEVTVCAtbSR7aX0gLUAgJExGTEFHUyAtRgorICAgIGNhdCAkVE1QRklMRSB8ICRMWk9URVNUIC1tJHtpfSAtQCAkTEZMQUdTIC1GIC1TCitkb25lCisKK3JtIC1mICRUTVBGSUxFCitlY2hvICJEb25lLiIKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9sem8tMi4wMy91dGlsL25vdGltZS5wbCBiL2x6by0yLjAzL3V0aWwvbm90aW1lLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2ZWI0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy91dGlsL25vdGltZS5wbApAQCAtMCwwICsxLDI2IEBACisjISAvdXNyL2Jpbi9wZXJsCisjIworIyMgdmk6dHM9NAorIyMKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMjCisjIyAgQXV0aG9yOgorIyMgICAgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lciAgICAgICAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyMjCisjIyAgRGVzY3JpcHRpb246CisjIyAgICAgIFJlbW92ZSB0aW1pbmcgdmFsdWVzIGZyb20gYSB0YWJsZSBjcmVhdGVkIGJ5IHRhYmxlLnBsCisjIworIyMgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyMjCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKKword2hpbGUgKDw+KSB7CisgICAgaWYgKHN1YnN0cigkXyw1NikgPX4gL15ccytbXGRcLl0rXHMrW1xkXC5dK1xzK1x8XHMqXG4kLykgeworICAgICAgICBzdWJzdHIoJF8sNTYpID0gIiAgICAgMC4wMDAgICAgIDAuMDAwIHxcbiI7CisgICAgfQorICAgIHByaW50OworfQorCitleGl0KDApOworCmRpZmYgLS1naXQgYS9sem8tMi4wMy91dGlsL292ZXJsYXAuc2ggYi9sem8tMi4wMy91dGlsL292ZXJsYXAuc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkwNjEzZAotLS0gL2Rldi9udWxsCisrKyBiL2x6by0yLjAzL3V0aWwvb3ZlcmxhcC5zaApAQCAtMCwwICsxLDI3IEBACisjISAvYmluL3NoCitzZXQgLWUKKworIworIyB1c2FnZTogdXRpbC9vdmVybGFwLnNoIFtkaXJlY3RvcnldCisjCisjIFRoaXMgc2NyaXB0IHJ1bnMgdGhlIG92ZXJsYXAgZXhhbXBsZSBwcm9ncmFtIG9uIGEgY29tcGxldGUgZGlyZWN0b3J5IHRyZWUuCisjCisjIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyMKKworT1ZFUkxBUD0ib3ZlcmxhcCIKK3Rlc3QgLXggLi9leGFtcGxlcy9vdmVybGFwICYmIE9WRVJMQVA9Ii4vZXhhbXBsZXMvb3ZlcmxhcCIKK3Rlc3QgLXggLi9vdmVybGFwLmV4ZSAmJiBPVkVSTEFQPSIuL292ZXJsYXAuZXhlIgorCitkaXI9IiR7Ki0ufSIKKworVE1QRklMRT0iL3RtcC9sem9fJCQudG1wIgorcm0gLWYgJFRNUEZJTEUKKyhmaW5kICRkaXIvIC10eXBlIGYgLXByaW50MCA+ICRUTVBGSUxFKSB8fCB0cnVlCisKK2NhdCAkVE1QRklMRSB8IHhhcmdzIC0wIC1yICRPVkVSTEFQCisKK3JtIC1mICRUTVBGSUxFCitlY2hvICJEb25lLiIKK2V4aXQgMAorCmRpZmYgLS1naXQgYS9sem8tMi4wMy91dGlsL3Nob3J0Zi5wbCBiL2x6by0yLjAzL3V0aWwvc2hvcnRmLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiZWUyZTAKLS0tIC9kZXYvbnVsbAorKysgYi9sem8tMi4wMy91dGlsL3Nob3J0Zi5wbApAQCAtMCwwICsxLDMxIEBACisjISAvdXNyL2Jpbi9wZXJsCisjIworIyMgdmk6dHM9NAorIyMKKyMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyMKKyMjCisjIyAgQXV0aG9yOgorIyMgICAgICBNYXJrdXMgRi5YLkouIE9iZXJodW1lciAgICAgICAgIDxtYXJrdXNAb2Jlcmh1bWVyLmNvbT4KKyMjCisjIyAgRGVzY3JpcHRpb246CisjIyAgICAgIENyZWF0ZSBzaG9ydCBmaWxlcyBmb3IgY29tcHJlc3Npb24gdGVzdAorIyMKKyMjICBDb3B5cmlnaHQgKEMpIDE5OTYtMjAwOCBNYXJrdXMgRnJhbnogWGF2ZXIgSm9oYW5uZXMgT2Jlcmh1bWVyCisjIworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworCiskYyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiI7CiskYyA9ICJceDAwXHgwMVx4MDIiOworJGMgPSAiXHgwMCI7CisKKyR4ID0gJGMgeCAxMDI0OworCitmb3IgJGkgKDAgLi4gNTApIHsKKyAgICAkbmFtZSA9IHNwcmludGYoImYlMDRkLmRhdCIsJGkpOworICAgIG9wZW4oT1VURklMRSwiPiRuYW1lIikgfHwgZGllICIkMDogY2Fubm90IG9wZW4gJyRuYW1lJzogJCEiOworICAgIGJpbm1vZGUoT1VURklMRSk7CisgICAgcHJpbnQgT1VURklMRSBzdWJzdHIoJHgsMCwkaSk7CisgICAgY2xvc2UoT1VURklMRSk7Cit9CisKK2V4aXQoMCk7CmRpZmYgLS1naXQgYS9sem8tMi4wMy91dGlsL3RhYmxlLnBsIGIvbHpvLTIuMDMvdXRpbC90YWJsZS5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGUxYWM4Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdXRpbC90YWJsZS5wbApAQCAtMCwwICsxLDM2MCBAQAorIyEgL3Vzci9iaW4vcGVybAorIyMKKyMjIHZpOnRzPTQ6ZXQKKyMjCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisjIworIyMgIEF1dGhvcjoKKyMjICAgICAgTWFya3VzIEYuWC5KLiBPYmVyaHVtZXIgICAgICAgICA8bWFya3VzQG9iZXJodW1lci5jb20+CisjIworIyMgIERlc2NyaXB0aW9uOgorIyMgICAgICBDb252ZXJ0IHRoZSBvdXRwdXQgb2YgdGhlIExaTyBsem90ZXN0IHByb2dyYW0gaW50byBhIG5pY2UgdGFibGUuCisjIworIyMgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyMjCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKKyRQUk9HID0gJDA7CityZXF1aXJlICdjdGltZS5wbCc7CisKKyMKKyMgZ2V0IG9wdGlvbnMKKyMKKword2hpbGUgKCRfID0gJEFSR1ZbICRbIF0sIC9eLS8pIHsKKyAgICBzaGlmdChAQVJHVik7CisgICAgL14tLSQvICYmICgkb3B0X2xhc3QgPSAxLCBsYXN0KTsKKworICAgIC9eLS1zb3J0PW5hbWUvICYmICgkb3B0X3NvcnRfc3VtbWFyeV9ieV9uYW1lKyssIG5leHQpOworICAgIC9eLS1zb3J0PXJhdGlvLyAmJiAoJG9wdF9zb3J0X3N1bW1hcnlfYnlfcmF0aW8rKywgbmV4dCk7CisgICAgL14tcy8gJiYgKCRvcHRfc3VtbWFyeV9vbmx5KyssIG5leHQpOworICAgIC9eLXQvICYmICgkb3B0X2NsZWFyX3RpbWUrKywgbmV4dCk7Cit9CisKKworJGFsZyA9ICcnOworJHNlcCA9ICIrIiAuICgiLSIgeCA3NikgLiAiK1xuIjsKKworJGJsb2NrX3NpemUgPSAtMTsKKworJG4gPSAwOworQGFsZ3MgPSAoKTsKKyVhdmVyYWdlID0gKCk7CisldG90YWwgPSAoKTsKKworJGx6b192ZXJzaW9uX3N0cmluZyA9ICcnOworJGx6b192ZXJzaW9uX2RhdGUgPSAnJzsKKworCisjIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorIyAvLworIyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3doaWxlICg8PikgeworCisgICAgaWYgKC8oXnxccykoXGQrKVxzK2Jsb2NrXC1zaXplL2kpIHsKKyAgICAgICAgaWYgKCRibG9ja19zaXplIDwgMCkgeworICAgICAgICAgICAgJGJsb2NrX3NpemUgPSAkMjsKKyAgICAgICAgICAgICZpbnRybygkYmxvY2tfc2l6ZSk7CisgICAgICAgIH0gZWxzaWYgKCRibG9ja19zaXplICE9ICQyKSB7CisgICAgICAgICAgICBkaWUgIiRQUk9HOiBibG9jay1zaXplOiAkYmxvY2tfc2l6ZSAhPSAkMlxuIjsKKyAgICAgICAgfQorICAgICAgICBuZXh0OworICAgIH0KKworICAgIGlmICgvXlxzKkxaT1xzLipsaWJyYXJ5XHMrXCh2XHMqKFtcd1wuXHNdKylccypcLFxzKihbXlwpXSspXCkvKSB7CisgICAgICAgICRsem9fdmVyc2lvbl9zdHJpbmcgPSAkMTsKKyAgICAgICAgJGx6b192ZXJzaW9uX2RhdGUgPSAkMjsKKyAgICAgICAgbmV4dDsKKyAgICB9CisKKyAgICBpZiAoL15ccyooXFMrKFxzK1xbXFMrXF0pPylccyooXHwuKlx8KVxzKiQvaSkgeworICAgICAgICBpZiAoJDEgbmUgJGFsZykgeworICAgICAgICAgICAgJmZvb3RlcigkMSk7CisgICAgICAgICAgICAmaGVhZGVyKCQxKTsKKyAgICAgICAgfQorICAgICAgICAkbGluZSA9ICQzOworICAgICAgICAmc3RhdHMoKmxpbmUpOworICAgICAgICBwcmludCAiJGxpbmVcbiIgaWYgKCEkb3B0X3N1bW1hcnlfb25seSk7CisgICAgfQorfQorJmZvb3RlcigkMSk7CisKKyZzdW1tYXJ5KCk7CisKK2V4aXQoMCk7CisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdWIgc3RhdHMgeworICAgIGxvY2FsICgqbCkgPSBAXzsKKyAgICBsb2NhbCAoJHgxLCAkeDIsICR4MywgJHg0LCAkeDUsICR4NiwgJHg3LCAkeDgpOworCisgICAgaWYgKCRsICF+IC9eXHxccyooLis/KVxzKyhcZCspXHMrKFxkKylccysoXGQrKVxzKyhbXGRcLl0rXHMrKT8oW1xkXC5dK1xzKyk/KFtcZFwuXSspXHMrKFtcZFwuXSspXHMqXHwvKSB7CisgICAgICAgIGRpZSAkXzsKKyAgICB9CisKKyAgICAkbisrOworCisgICAgJHgxID0gJDE7ICR4MiA9ICQyOyAkeDMgPSAkMzsgJHg0ID0gJDQ7CisgICAgJHg1ID0gKCR4MiA+IDApID8gJHg0ICogMTAwLjAgLyAkeDIgOiAwLjA7CisgICAgJHg2ID0gKCR4MiA+IDApID8gJHg0ICogICA4LjAgLyAkeDIgOiAwLjA7CisgICAgJHg3ID0gJDc7ICR4OCA9ICQ4OworCisgICAgIyBjb252ZXJ0IGZyb20ga0IvcyB0byBNQi9zIChmb3Igb2xkIHZlcnNpb25zIG9mIGx6b3Rlc3QpCisgICAgaWYgKCR4NyA9fiAvXC5cZFxkJC8pIHsgJHg3ID0gJHg3IC8gMTAwMC4wOyB9CisgICAgaWYgKCR4OCA9fiAvXC5cZFxkJC8pIHsgJHg4ID0gJHg4IC8gMTAwMC4wOyB9CisKKyAgICBpZiAoJG9wdF9jbGVhcl90aW1lKSB7CisgICAgICAgICR4NyA9ICR4OCA9IDAuMDsKKyAgICB9CisKKyAgICAkc1swXSArPSAkeDI7CisgICAgJHNbMV0gKz0gJHgzOworICAgICRzWzJdICs9ICR4NDsKKyAgICAkc1szXSArPSAkeDU7CisgICAgJHNbNF0gKz0gJHg2OworICAgIGlmICgkeDcgPiAwKSB7CisgICAgICAgICRzWzVdICs9IDEuMCAvICR4NzsgJHNuWzVdICs9IDE7CisgICAgfQorICAgIGlmICgkeDggPiAwKSB7CisgICAgICAgICRzWzZdICs9IDEuMC8gJHg4OyAkc25bNl0gKz0gMTsKKyAgICB9CisKKyAgICAkeDEgPX4gcy9ccyskLy87CisgICAgJGwgPSBzcHJpbnRmKCJ8ICUtMTRzICUxMGQgJTVkICU5ZCAlNi4xZiAlNS4yZiAlOS4zZiAlOS4zZiB8IiwKKyAgICAgICAgICAgICAgICAgICAgJHgxLCAkeDIsICR4MywgJHg0LCAkeDUsICR4NiwgJHg3LCAkeDgpOworfQorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3ViIGhlYWRlciB7CisgICAgbG9jYWwgKCR0KSA9IEBfOworCisgICAgJGFsZyA9ICR0OworCisgICAgIyByZXNldCBzdGF0cworICAgICRuID0gMDsKKyAgICBAcyA9ICgwLCAwLCAwLCAwLjAsIDAuMCwgMC4wLCAwLjApOworICAgIEBzbiA9ICgwLCAwLCAwLCAwLCAwLCAwLCAwKTsKKworICAgIHJldHVybiBpZiAkb3B0X3N1bW1hcnlfb25seTsKKworICAgIHByaW50ICJcbiRhbGdcblxuIjsKKyAgICBwcmludCAkc2VwOworcHJpbnQgPDxFbmRPZlN0cmluZzsKK3wgRmlsZSBOYW1lICAgICAgICAgIExlbmd0aCAgIEN4QiAgICBDb21MZW4gIFJhdGlvJSBCaXRzICBDb20gTUIvcyAgRGVjIE1CL3MgfAorfCAtLS0tLS0tLS0gICAgICAgICAgLS0tLS0tICAgLS0tICAgIC0tLS0tLSAgLS0tLS0gIC0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSB8CitFbmRPZlN0cmluZworfQorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3ViIGZvb3RlciB7CisgICAgbG9jYWwgKCR0KSA9IEBfOworICAgIGxvY2FsICgkc2htNSwgJHNobTYpOworCisgICAgcmV0dXJuIHVubGVzcyAkYWxnOworICAgIGRpZSBpZiAkbiA8PSAwOworICAgIGRpZSBpZiAkc1swXSA8PSAwOworCisgICAgIyBoYXJtb25pYyBtZWFuCisgICAgJHNobTUgPSAkc1s1XSA+IDAgPyAkc25bNV0gLyAkc1s1XSA6IDAuMDsKKyAgICAkc2htNiA9ICRzWzZdID4gMCA/ICRzbls2XSAvICRzWzZdIDogMC4wOworCisgICAgcHVzaChAYWxncywkYWxnKTsKKworICAgICRhdmVyYWdleyRhbGd9ID0KKyAgICAgICAgc3ByaW50ZigifCAlLTE0cyAlMTBkICU1ZCAlOWQgJTYuMWYgJTUuMmYgJTkuM2YgJTkuM2YgfFxuIiwKKyAgICAgICAgICAgICJBdmVyYWdlIiwgJHNbMF0vJG4sICRzWzFdLyRuLCAkc1syXS8kbiwKKyAgICAgICAgICAgICRzWzNdLyRuLCAkc1s0XS8kbiwKKyAgICAgICAgICAgICRzaG01LCAkc2htNik7CisKKyAgICAkdG90YWx7JGFsZ30gPQorICAgICAgICBzcHJpbnRmKCJ8ICUtMTRzICUxMGQgJTVkICU5ZCAlNi4xZiAlNS4yZiAlOS4zZiAlOS4zZiB8XG4iLAorICAgICAgICAgICAgIlRvdGFsIiwgJHNbMF0sICRzWzFdLCAkc1syXSwKKyAgICAgICAgICAgICRzWzJdLyRzWzBdKjEwMCwgJHNbMl0vJHNbMF0qOCwKKyAgICAgICAgICAgICRzaG01LCAkc2htNik7CisKKyAgICByZXR1cm4gaWYgJG9wdF9zdW1tYXJ5X29ubHk7CisKKyAgICBwcmludCAkc2VwOworICAgIHByaW50ICRhdmVyYWdleyRhbGd9OworICAgIHByaW50ICR0b3RhbHskYWxnfTsKKyAgICBwcmludCAkc2VwLCAiXG4iOworfQorCisKKyMgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIC8vCisjICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworJHNvcnRfbW9kZSA9IDA7CisKK3N1YiBjbXBfYnlfcmF0aW8geworICAgIGxvY2FsICgkYWEsICRiYik7CisKKyAgICBpZiAoJHNvcnRfbW9kZSA9PSAwKSB7CisgICAgICAgICRhYSA9ICRhdmVyYWdleyRhfTsKKyAgICAgICAgJGJiID0gJGF2ZXJhZ2V7JGJ9OworICAgIH0gZWxzaWYgKCRzb3J0X21vZGUgPT0gMSkgeworICAgICAgICAkYWEgPSAkdG90YWx7JGF9OworICAgICAgICAkYmIgPSAkdG90YWx7JGJ9OworICAgIH0gZWxzZSB7CisgICAgICAgIGRpZTsKKyAgICB9CisKKyAgICAoJGFhID1+IG0lXlxzKlx8XHMrXFMrXHMrXGQrXHMrXGQrXHMrXGQrXHMrKFxTKyklKSB8fCBkaWU7CisgICAgJGFhID0gJDE7CisgICAgKCRiYiA9fiBtJV5ccypcfFxzK1xTK1xzK1xkK1xzK1xkK1xzK1xkK1xzKyhcUyspJSkgfHwgZGllOworICAgICRiYiA9ICQxOworCisgICAgIyAkYWEgPCAkYmI7CisgICAgJGFhIGNtcCAkYmI7Cit9CisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdWIgc3VtbWFyeSB7CisgICAgbG9jYWwgKCRsKTsKKyAgICBsb2NhbCAoQGspOworCisgICAgJHNvcnRfbW9kZSA9IDA7CisgICAgaWYgKCRvcHRfc29ydF9zdW1tYXJ5X2J5X25hbWUpIHsKKyAgICAgICAgQGsgPSBzb3J0KEBhbGdzKTsKKyAgICB9IGVsc2lmICgkb3B0X3NvcnRfc3VtbWFyeV9ieV9yYXRpbykgeworICAgICAgICBAayA9IHNvcnQoY21wX2J5X3JhdGlvIEBhbGdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBAayA9IEBhbGdzOworICAgIH0KKworICAgIHByaW50ICJcblxuIjsKKyAgICBwcmludCAiU3VtbWFyeSBvZiBhdmVyYWdlIHZhbHVlc1xuXG4iOworICAgIHByaW50ICRzZXA7CitwcmludCA8PEVuZE9mU3RyaW5nOworfCBBbGdvcml0aG0gICAgICAgICAgTGVuZ3RoICAgQ3hCICAgIENvbUxlbiAgUmF0aW8lIEJpdHMgIENvbSBNQi9zICBEZWMgTUIvcyB8Cit8IC0tLS0tLS0tLSAgICAgICAgICAtLS0tLS0gICAtLS0gICAgLS0tLS0tICAtLS0tLSAgLS0tLSAgLS0tLS0tLS0gIC0tLS0tLS0tIHwKK0VuZE9mU3RyaW5nCisKKyAgICBmb3IgKEBrKSB7CisgICAgICAgICRsID0gJGF2ZXJhZ2V7JF99OworICAgICAgICAkbCA9fiBzL0F2ZXJhZ2VbXHNdezd9L3NwcmludGYoIiUtMTRzIiwkXykvZTsKKyAgICAgICAgcHJpbnQgJGw7CisgICAgfQorICAgIHByaW50ICRzZXA7CisKKworCisgICAgJHNvcnRfbW9kZSA9IDE7CisgICAgaWYgKCRvcHRfc29ydF9zdW1tYXJ5X2J5X25hbWUpIHsKKyAgICAgICAgQGsgPSBzb3J0KEBhbGdzKTsKKyAgICB9IGVsc2lmICgkb3B0X3NvcnRfc3VtbWFyeV9ieV9yYXRpbykgeworICAgICAgICBAayA9IHNvcnQoY21wX2J5X3JhdGlvIEBhbGdzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBAayA9IEBhbGdzOworICAgIH0KKworICAgIHByaW50ICJcblxuIjsKKyAgICBwcmludCAiU3VtbWFyeSBvZiB0b3RhbCB2YWx1ZXNcblxuIjsKKyAgICBwcmludCAkc2VwOworcHJpbnQgPDxFbmRPZlN0cmluZzsKK3wgQWxnb3JpdGhtICAgICAgICAgIExlbmd0aCAgIEN4QiAgICBDb21MZW4gIFJhdGlvJSBCaXRzICBDb20gTUIvcyAgRGVjIE1CL3MgfAorfCAtLS0tLS0tLS0gICAgICAgICAgLS0tLS0tICAgLS0tICAgIC0tLS0tLSAgLS0tLS0gIC0tLS0gIC0tLS0tLS0tICAtLS0tLS0tLSB8CitFbmRPZlN0cmluZworCisgICAgZm9yIChAaykgeworICAgICAgICAkbCA9ICR0b3RhbHskX307CisgICAgICAgICRsID1+IHMvVG90YWxbXHNdezl9L3NwcmludGYoIiUtMTRzIiwkXykvZTsKKyAgICAgICAgcHJpbnQgJGw7CisgICAgfQorICAgIHByaW50ICRzZXA7Cit9CisKKworIyAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgLy8KKyMgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdWIgaW50cm8geworICAgIGxvY2FsICgkYnMpID0gQF87CisgICAgbG9jYWwgKCR2LCAkdCwgJHgpOworICAgIGxvY2FsICgkdSwgJHVuYW1lX20sICR1bmFtZV9zLCAkdW5hbWVfcik7CisKKyAgICAkdCA9ICZjdGltZSh0aW1lKTsgY2hvcCgkdCk7CisgICAgJHQgPSBzcHJpbnRmKCIlLTU1cyB8IiwgJHQpOworCisgICAgJHY9Jyc7CisgICAgaWYgKCRsem9fdmVyc2lvbl9zdHJpbmcpIHsKKyAgICAgICAgJHYgPSAkbHpvX3ZlcnNpb25fc3RyaW5nOworICAgICAgICAkdiAuPSAnLCAnIC4gJGx6b192ZXJzaW9uX2RhdGUgaWYgJGx6b192ZXJzaW9uX2RhdGU7CisgICAgICAgICR2ID0gc3ByaW50ZigiJS01NXMgfCIsICR2KTsKKyAgICAgICAgJHYgPSBzcHJpbnRmKCJ8IExaTyB2ZXJzaW9uICAgICAgOiAlc1xuIiwgJHYpOworICAgIH0KKworICAgIGlmICgkYnMgJSAxMDI0ID09IDApIHsKKyAgICAgICAgJHggPSBzcHJpbnRmKCIlZCAoPSAlZCBrQikiLCAkYnMsICRicyAvIDEwMjQpOworICAgIH0gZWxzZSB7CisgICAgICAgICR4ID0gc3ByaW50ZigiJWQgKD0gJS4zZiBrQikiLCAkYnMsICRicyAvIDEwMjQuMCk7CisgICAgfQorICAgICR4ID0gc3ByaW50ZigiJS01NXMgfCIsICR4KTsKKworICAgICR1PScnOworICAgIGlmICgxID09IDEpIHsKKyAgICAgICAgJHVuYW1lX3MgPSBgdW5hbWUgLXNgOyAkdW5hbWVfcyA9fiBzL15ccysvLzsgJHVuYW1lX3MgPX4gcy9ccyskLy87CisgICAgICAgICR1bmFtZV9yID0gYHVuYW1lIC1yYDsgJHVuYW1lX3IgPX4gcy9eXHMrLy87ICR1bmFtZV9yID1+IHMvXHMrJC8vOworICAgICAgICAkdW5hbWVfbSA9IGB1bmFtZSAtbWA7ICR1bmFtZV9tID1+IHMvXlxzKy8vOyAkdW5hbWVfbSA9fiBzL1xzKyQvLzsKKyAgICAgICAgaWYgKCR1bmFtZV9zICYmICR1bmFtZV9tKSB7CisgICAgICAgICAgICAkdSA9ICR1bmFtZV9zOworICAgICAgICAgICAgJHUgLj0gJyAnIC4gJHVuYW1lX3IgaWYgJHVuYW1lX3I7CisgICAgICAgICAgICAkdSAuPSAnICcgLiAkdW5hbWVfbTsKKyAgICAgICAgICAgICR1ID0gc3ByaW50ZigiJS01NXMgfCIsICR1KTsKKyAgICAgICAgICAgICR1ID0gc3ByaW50ZigifCBPcGVyYXRpbmcgc3lzdGVtIDogJXNcbiIsICR1KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBwcmludCA8PEVuZE9mU3RyaW5nOworCisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgREFUQSBDT01QUkVTU0lPTiBURVNUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCA9PT09PT09PT09PT09PT09PT09PT0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFRpbWUgb2YgcnVuICAgICAgOiAkdAorJHYkdXwgQ29udGV4dCBsZW5ndGggICA6ICR4CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKworCitOb3RlczoKKy0gQ3hCIGlzIHRoZSBudW1iZXIgb2YgaW5kZXBlbmRlbnQgYmxvY2tzIGEgZmlsZSB3YXMgc3BsaXR0ZWQKKy0gTUIvcyBpcyB0aGUgc3BlZWQgbWVhc3VyZWQgaW4gMSwwMDAsMDAwIHVuY29tcHJlc3NlZCBieXRlcyBwZXIgc2Vjb25kCistIGFsbCBhdmVyYWdlcyBhcmUgY2FsY3VsYXRlZCBmcm9tIHRoZSB1bi1yb3VuZGVkIHZhbHVlcworLSB0aGUgYXZlcmFnZSByYXRpbyAmIGJpdHMgYXJlIGNhbGN1bGF0ZWQgYnkgdGhlIGFyaXRobWV0aWMgbWVhbgorLSB0aGUgYXZlcmFnZSBzcGVlZCBpcyBjYWxjdWxhdGVkIGJ5IHRoZSBoYXJtb25pYyBtZWFuCisKKworRW5kT2ZTdHJpbmcKK30KKworX19FTkRfXworCisKKyMjIyBpbnNlcnQgc29tZXRoaW5nIGxpa2UgdGhpcyBhZnRlciAnVGltZSBvZiBydW4nOgorCit8IEhhcmR3YXJlICAgICAgICAgOiBJbnRlbCBQZW50aXVtIDEzMywgNjQgTUIgUkFNLCAyNTYga0IgQ2FjaGUgICAgICAgICAgfAorfCBPcGVyYXRpbmcgc3lzdGVtIDogTVMtRE9TIDcuMTAsIEhJTUVNLlNZUyAzLjk1LCBET1MvNEdXIDEuOTcgICAgICAgICAgIHwKK3wgQ29tcGlsZXIgICAgICAgICA6IFdhdGNvbSBDMzIgMTAuNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IENvbXBpbGVyIGZsYWdzICAgOiAtbWYgLTVyIC1vbmVhdHggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorfCBUZXN0IHN1aXRlICAgICAgIDogQ2FsZ2FyeSBDb3JwdXMgU3VpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgRmlsZXMgaW4gc3VpdGUgICA6IDE0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8IFRpbWluZyBhY2N1cmFjeSAgOiBPbmUgcGFydCBpbiAxMDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorCisKZGlmZiAtLWdpdCBhL2x6by0yLjAzL3V0aWwvdW5jb21wci5wbCBiL2x6by0yLjAzL3V0aWwvdW5jb21wci5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmM1MjY1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLTIuMDMvdXRpbC91bmNvbXByLnBsCkBAIC0wLDAgKzEsMzIgQEAKKyMhIC91c3IvYmluL3BlcmwKKyMjCisjIyB2aTp0cz00CisjIworIyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0jIworIyMKKyMjICBBdXRob3I6CisjIyAgICAgIE1hcmt1cyBGLlguSi4gT2Jlcmh1bWVyICAgICAgICAgPG1hcmt1c0BvYmVyaHVtZXIuY29tPgorIyMKKyMjICBEZXNjcmlwdGlvbjoKKyMjICAgICAgQ3JlYXRlIHVuY29tcHJlc3NpYmxlIGZpbGVzIGZvciBjb21wcmVzc2lvbiB0ZXN0CisjIworIyMgIENvcHlyaWdodCAoQykgMTk5Ni0yMDA4IE1hcmt1cyBGcmFueiBYYXZlciBKb2hhbm5lcyBPYmVyaHVtZXIKKyMjCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSMjCisKKyR4ID0gJyAnIHggNjU1MzY7CiskaSA9IDA7Cit3aGlsZSAoJGkgPCA2NTUzNikgeworICAgIHN1YnN0cigkeCwkaSwxKSA9IHBhY2soJ0MnLHJhbmQoMjU2KSk7CisgICAgJGkrKzsKK30KKworZm9yICRpICgxLDIsNCw4LDE2LDMyLDY0KSB7CisgICAgJG5hbWUgPSBzcHJpbnRmKCJ1JTA0ZC5kYXQiLCRpKTsKKyAgICBvcGVuKE9VVEZJTEUsIj4kbmFtZSIpIHx8IGRpZSAiJDA6IGNhbm5vdCBvcGVuICckbmFtZSc6ICQhIjsKKyAgICBiaW5tb2RlKE9VVEZJTEUpOworICAgIHByaW50IE9VVEZJTEUgc3Vic3RyKCR4LDAsJGkqMTAyNCk7CisgICAgY2xvc2UoT1VURklMRSk7Cit9CisKK2V4aXQoMCk7CmRpZmYgLS1naXQgYS9sem8udGFyLmd6IGIvbHpvLnRhci5negpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDMzNzA3Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLnRhci5negpCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS9sem8udXJsIGIvbHpvLnVybApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2JiMmQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbHpvLnVybApAQCAtMCwwICsxIEBACitodHRwOi8vd3d3Lm9iZXJodW1lci5jb20vb3BlbnNvdXJjZS9sem8vZG93bmxvYWQvbHpvLTIuMDMudGFyLmd6CmRpZmYgLS1naXQgYS9sem8udmVyc2lvbiBiL2x6by52ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZWE2Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9sem8udmVyc2lvbgpAQCAtMCwwICsxIEBACisyLjAzCg==